From dab69e9770b1c733dbbf8effb34beda317a4f3d8 Mon Sep 17 00:00:00 2001 From: Iustin Pop <iustin@google.com> Date: Mon, 19 Jan 2009 11:10:19 +0000 Subject: [PATCH] Switch call_blockdev_create call to (status, data) This allows errors to be visible at the user level instead of just node daemon logs. Reviewed-by: ultrotter --- lib/backend.py | 12 +++++++----- lib/cmdlib.py | 9 +++++---- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/lib/backend.py b/lib/backend.py index c9e9af5ba..c0b546764 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 6ddb1f398..443746bd8 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): -- GitLab