Instances with secondaries in a separate nodegroup from primary can result in cluster verify throwing a missing node lock error for LV check. This should properly print the node name and the violating instance name.
Signed-off-by: Viktor Bachraty <[email protected]> --- lib/cmdlib/cluster/verify.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/cmdlib/cluster/verify.py b/lib/cmdlib/cluster/verify.py index 5c80c18..1bbaefc 100644 --- a/lib/cmdlib/cluster/verify.py +++ b/lib/cmdlib/cluster/verify.py @@ -29,6 +29,7 @@ """Logical units for cluster verification.""" +import collections import itertools import logging import operator @@ -487,7 +488,7 @@ class LUClusterVerifyGroup(LogicalUnit, _VerifyErrors): # We detect here the nodes that will need the extra RPC calls for verifying # split LV volumes; they should be locked. - extra_lv_nodes = set() + extra_lv_nodes = collections.defaultdict(list) for inst in self.my_inst_info.values(): disks = self.cfg.GetInstanceDisks(inst.uuid) @@ -495,16 +496,20 @@ class LUClusterVerifyGroup(LogicalUnit, _VerifyErrors): inst_nodes = self.cfg.GetInstanceNodes(inst.uuid) for nuuid in inst_nodes: if self.all_node_info[nuuid].group != self.group_uuid: - extra_lv_nodes.add(nuuid) + extra_lv_nodes[nuuid].append(inst.name) + extra_lv_nodes_set = set(extra_lv_nodes.iterkeys()) unlocked_lv_nodes = \ - extra_lv_nodes.difference(self.owned_locks(locking.LEVEL_NODE)) + extra_lv_nodes_set.difference(self.owned_locks(locking.LEVEL_NODE)) if unlocked_lv_nodes: + node_strings = ['%s: [%s]' % ( + self.cfg.GetNodeName(node), utils.CommaJoin(extra_lv_nodes[node])) + for node in unlocked_lv_nodes] raise errors.OpPrereqError("Missing node locks for LV check: %s" % - utils.CommaJoin(unlocked_lv_nodes), + utils.CommaJoin(node_strings), errors.ECODE_STATE) - self.extra_lv_nodes = list(extra_lv_nodes) + self.extra_lv_nodes = list(extra_lv_nodes_set) def _VerifyNode(self, ninfo, nresult): """Perform some basic validation on data returned from a node. -- 2.8.0.rc3.226.g39d4020
