diff --git a/lib/backend.py b/lib/backend.py index c9e9af5ba8fecce9542c0c1599bffb82ca4bea51..c0b5467649b44a1d35b14e0f1df4cecfab10004e 100644 --- a/lib/backend.py +++ b/lib/backend.py @@ -1017,14 +1017,16 @@ def CreateBlockDevice(disk, size, owner, on_primary, info): crdev.Open() clist.append(crdev) - device = bdev.Create(disk.dev_type, disk.physical_id, clist, size) + try: + device = bdev.Create(disk.dev_type, disk.physical_id, clist, size) + except errors.GenericError, err: + return False, "Can't create block device: %s" % str(err) if on_primary or disk.AssembleOnSecondary(): if not device.Assemble(): - errorstring = "Can't assemble device after creation" + errorstring = "Can't assemble device after creation, very unusual event" logging.error(errorstring) - raise errors.BlockDeviceError("%s, very unusual event - check the node" - " daemon logs" % errorstring) + return False, errorstring device.SetSyncSpeed(constants.SYNC_SPEED) if on_primary or disk.OpenOnSecondary(): device.Open(force=True) @@ -1034,7 +1036,7 @@ def CreateBlockDevice(disk, size, owner, on_primary, info): device.SetInfo(info) physical_id = device.unique_id - return physical_id + return True, physical_id def RemoveBlockDevice(disk): diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 6ddb1f39835eb41eb331ba921f8a9def38154a26..443746bd8d264ccee4e6f4178d1b77bf71519af3 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -3702,13 +3702,14 @@ def _CreateBlockDevOnPrimary(lu, node, instance, device, info): _CreateBlockDevOnPrimary(lu, node, instance, child, info) lu.cfg.SetDiskID(device, node) - new_id = lu.rpc.call_blockdev_create(node, device, device.size, + result = lu.rpc.call_blockdev_create(node, device, device.size, instance.name, True, info) - if new_id.failed or not new_id.data: + msg = result.RemoteFailMsg() + if msg: raise errors.OpExecError("Can't create block device %s on primary" - " node %s" % (device, node)) + " node %s: %s" % (device, node, msg)) if device.physical_id is None: - device.physical_id = new_id + device.physical_id = result.data[1] def _CreateBlockDevOnSecondary(lu, node, instance, device, force, info):