Revision 6d2e83d5 lib/cmdlib.py
b/lib/cmdlib.py | ||
---|---|---|
613 | 613 |
self.share_locks = dict(((i, 1) for i in locking.LEVELS)) |
614 | 614 |
|
615 | 615 |
def _VerifyNode(self, nodeinfo, file_list, local_cksum, |
616 |
node_result, feedback_fn, master_files): |
|
616 |
node_result, feedback_fn, master_files, |
|
617 |
drbd_map): |
|
617 | 618 |
"""Run multiple tests against a node. |
618 | 619 |
|
619 | 620 |
Test list: |
... | ... | |
630 | 631 |
@param node_result: the results from the node |
631 | 632 |
@param feedback_fn: function used to accumulate results |
632 | 633 |
@param master_files: list of files that only masters should have |
634 |
@param drbd_map: the useddrbd minors for this node, in |
|
635 |
form of minor: (instance, must_exist) which correspond to instances |
|
636 |
and their running status |
|
633 | 637 |
|
634 | 638 |
""" |
635 | 639 |
node = nodeinfo.name |
... | ... | |
724 | 728 |
if hv_result is not None: |
725 | 729 |
feedback_fn(" - ERROR: hypervisor %s verify failure: '%s'" % |
726 | 730 |
(hv_name, hv_result)) |
731 |
|
|
732 |
# check used drbd list |
|
733 |
used_minors = node_result.get(constants.NV_DRBDLIST, []) |
|
734 |
for minor, (iname, must_exist) in drbd_map.items(): |
|
735 |
if minor not in used_minors and must_exist: |
|
736 |
feedback_fn(" - ERROR: drbd minor %d of instance %s is not active" % |
|
737 |
(minor, iname)) |
|
738 |
bad = True |
|
739 |
for minor in used_minors: |
|
740 |
if minor not in drbd_map: |
|
741 |
feedback_fn(" - ERROR: unallocated drbd minor %d is in use" % minor) |
|
742 |
bad = True |
|
743 |
|
|
727 | 744 |
return bad |
728 | 745 |
|
729 | 746 |
def _VerifyInstance(self, instance, instanceconfig, node_vol_is, |
... | ... | |
867 | 884 |
nodelist = utils.NiceSort(self.cfg.GetNodeList()) |
868 | 885 |
nodeinfo = [self.cfg.GetNodeInfo(nname) for nname in nodelist] |
869 | 886 |
instancelist = utils.NiceSort(self.cfg.GetInstanceList()) |
887 |
instanceinfo = dict((iname, self.cfg.GetInstanceInfo(iname)) |
|
888 |
for iname in instancelist) |
|
870 | 889 |
i_non_redundant = [] # Non redundant instances |
871 | 890 |
i_non_a_balanced = [] # Non auto-balanced instances |
872 | 891 |
n_offline = [] # List of offline nodes |
... | ... | |
900 | 919 |
constants.NV_VGLIST: None, |
901 | 920 |
constants.NV_VERSION: None, |
902 | 921 |
constants.NV_HVINFO: self.cfg.GetHypervisorType(), |
922 |
constants.NV_DRBDLIST: None, |
|
903 | 923 |
} |
904 | 924 |
all_nvinfo = self.rpc.call_node_verify(nodelist, node_verify_param, |
905 | 925 |
self.cfg.GetClusterName()) |
906 | 926 |
|
907 | 927 |
cluster = self.cfg.GetClusterInfo() |
908 | 928 |
master_node = self.cfg.GetMasterNode() |
929 |
all_drbd_map = self.cfg.ComputeDRBDMap() |
|
930 |
|
|
909 | 931 |
for node_i in nodeinfo: |
910 | 932 |
node = node_i.name |
911 | 933 |
nresult = all_nvinfo[node].data |
... | ... | |
928 | 950 |
bad = True |
929 | 951 |
continue |
930 | 952 |
|
953 |
node_drbd = {} |
|
954 |
for minor, instance in all_drbd_map[node].items(): |
|
955 |
instance = instanceinfo[instance] |
|
956 |
node_drbd[minor] = (instance.name, instance.status == "up") |
|
931 | 957 |
result = self._VerifyNode(node_i, file_names, local_checksums, |
932 |
nresult, feedback_fn, master_files) |
|
958 |
nresult, feedback_fn, master_files, |
|
959 |
node_drbd) |
|
933 | 960 |
bad = bad or result |
934 | 961 |
|
935 | 962 |
lvdata = nresult.get(constants.NV_LVLIST, "Missing LV data") |
... | ... | |
985 | 1012 |
|
986 | 1013 |
for instance in instancelist: |
987 | 1014 |
feedback_fn("* Verifying instance %s" % instance) |
988 |
inst_config = self.cfg.GetInstanceInfo(instance)
|
|
1015 |
inst_config = instanceinfo[instance]
|
|
989 | 1016 |
result = self._VerifyInstance(instance, inst_config, node_volume, |
990 | 1017 |
node_instance, feedback_fn, n_offline) |
991 | 1018 |
bad = bad or result |
Also available in: Unified diff