SetDiskID() before accepting an instance
authorDimitris Aragiorgis <dimara@grnet.gr>
Mon, 9 Dec 2013 12:00:27 +0000 (14:00 +0200)
committerMichele Tartara <mtartara@google.com>
Mon, 9 Dec 2013 12:51:50 +0000 (12:51 +0000)
SetDiskID() fills physical_id slot of a Disk object.

LUInstanceSetParams() does not invoke SetDiskID() upon creation of a
new disk. As a result the physical_id slot of the Disk object in
config data is missing.

In case of ext disk template, in AcceptInstance() we invoke
_GatherAndLinkBlockDevices(). This takes `instance` as an argument
which includes current disks info. So, after adding a disk,
migration of ext instances will fail because FindDevice() expects
the physical_id slot.

With this patch we invoke SetDiskID() for every disk of the instance
before accept_instance() RPC.

Fixes Issue 633.

Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Signed-off-by: Michele Tartara <mtartara@google.com>
Reviewed-by: Michele Tartara <mtartara@google.com>

lib/cmdlib/instance_migration.py

index b8dc510..a5cbf4d 100644 (file)
@@ -709,6 +709,9 @@ class TLMigrateInstance(Tasklet):
       self._WaitUntilSync()
 
     self.feedback_fn("* preparing %s to accept the instance" % target_node)
+    # This fills physical_id slot that may be missing on newly created disks
+    for disk in instance.disks:
+      self.cfg.SetDiskID(disk, target_node)
     result = self.rpc.call_accept_instance(target_node,
                                            instance,
                                            migration_info,