Fix cleanup of incomplete links

master
Ken Subratie 2023-08-25 20:07:33 -04:00
parent c0b0d1ed6a
commit 7fe946c7d3
3 changed files with 29 additions and 21 deletions

View File

@ -150,8 +150,7 @@ class LinkManager(ControllerModule):
tnlid = cbt.request.params.params["TunnelId"]
else:
tnlid = cbt.request.params["TunnelId"]
tnl = self._tunnels.get(tnlid)
self._cleanup_failed_tunnel_data(tnl)
self._rollback_link_creation_changes(tnlid)
def req_handler_auth_tunnel(self, cbt: CBT):
"""Node B"""
@ -719,7 +718,7 @@ class LinkManager(ControllerModule):
self.free_cbt(cbt)
def on_tnl_timeout(self, tnl: Tunnel, timeout: float):
self._cleanup_failed_tunnel_data(tnl)
self._rollback_link_creation_changes(tnl.tnlid)
def _register_abort_handlers(self):
self._abort_handler_tbl = {

View File

@ -157,9 +157,10 @@ class TincanTunnel(ControllerModule):
self.send_control(json.dumps(ctl))
def req_handler_query_link_stats(self, cbt: CBT):
if not self._is_request_current(cbt):
self.complete_cbt(cbt)
return
# if not self._is_request_current(cbt):
# Todo: TypeError - list indices must be integers or slices, not str
# self.complete_cbt(cbt)
# return
msg = cbt.request.params
ctl = broker.CTL_QUERY_LINK_STATS
ctl["TransactionId"] = cbt.tag

View File

@ -134,16 +134,16 @@ class DiscoveredPeer:
class NetworkOverlay:
_REFLECT: list[str] = [
"_max_concurrent_edits",
"node_id",
"overlay_id",
"new_peer_count",
"_graph_transformation",
"known_peers_list",
"ond_peers",
"adjacency_list",
"_loc_id",
"_encr_req",
"_max_concurrent_edits",
"num_active_edits",
"new_peer_count",
"known_peers",
"ond_peers",
"_graph_transformation",
"adjacency_list",
]
def __init__(self, node_id: str, overlay_id: str, **kwargs):
@ -180,6 +180,10 @@ class NetworkOverlay:
def transformation(self):
return self._graph_transformation
@property
def num_active_edits(self):
return self._max_concurrent_edits - self._bsemp._value
@transformation.setter
def transformation(self, new_transformation):
"""
@ -199,6 +203,12 @@ class NetworkOverlay:
def known_peers_list(self):
return [*self.known_peers.keys()]
@property
def available_peers(self) -> list:
return [
peer_id for peer_id, disc in self.known_peers.items() if disc.is_available
]
def acquire(self) -> bool:
return self._bsemp.acquire(blocking=False)
@ -816,14 +826,11 @@ class Topology(ControllerModule):
ovl.new_peer_count = 0
ovl_cfg = self.config["Overlays"][olid]
enf_lnks = ovl_cfg.get("StaticEdges", [])
peer_list = [
peer_id
for peer_id in ovl.known_peers
if ovl.known_peers[peer_id].is_available
]
peer_list = ovl.available_peers
if not peer_list:
ovl.release() # necessary as not bound to a CBT
return
raise ValueError(
"No peers are available to produce a new Network Graph"
)
min_succ = int(ovl_cfg.get("MinSuccessors", MIN_SUCCESSORS))
max_ond = int(ovl_cfg.get("MaxOnDemandEdges", MAX_ON_DEMAND_EDGES))
num_peers = len(peer_list) if len(peer_list) > 1 else 2
@ -854,8 +861,9 @@ class Topology(ControllerModule):
peer_list, ovl.get_adj_list(), ovl.ond_peers
)
ovl.release() # necessary as not bound to a CBT
except Exception:
except Exception as excp:
ovl.release()
self.logger.info(excp)
self._process_next_transition(ovl)
def _process_next_transition(self, net_ovl: NetworkOverlay):