From f75c35d4a0938872cdd1506d19bfff79ef0cb3fb Mon Sep 17 00:00:00 2001 From: Luna Yao <40349250+ZnqbuZ@users.noreply.github.com> Date: Sun, 22 Feb 2026 03:11:14 +0100 Subject: [PATCH] add GlobalCtxEvent::PeerInfoUpdated, issue this event in do_sync_route_info fix use in peer_ospf_route.rs --- easytier/src/common/global_ctx.rs | 2 ++ easytier/src/instance_manager.rs | 2 ++ easytier/src/peers/peer_ospf_route.rs | 31 ++++++++++++--------------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/easytier/src/common/global_ctx.rs b/easytier/src/common/global_ctx.rs index 6a61b774..1cc589af 100644 --- a/easytier/src/common/global_ctx.rs +++ b/easytier/src/common/global_ctx.rs @@ -47,6 +47,8 @@ pub enum GlobalCtxEvent { PeerConnAdded(PeerConnInfo), PeerConnRemoved(PeerConnInfo), + PeerInfoUpdated(Vec), + ListenerAdded(url::Url), ListenerAddFailed(url::Url, String), // (url, error message) ListenerAcceptFailed(url::Url, String), // (url, error message) diff --git a/easytier/src/instance_manager.rs b/easytier/src/instance_manager.rs index 1fb3f2b5..e071ddab 100644 --- a/easytier/src/instance_manager.rs +++ b/easytier/src/instance_manager.rs @@ -307,6 +307,8 @@ fn handle_event( event!(info, peer_id, "[{}] peer removed", instance_id); } + GlobalCtxEvent::PeerInfoUpdated(_) => {} + GlobalCtxEvent::PeerConnAdded(conn_info) => { event!( info, diff --git a/easytier/src/peers/peer_ospf_route.rs b/easytier/src/peers/peer_ospf_route.rs index d766a3fc..fe8c02e6 100644 --- a/easytier/src/peers/peer_ospf_route.rs +++ b/easytier/src/peers/peer_ospf_route.rs @@ -72,16 +72,6 @@ use crate::{ use_global_var, }; -use super::{ - graph_algo::dijkstra_with_first_hop, - peer_rpc::PeerRpcManager, - route_trait::{ - DefaultRouteCostCalculator, ForeignNetworkRouteInfoMap, NextHopPolicy, RouteCostCalculator, - RouteCostCalculatorInterface, - }, - PeerPacketFilter, -}; - use atomic_shim::AtomicU64; use itertools::Itertools; @@ -558,8 +548,8 @@ impl SyncedRouteInfo { dst_peer_id: PeerId, peer_infos: &[RoutePeerInfo], raw_peer_infos: &[DynamicMessage], - ) -> Result<(), Error> { - let mut need_inc_version = false; + ) -> Result, Error> { + let mut updated_peer_ids = Vec::new(); for (idx, route_info) in peer_infos.iter().enumerate() { let mut route_info = route_info.clone(); let raw_route_info = &raw_peer_infos[idx]; @@ -595,14 +585,15 @@ impl SyncedRouteInfo { { self.raw_peer_infos .insert(route_info.peer_id, raw_route_info.clone()); - guard.insert(route_info.peer_id, route_info); - need_inc_version = true; + let peer_id = route_info.peer_id; + guard.insert(peer_id, route_info); + updated_peer_ids.push(peer_id); } } - if need_inc_version { + if !updated_peer_ids.is_empty() { self.version.inc(); } - Ok(()) + Ok(updated_peer_ids) } fn update_conn_info_one_peer( @@ -3202,7 +3193,7 @@ impl RouteSessionManager { (peer_infos, raw_peer_infos.as_ref().unwrap()) }; if !pi.is_empty() { - service_impl.synced_route_info.update_peer_infos( + let updated_peer_ids = service_impl.synced_route_info.update_peer_infos( my_peer_id, service_impl.my_peer_route_id, from_peer_id, @@ -3217,6 +3208,12 @@ impl RouteSessionManager { ); session.update_dst_saved_peer_info_version(pi, from_peer_id); need_update_route_table = true; + + if !updated_peer_ids.is_empty() { + service_impl + .global_ctx + .issue_event(GlobalCtxEvent::PeerInfoUpdated(updated_peer_ids)); + } } }