mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-09-02 17:15:43 +00:00
node(election): use guard to protect nic_packet_process_pipeline
node: guarden
This commit is contained in:
@@ -13,10 +13,11 @@ use crate::proto::rpc_impl::standalone::{StandAloneClient, StandAloneServer};
|
|||||||
use crate::proto::rpc_types::controller::BaseController;
|
use crate::proto::rpc_types::controller::BaseController;
|
||||||
use crate::tunnel::tcp::{TcpTunnelConnector, TcpTunnelListener};
|
use crate::tunnel::tcp::{TcpTunnelConnector, TcpTunnelListener};
|
||||||
use crate::utils::task::CancellableTask;
|
use crate::utils::task::CancellableTask;
|
||||||
|
use guarden::guard;
|
||||||
use std::io;
|
use std::io;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tokio::sync::{Notify, broadcast};
|
use tokio::sync::{Notify, broadcast};
|
||||||
use tokio::task::{JoinError, JoinSet};
|
use tokio::task::JoinSet;
|
||||||
use tokio::time::{Instant, sleep, sleep_until};
|
use tokio::time::{Instant, sleep, sleep_until};
|
||||||
use tokio_util::sync::CancellationToken;
|
use tokio_util::sync::CancellationToken;
|
||||||
use tracing::instrument;
|
use tracing::instrument;
|
||||||
@@ -76,19 +77,25 @@ impl DnsNodeRuntime {
|
|||||||
));
|
));
|
||||||
|
|
||||||
server.register(&rpc);
|
server.register(&rpc);
|
||||||
|
|
||||||
self.global_ctx.set_dns_server(Some(server.clone()));
|
self.global_ctx.set_dns_server(Some(server.clone()));
|
||||||
|
|
||||||
|
let guard = guard! {
|
||||||
|
[
|
||||||
|
global_ctx = self.global_ctx.clone(),
|
||||||
|
peer_mgr = self.peer_mgr.clone(),
|
||||||
|
id = server.id()
|
||||||
|
]
|
||||||
|
global_ctx.set_dns_server(None);
|
||||||
|
async move { let _ = peer_mgr.remove_nic_packet_process_pipeline(id).await; }
|
||||||
|
};
|
||||||
|
|
||||||
tokio::join!(
|
tokio::join!(
|
||||||
self.peer_mgr
|
self.peer_mgr
|
||||||
.add_nic_packet_process_pipeline(Box::new(server.clone())),
|
.add_nic_packet_process_pipeline(Box::new(server.clone())),
|
||||||
server.run(token.child_token())
|
server.run(token.child_token())
|
||||||
);
|
);
|
||||||
|
|
||||||
self.global_ctx.set_dns_server(None);
|
guard.trigger().await;
|
||||||
let _ = self
|
|
||||||
.peer_mgr
|
|
||||||
.remove_nic_packet_process_pipeline(server.id())
|
|
||||||
.await;
|
|
||||||
|
|
||||||
tracing::warn!("DnsServer exited, will retry election");
|
tracing::warn!("DnsServer exited, will retry election");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user