Revision a1578d63 lib/cmdlib.py
b/lib/cmdlib.py | ||
---|---|---|
2958 | 2958 |
raise errors.ProgrammerError("Wrong template configuration") |
2959 | 2959 |
remote_node = secondary_nodes[0] |
2960 | 2960 |
(minor_pa, minor_pb, |
2961 |
minor_sa, minor_sb) = [None, None, None, None] |
|
2961 |
minor_sa, minor_sb) = cfg.AllocateDRBDMinor( |
|
2962 |
[primary_node, primary_node, remote_node, remote_node], instance_name) |
|
2962 | 2963 |
|
2963 | 2964 |
names = _GenerateUniqueNames(cfg, [".sda_data", ".sda_meta", |
2964 | 2965 |
".sdb_data", ".sdb_meta"]) |
... | ... | |
3517 | 3518 |
feedback_fn("* creating instance disks...") |
3518 | 3519 |
if not _CreateDisks(self.cfg, iobj): |
3519 | 3520 |
_RemoveDisks(iobj, self.cfg) |
3521 |
self.cfg.ReleaseDRBDMinors(instance) |
|
3520 | 3522 |
raise errors.OpExecError("Device creation failed, reverting...") |
3521 | 3523 |
|
3522 | 3524 |
feedback_fn("adding instance %s to cluster config" % instance) |
... | ... | |
3525 | 3527 |
# Declare that we don't want to remove the instance lock anymore, as we've |
3526 | 3528 |
# added the instance to the config |
3527 | 3529 |
del self.remove_locks[locking.LEVEL_INSTANCE] |
3530 |
# Remove the temp. assignements for the instance's drbds |
|
3531 |
self.cfg.ReleaseDRBDMinors(instance) |
|
3528 | 3532 |
|
3529 | 3533 |
if self.op.wait_for_sync: |
3530 | 3534 |
disk_abort = not _WaitForSync(self.cfg, iobj, self.proc) |
... | ... | |
4027 | 4031 |
|
4028 | 4032 |
|
4029 | 4033 |
# Step 4: dbrd minors and drbd setups changes |
4030 |
minors = [None for dev in instance.disks] |
|
4034 |
# after this, we must manually remove the drbd minors on both the |
|
4035 |
# error and the success paths |
|
4036 |
minors = cfg.AllocateDRBDMinor([new_node for dev in instance.disks], |
|
4037 |
instance.name) |
|
4031 | 4038 |
logging.debug("Allocated minors %s" % (minors,)) |
4032 | 4039 |
self.proc.LogStep(4, steps_total, "changing drbd configuration") |
4033 | 4040 |
for dev, new_minor in zip(instance.disks, minors): |
... | ... | |
4041 | 4048 |
new_logical_id = (new_node, pri_node, |
4042 | 4049 |
dev.logical_id[2], new_minor, dev.logical_id[4]) |
4043 | 4050 |
iv_names[dev.iv_name] = (dev, dev.children, new_logical_id) |
4051 |
logging.debug("Allocated new_minor: %s, new_logical_id: %s", new_minor, |
|
4052 |
new_logical_id) |
|
4044 | 4053 |
new_drbd = objects.Disk(dev_type=constants.LD_DRBD8, |
4045 | 4054 |
logical_id=new_logical_id, |
4046 | 4055 |
children=dev.children) |
4047 | 4056 |
if not _CreateBlockDevOnSecondary(cfg, new_node, instance, |
4048 | 4057 |
new_drbd, False, |
4049 | 4058 |
_GetInstanceInfoText(instance)): |
4059 |
self.cfg.ReleaseDRBDMinors(instance.name) |
|
4050 | 4060 |
raise errors.OpExecError("Failed to create new DRBD on" |
4051 | 4061 |
" node '%s'" % new_node) |
4052 | 4062 |
|
... | ... | |
4075 | 4085 |
|
4076 | 4086 |
if not done: |
4077 | 4087 |
# no detaches succeeded (very unlikely) |
4088 |
self.cfg.ReleaseDRBDMinors(instance.name) |
|
4078 | 4089 |
raise errors.OpExecError("Can't detach at least one DRBD from old node") |
4079 | 4090 |
|
4080 | 4091 |
# if we managed to detach at least one, we update all the disks of |
... | ... | |
4084 | 4095 |
dev.logical_id = new_logical_id |
4085 | 4096 |
cfg.SetDiskID(dev, pri_node) |
4086 | 4097 |
cfg.Update(instance) |
4098 |
# we can remove now the temp minors as now the new values are |
|
4099 |
# written to the config file (and therefore stable) |
|
4100 |
self.cfg.ReleaseDRBDMinors(instance.name) |
|
4087 | 4101 |
|
4088 | 4102 |
# and now perform the drbd attach |
4089 | 4103 |
info("attaching primary drbds to new secondary (standalone => connected)") |
Also available in: Unified diff