From: Klaus Aehlig Date: Thu, 30 Jan 2014 15:30:00 +0000 (+0100) Subject: Gracefully handle degraded instances in verification X-Git-Url: https://code.grnet.gr/git/ganeti-local/commitdiff_plain/099ed3b201d5d2d0a022e7f40b51b8cc34bb8beb Gracefully handle degraded instances in verification The current code assumes that every instance either is of type diskless or has at least one disk. However, with the option to remove individual disk degraded 0-disk non-diskless instances can occur. While such instances usually are not useful, Ganeti still should be operational in their presence. Signed-off-by: Klaus Aehlig Reviewed-by: Hrvoje Ribicic --- diff --git a/lib/cmdlib/cluster.py b/lib/cmdlib/cluster.py index 4183825..cf020c2 100644 --- a/lib/cmdlib/cluster.py +++ b/lib/cmdlib/cluster.py @@ -2618,6 +2618,7 @@ class LUClusterVerifyGroup(LogicalUnit, _VerifyErrors): node_disks = {} node_disks_devonly = {} diskless_instances = set() + nodisk_instances = set() diskless = constants.DT_DISKLESS for nuuid in node_uuids: @@ -2630,6 +2631,8 @@ class LUClusterVerifyGroup(LogicalUnit, _VerifyErrors): for disk in instanceinfo[inst_uuid].disks] if not disks: + nodisk_instances.update(uuid for uuid in node_inst_uuids + if instanceinfo[uuid].disk_template != diskless) # No need to collect data continue @@ -2687,6 +2690,10 @@ class LUClusterVerifyGroup(LogicalUnit, _VerifyErrors): for inst_uuid in diskless_instances: assert inst_uuid not in instdisk instdisk[inst_uuid] = {} + # ...and disk-full instances that happen to have no disks + for inst_uuid in nodisk_instances: + assert inst_uuid not in instdisk + instdisk[inst_uuid] = {} assert compat.all(len(statuses) == len(instanceinfo[inst].disks) and len(nuuids) <= len(instanceinfo[inst].all_nodes) and