Revision 3eff8ae6 lib/cmdlib.py
b/lib/cmdlib.py | ||
---|---|---|
1219 | 1219 |
EINSTANCEMISSINGDISK = (TINSTANCE, "EINSTANCEMISSINGDISK") |
1220 | 1220 |
EINSTANCEFAULTYDISK = (TINSTANCE, "EINSTANCEFAULTYDISK") |
1221 | 1221 |
EINSTANCEWRONGNODE = (TINSTANCE, "EINSTANCEWRONGNODE") |
1222 |
EINSTANCESPLITGROUPS = (TINSTANCE, "EINSTANCESPLITGROUPS") |
|
1222 | 1223 |
ENODEDRBD = (TNODE, "ENODEDRBD") |
1223 | 1224 |
ENODEDRBDHELPER = (TNODE, "ENODEDRBDHELPER") |
1224 | 1225 |
ENODEFILECHECK = (TNODE, "ENODEFILECHECK") |
... | ... | |
2048 | 2049 |
"""Verify integrity of cluster, performing various test on nodes. |
2049 | 2050 |
|
2050 | 2051 |
""" |
2052 |
# This method has too many local variables. pylint: disable-msg=R0914 |
|
2051 | 2053 |
self.bad = False |
2052 | 2054 |
_ErrorIf = self._ErrorIf # pylint: disable-msg=C0103 |
2053 | 2055 |
verbose = self.op.verbose |
... | ... | |
2067 | 2069 |
cluster = self.cfg.GetClusterInfo() |
2068 | 2070 |
nodelist = utils.NiceSort(self.cfg.GetNodeList()) |
2069 | 2071 |
nodeinfo = [self.cfg.GetNodeInfo(nname) for nname in nodelist] |
2072 |
nodeinfo_byname = dict(zip(nodelist, nodeinfo)) |
|
2070 | 2073 |
instancelist = utils.NiceSort(self.cfg.GetInstanceList()) |
2071 | 2074 |
instanceinfo = dict((iname, self.cfg.GetInstanceInfo(iname)) |
2072 | 2075 |
for iname in instancelist) |
2076 |
groupinfo = self.cfg.GetAllNodeGroupsInfo() |
|
2073 | 2077 |
i_non_redundant = [] # Non redundant instances |
2074 | 2078 |
i_non_a_balanced = [] # Non auto-balanced instances |
2075 | 2079 |
n_offline = 0 # Count of offline nodes |
... | ... | |
2254 | 2258 |
# FIXME: does not support file-backed instances |
2255 | 2259 |
if not inst_config.secondary_nodes: |
2256 | 2260 |
i_non_redundant.append(instance) |
2261 |
|
|
2257 | 2262 |
_ErrorIf(len(inst_config.secondary_nodes) > 1, self.EINSTANCELAYOUT, |
2258 | 2263 |
instance, "instance has multiple secondary nodes: %s", |
2259 | 2264 |
utils.CommaJoin(inst_config.secondary_nodes), |
2260 | 2265 |
code=self.ETYPE_WARNING) |
2261 | 2266 |
|
2267 |
if inst_config.disk_template in constants.DTS_NET_MIRROR: |
|
2268 |
pnode = inst_config.primary_node |
|
2269 |
instance_nodes = utils.NiceSort(inst_config.all_nodes) |
|
2270 |
instance_groups = {} |
|
2271 |
|
|
2272 |
for node in instance_nodes: |
|
2273 |
instance_groups.setdefault(nodeinfo_byname[node].group, |
|
2274 |
[]).append(node) |
|
2275 |
|
|
2276 |
pretty_list = [ |
|
2277 |
"%s (group %s)" % (utils.CommaJoin(nodes), groupinfo[group].name) |
|
2278 |
# Sort so that we always list the primary node first. |
|
2279 |
for group, nodes in sorted(instance_groups.items(), |
|
2280 |
key=lambda (_, nodes): pnode in nodes, |
|
2281 |
reverse=True)] |
|
2282 |
|
|
2283 |
self._ErrorIf(len(instance_groups) > 1, self.EINSTANCESPLITGROUPS, |
|
2284 |
instance, "instance has primary and secondary nodes in" |
|
2285 |
" different groups: %s", utils.CommaJoin(pretty_list), |
|
2286 |
code=self.ETYPE_WARNING) |
|
2287 |
|
|
2262 | 2288 |
if not cluster.FillBE(inst_config)[constants.BE_AUTO_BALANCE]: |
2263 | 2289 |
i_non_a_balanced.append(instance) |
2264 | 2290 |
|
Also available in: Unified diff