968 |
968 |
should raise an exception
|
969 |
969 |
|
970 |
970 |
"""
|
971 |
|
def _AppendUsedPorts(instance_name, disk, used):
|
|
971 |
def _AppendUsedPorts(get_node_name_fn, instance_name, disk, used):
|
972 |
972 |
duplicates = []
|
973 |
973 |
if disk.dev_type == constants.LD_DRBD8 and len(disk.logical_id) >= 5:
|
974 |
974 |
node_a, node_b, _, minor_a, minor_b = disk.logical_id[:5]
|
975 |
|
for node, port in ((node_a, minor_a), (node_b, minor_b)):
|
976 |
|
assert node in used, ("Node '%s' of instance '%s' not found"
|
977 |
|
" in node list" % (node, instance_name))
|
978 |
|
if port in used[node]:
|
979 |
|
duplicates.append((node, port, instance_name, used[node][port]))
|
|
975 |
for node_uuid, port in ((node_a, minor_a), (node_b, minor_b)):
|
|
976 |
assert node_uuid in used, \
|
|
977 |
("Node '%s' of instance '%s' not found in node list" %
|
|
978 |
(get_node_name_fn(node_uuid), instance_name))
|
|
979 |
if port in used[node_uuid]:
|
|
980 |
duplicates.append((node_uuid, port, instance_name,
|
|
981 |
used[node_uuid][port]))
|
980 |
982 |
else:
|
981 |
|
used[node][port] = instance_name
|
|
983 |
used[node_uuid][port] = instance_name
|
982 |
984 |
if disk.children:
|
983 |
985 |
for child in disk.children:
|
984 |
|
duplicates.extend(_AppendUsedPorts(instance_name, child, used))
|
|
986 |
duplicates.extend(_AppendUsedPorts(get_node_name_fn, instance_name,
|
|
987 |
child, used))
|
985 |
988 |
return duplicates
|
986 |
989 |
|
987 |
990 |
duplicates = []
|
988 |
991 |
my_dict = dict((node, {}) for node in self._config_data.nodes)
|
989 |
992 |
for instance in self._config_data.instances.itervalues():
|
990 |
993 |
for disk in instance.disks:
|
991 |
|
duplicates.extend(_AppendUsedPorts(instance.name, disk, my_dict))
|
|
994 |
duplicates.extend(_AppendUsedPorts(self._UnlockedGetNodeName,
|
|
995 |
instance.name, disk, my_dict))
|
992 |
996 |
for (node, minor), instance in self._temporary_drbds.iteritems():
|
993 |
997 |
if minor in my_dict[node] and my_dict[node][minor] != instance:
|
994 |
998 |
duplicates.append((node, minor, instance, my_dict[node][minor]))
|