From: Sarah Newman <[email protected]> This addresses issue 1086 where adopted LVs are not tagged.
Signed-off-by: Sarah Newman <[email protected]> --- lib/backend.py | 6 +++++- lib/cmdlib/instance.py | 7 ++++--- lib/cmdlib/instance_storage.py | 5 +++-- lib/rpc_defs.py | 1 + lib/server/noded.py | 3 ++- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/lib/backend.py b/lib/backend.py index ef386d2..d9e0589 100644 --- a/lib/backend.py +++ b/lib/backend.py @@ -3391,13 +3391,16 @@ def RemoveExport(export): _Fail("Error while removing the export: %s", err, exc=True) -def BlockdevRename(devlist): +def BlockdevRename(devlist, info): """Rename a list of block devices. @type devlist: list of tuples @param devlist: list of tuples of the form (disk, new_unique_id); disk is an L{objects.Disk} object describing the current disk, and new unique_id is the name we rename it to + @type info: string + @param info: string that will be sent to the physical device + creation, used for example to set (LVM) tags on LVs @rtype: boolean @return: True if all renames succeeded, False otherwise @@ -3412,6 +3415,7 @@ def BlockdevRename(devlist): continue try: old_rpath = dev.dev_path + dev.SetInfo(info) dev.Rename(unique_id) new_rpath = dev.dev_path if old_rpath != new_rpath: diff --git a/lib/cmdlib/instance.py b/lib/cmdlib/instance.py index 5bb47db..d6945aa 100644 --- a/lib/cmdlib/instance.py +++ b/lib/cmdlib/instance.py @@ -1353,13 +1353,14 @@ class LUInstanceCreate(LogicalUnit): if self.op.disk_template == constants.DT_PLAIN: # rename LVs to the newly-generated names; we need to construct # 'fake' LV disks with the old data, plus the new unique_id + info = GetInstanceInfoText(iobj) tmp_disks = [objects.Disk.FromDict(v.ToDict()) for v in disks] rename_to = [] for t_dsk, a_dsk in zip(tmp_disks, self.disks): rename_to.append(t_dsk.logical_id) t_dsk.logical_id = (t_dsk.logical_id[0], a_dsk[constants.IDISK_ADOPT]) result = self.rpc.call_blockdev_rename(self.pnode.uuid, - zip(tmp_disks, rename_to)) + zip(tmp_disks, rename_to), info) result.Raise("Failed to rename adoped LVs") else: feedback_fn("* creating instance disks...") @@ -3240,7 +3241,7 @@ class LUInstanceSetParams(LogicalUnit): feedback_fn("Renaming original volumes...") rename_list = [(o, n.children[0].logical_id) for (o, n) in zip(self.instance.disks, new_disks)] - result = self.rpc.call_blockdev_rename(pnode_uuid, rename_list) + result = self.rpc.call_blockdev_rename(pnode_uuid, rename_list, info) result.Raise("Failed to rename original LVs") feedback_fn("Initializing DRBD devices...") @@ -3257,7 +3258,7 @@ class LUInstanceSetParams(LogicalUnit): " renaming back original volumes...") rename_back_list = [(n.children[0], o.logical_id) for (n, o) in zip(new_disks, self.instance.disks)] - result = self.rpc.call_blockdev_rename(pnode_uuid, rename_back_list) + result = self.rpc.call_blockdev_rename(pnode_uuid, rename_back_list, info) result.Raise("Failed to rename LVs back after error %s" % str(e)) raise diff --git a/lib/cmdlib/instance_storage.py b/lib/cmdlib/instance_storage.py index bb4e60e..fe39208 100644 --- a/lib/cmdlib/instance_storage.py +++ b/lib/cmdlib/instance_storage.py @@ -2375,9 +2375,10 @@ class TLReplaceDisks(Tasklet): # device exists rename_old_to_new.append((to_ren, ren_fn(to_ren, temp_suffix))) + info = GetInstanceInfoText(self.instance) self.lu.LogInfo("Renaming the old LVs on the target node") result = self.rpc.call_blockdev_rename(self.target_node_uuid, - rename_old_to_new) + rename_old_to_new, info) result.Raise("Can't rename old LVs on node %s" % self.cfg.GetNodeName(self.target_node_uuid)) @@ -2386,7 +2387,7 @@ class TLReplaceDisks(Tasklet): rename_new_to_old = [(new, old.logical_id) for old, new in zip(old_lvs, new_lvs)] result = self.rpc.call_blockdev_rename(self.target_node_uuid, - rename_new_to_old) + rename_new_to_old, info) result.Raise("Can't rename new LVs on node %s" % self.cfg.GetNodeName(self.target_node_uuid)) diff --git a/lib/rpc_defs.py b/lib/rpc_defs.py index 200c97c..7f8ea9a 100644 --- a/lib/rpc_defs.py +++ b/lib/rpc_defs.py @@ -443,6 +443,7 @@ _BLOCKDEV_CALLS = [ ], None, None, "Export a given disk to another node"), ("blockdev_rename", SINGLE, None, constants.RPC_TMO_NORMAL, [ ("devlist", ED_BLOCKDEV_RENAME, None), + ("info", None, None), ], None, None, "Request rename of the given block devices"), ("blockdev_find", SINGLE, None, constants.RPC_TMO_NORMAL, [ ("disk", ED_SINGLE_DISK_DICT_DP, None), diff --git a/lib/server/noded.py b/lib/server/noded.py index 0540a96..60883e6 100644 --- a/lib/server/noded.py +++ b/lib/server/noded.py @@ -256,7 +256,8 @@ class NodeRequestHandler(http.server.HttpServerHandler): """ devlist = [(objects.Disk.FromDict(ds), uid) for ds, uid in params[0]] - return backend.BlockdevRename(devlist) + info = params[1] + return backend.BlockdevRename(devlist, info) @staticmethod def perspective_blockdev_assemble(params): -- 1.9.1
