diff options
author | Vratko Polak <vrpolak@cisco.com> | 2020-03-11 12:46:44 +0100 |
---|---|---|
committer | Vratko Polak <vrpolak@cisco.com> | 2020-03-17 15:59:28 +0000 |
commit | 11e9514af6e6d9e993b469fae3ce6671c3d3e536 (patch) | |
tree | 54169921ce49ebf6db03c47d6cec7b30aa6b42fa | |
parent | 54ff8d827f0aa3c689e26583952d04d86be503e7 (diff) |
NodePath: Make path computation deterministic
In Python3, set operations seem to result in indeterministic order.
+ Remove verbose logging from topology.py
Change-Id: I47cc90637a0b2969e1686b4216b7d8fe4fe2aaab
Signed-off-by: Vratko Polak <vrpolak@cisco.com>
-rw-r--r-- | resources/libraries/python/NodePath.py | 11 | ||||
-rw-r--r-- | resources/libraries/python/topology.py | 7 |
2 files changed, 10 insertions, 8 deletions
diff --git a/resources/libraries/python/NodePath.py b/resources/libraries/python/NodePath.py index e97bde87ad..6f08be491b 100644 --- a/resources/libraries/python/NodePath.py +++ b/resources/libraries/python/NodePath.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -120,10 +120,11 @@ class NodePath: f"No link between {node1[u'host']} and {node2[u'host']}" ) + # Not using set operations, as we need deterministic order. if always_same_link: - l_set = set(links).intersection(self._links) + l_set = [link for link in links if link in self._links] else: - l_set = set(links).difference(self._links) + l_set = [link for link in links if link not in self._links] if not l_set: raise RuntimeError( f"No free link between {node1[u'host']} and " @@ -131,9 +132,9 @@ class NodePath: ) if not l_set: - link = links.pop() + link = links[0] else: - link = l_set.pop() + link = l_set[0] self._links.append(link) interface1 = topo.get_interface_by_link_name(node1, link) diff --git a/resources/libraries/python/topology.py b/resources/libraries/python/topology.py index 7dec51619c..338ccb6b57 100644 --- a/resources/libraries/python/topology.py +++ b/resources/libraries/python/topology.py @@ -879,8 +879,6 @@ class Topology: :rtype: list """ - logger.trace(f"node1: {str(node1)}") - logger.trace(f"node2: {str(node2)}") node1_links = self._get_node_active_link_names( node1, filter_list=filter_list_node1 ) @@ -894,7 +892,10 @@ class Topology: elif node2_links is None: logger.error(u"Unable to find active links for node2") else: - connecting_links = list(set(node1_links).intersection(node2_links)) + # Not using set operations, as we need deterministic order. + connecting_links = [ + link for link in node1_links if link in node2_links + ] return connecting_links |