simplified next node id logic to avoid trying to over optimize

This commit is contained in:
Blake Harnden 2019-11-25 12:59:32 -08:00
parent 1290dae4f8
commit 3d2e372663

View file

@ -58,13 +58,11 @@ class CoreClient:
# helpers # helpers
self.interface_to_edge = {} self.interface_to_edge = {}
self.deleted_nodes = []
self.interfaces_manager = InterfaceManager(self.app) self.interfaces_manager = InterfaceManager(self.app)
self.created_nodes = set() self.created_nodes = set()
self.created_links = set() self.created_links = set()
# session data # session data
self.id = 1
self.state = None self.state = None
self.canvas_nodes = {} self.canvas_nodes = {}
self.location = None self.location = None
@ -78,11 +76,9 @@ class CoreClient:
self.file_configs = {} self.file_configs = {}
def reset(self): def reset(self):
self.id = 1
# helpers # helpers
self.created_nodes.clear() self.created_nodes.clear()
self.created_links.clear() self.created_links.clear()
self.deleted_nodes.clear()
self.interfaces_manager.reset() self.interfaces_manager.reset()
self.interface_to_edge.clear() self.interface_to_edge.clear()
# session data # session data
@ -190,18 +186,6 @@ class CoreClient:
# get emane model config # get emane model config
# determine next node id and reusable nodes
max_id = 1
existing_nodes = set()
for node in session.nodes:
if node.id > max_id:
max_id = node.id
existing_nodes.add(node.id)
self.id = max_id
for i in range(1, self.id):
if i not in existing_nodes:
self.deleted_nodes.append(i)
# draw session # draw session
self.app.canvas.reset_and_redraw(session) self.app.canvas.reset_and_redraw(session)
@ -417,19 +401,19 @@ class CoreClient:
logging.debug("Close grpc") logging.debug("Close grpc")
self.client.close() self.client.close()
def get_id(self): def next_node_id(self):
""" """
Get the next node id as well as update id status and reusable ids Get the next usable node id.
:rtype: int
:return: the next id to be used :return: the next id to be used
:rtype: int
""" """
if self.deleted_nodes: i = 1
return self.deleted_nodes.pop(0) while True:
else: if i not in self.canvas_nodes:
new_id = self.id break
self.id = self.id + 1 i += 1
return new_id return i
def create_node(self, x, y, node_type, model): def create_node(self, x, y, node_type, model):
""" """
@ -441,7 +425,7 @@ class CoreClient:
:param str model: node model :param str model: node model
:return: nothing :return: nothing
""" """
node_id = self.get_id() node_id = self.next_node_id()
position = core_pb2.Position(x=x, y=y) position = core_pb2.Position(x=x, y=y)
image = None image = None
if NodeUtils.is_image_node(node_type): if NodeUtils.is_image_node(node_type):
@ -482,7 +466,6 @@ class CoreClient:
logging.error("unknown node: %s", node_id) logging.error("unknown node: %s", node_id)
continue continue
del self.canvas_nodes[node_id] del self.canvas_nodes[node_id]
self.deleted_nodes.append(node_id)
if node_id in self.mobility_configs: if node_id in self.mobility_configs:
del self.mobility_configs[node_id] del self.mobility_configs[node_id]
if node_id in self.wlan_configs: if node_id in self.wlan_configs:
@ -500,8 +483,6 @@ class CoreClient:
logging.error("unknown edge: %s", edge.token) logging.error("unknown edge: %s", edge.token)
del self.links[edge.token] del self.links[edge.token]
self.deleted_nodes.sort()
def create_interface(self, canvas_node): def create_interface(self, canvas_node):
node = canvas_node.core_node node = canvas_node.core_node
ip4, ip6, prefix = self.interfaces_manager.get_ips(node.id) ip4, ip6, prefix = self.interfaces_manager.get_ips(node.id)