From 0c8da66a743ff62bef4504a6a38c8a23eeb5bdbf Mon Sep 17 00:00:00 2001 From: Luna Yao <40349250+ZnqbuZ@users.noreply.github.com> Date: Sun, 22 Feb 2026 23:58:40 +0100 Subject: [PATCH] node: add Notify for server election --- easytier/src/dns/node.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/easytier/src/dns/node.rs b/easytier/src/dns/node.rs index 7152b78a..ae969c4a 100644 --- a/easytier/src/dns/node.rs +++ b/easytier/src/dns/node.rs @@ -9,7 +9,7 @@ use crate::proto::rpc_types::controller::BaseController; use crate::tunnel::tcp::TcpTunnelConnector; use std::sync::Arc; use std::time::Duration; -use tokio::sync::broadcast; +use tokio::sync::{broadcast, Notify}; use tokio::task::JoinSet; use tokio::time::{sleep_until, Instant}; use uuid::Uuid; @@ -17,10 +17,12 @@ use uuid::Uuid; #[derive(Debug)] pub struct DnsNode { mgr: Arc, + + election: Arc, } impl DnsNode { - pub fn new(peer_mgr: Arc) -> Self { + pub fn new(peer_mgr: Arc, election: Arc) -> Self { let mgr = Arc::new(DnsPeerMgr::new(peer_mgr.clone())); peer_mgr .get_peer_rpc_mgr() @@ -31,7 +33,10 @@ impl DnsNode { &peer_mgr.get_global_ctx_ref().get_network_name(), ); - Self { mgr } + Self { + mgr, + election, + } } pub fn id(&self) -> Uuid { @@ -67,8 +72,8 @@ impl DnsNode { _ = &mut sleep => { if let Err(e) = self.heartbeat(&mut rpc, &mut heartbeat).await { - // TODO: try to start server tracing::error!("heartbeat failed: {:?}", e); + self.election.notify_one(); } last_heartbeat = Instant::now();