diff --git a/lib/cmdlib.py b/lib/cmdlib.py index ad4c487de3c678c1719c5f94c54045366ad37a81..ddbc48da571adba1c0c3606e5fe60b5c4a378732 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -1544,7 +1544,6 @@ class LURepairDiskSizes(NoHooksLU): REQ_BGL = False def ExpandNames(self): - if not isinstance(self.op.instances, list): raise errors.OpPrereqError("Invalid argument type 'instances'") @@ -1602,7 +1601,7 @@ class LURepairDiskSizes(NoHooksLU): changed = [] for node, dskl in per_node_disks.items(): result = self.rpc.call_blockdev_getsizes(node, [v[2] for v in dskl]) - if result.failed: + if result.failed or result.fail_msg: self.LogWarning("Failure in blockdev_getsizes call to node" " %s, ignoring", node) continue diff --git a/lib/rpc.py b/lib/rpc.py index 98f0f6ed6bc69becc913a3fe98ee218dd65f1ff0..abcec8115a7f8798e860b9bf231415f91dc94e5f 100644 --- a/lib/rpc.py +++ b/lib/rpc.py @@ -111,12 +111,15 @@ class RpcResult(object): else: self.data = data if not isinstance(self.data, (tuple, list)): + self.failed = True self.fail_msg = ("RPC layer error: invalid result type (%s)" % type(self.data)) elif len(data) != 2: + self.failed = True self.fail_msg = ("RPC layer error: invalid result length (%d), " "expected 2" % len(self.data)) elif not self.data[0]: + self.failed = True self.fail_msg = self._EnsureErr(self.data[1]) else: # finally success @@ -810,7 +813,7 @@ class RpcRunner(object): """ result = self._SingleNodeCall(node, "blockdev_getmirrorstatus", [dsk.ToDict() for dsk in disks]) - if not result.failed: + if not (result.failed or result.fail_msg): result.payload = [objects.BlockDevStatus.FromDict(i) for i in result.payload] return result