diff --git a/lib/backend.py b/lib/backend.py index b42ebe7be97a16ccca9f00d6ce7e3c27201034c5..57c2ce4039efe6fd832638873583ada8d31ace2a 100644 --- a/lib/backend.py +++ b/lib/backend.py @@ -2143,7 +2143,7 @@ def BlockdevSnapshot(disk): @type disk: L{objects.Disk} @param disk: the disk to be snapshotted @rtype: string - @return: snapshot disk path + @return: snapshot disk ID as (vg, lv) """ if disk.dev_type == constants.LD_DRBD8: diff --git a/lib/bdev.py b/lib/bdev.py index 1378a2ff744fd3dcdcf97b8101380d2bc3ad1f48..13b856625048cf6ea82ddfbb3cb0dca52b2c0384 100644 --- a/lib/bdev.py +++ b/lib/bdev.py @@ -694,6 +694,8 @@ class LogicalVolume(BlockDev): def Snapshot(self, size): """Create a snapshot copy of an lvm block device. + @returns: tuple (vg, lv) + """ snap_name = self._lv_name + ".snap" @@ -715,7 +717,7 @@ class LogicalVolume(BlockDev): _ThrowError("command: %s error: %s - %s", result.cmd, result.fail_reason, result.output) - return snap_name + return (self._vg_name, snap_name) def SetInfo(self, text): """Update metadata with info text. diff --git a/lib/masterd/instance.py b/lib/masterd/instance.py index f097639568eeff7ff03a67f1fe857fac286ed523..d83e83625d6c7e68dd1ab9f57b843064df0b6493 100644 --- a/lib/masterd/instance.py +++ b/lib/masterd/instance.py @@ -1151,8 +1151,6 @@ class ExportInstanceHelper: instance = self._instance src_node = instance.primary_node - vgname = self._lu.cfg.GetVGName() - for idx, disk in enumerate(instance.disks): self._feedback_fn("Creating a snapshot of disk/%s on node %s" % (idx, src_node)) @@ -1160,13 +1158,17 @@ class ExportInstanceHelper: # result.payload will be a snapshot of an lvm leaf of the one we # passed result = self._lu.rpc.call_blockdev_snapshot(src_node, disk) + new_dev = False msg = result.fail_msg if msg: self._lu.LogWarning("Could not snapshot disk/%s on node %s: %s", idx, src_node, msg) - new_dev = False + elif (not isinstance(result.payload, (tuple, list)) or + len(result.payload) != 2): + self._lu.LogWarning("Could not snapshot disk/%s on node %s: invalid" + " result '%s'", idx, src_node, result.payload) else: - disk_id = (vgname, result.payload) + disk_id = tuple(result.payload) new_dev = objects.Disk(dev_type=constants.LD_LV, size=disk.size, logical_id=disk_id, physical_id=disk_id, iv_name=disk.iv_name)