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 <[email protected]>
---
 lib/cmdlib/instance_migration.py |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/cmdlib/instance_migration.py b/lib/cmdlib/instance_migration.py
index b8dc510..a5cbf4d 100644
--- a/lib/cmdlib/instance_migration.py
+++ b/lib/cmdlib/instance_migration.py
@@ -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,
-- 
1.7.10.4

Reply via email to