mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-09-03 01:25:37 +00:00
use CancellableTask in DnsServer
server
This commit is contained in:
@@ -10,7 +10,6 @@ use crate::proto::dns::DnsNodeMgrRpcServer;
|
|||||||
use crate::proto::rpc_impl::standalone::StandAloneServer;
|
use crate::proto::rpc_impl::standalone::StandAloneServer;
|
||||||
use crate::tunnel::packet_def::ZCPacket;
|
use crate::tunnel::packet_def::ZCPacket;
|
||||||
use crate::tunnel::tcp::TcpTunnelListener;
|
use crate::tunnel::tcp::TcpTunnelListener;
|
||||||
use crate::utils::task::AsyncRuntime;
|
|
||||||
use derivative::Derivative;
|
use derivative::Derivative;
|
||||||
use hickory_net::runtime::{Time, TokioTime};
|
use hickory_net::runtime::{Time, TokioTime};
|
||||||
use hickory_net::xfer::Protocol;
|
use hickory_net::xfer::Protocol;
|
||||||
@@ -34,6 +33,7 @@ use tracing::{Instrument, instrument};
|
|||||||
#[cfg(feature = "tun")]
|
#[cfg(feature = "tun")]
|
||||||
use crate::instance::instance::{ArcNicCtx, NicCtx};
|
use crate::instance::instance::{ArcNicCtx, NicCtx};
|
||||||
use crate::tunnel::common::bind;
|
use crate::tunnel::common::bind;
|
||||||
|
use crate::utils::task::CancellableTask;
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
struct DynamicCatalog {
|
struct DynamicCatalog {
|
||||||
@@ -169,7 +169,7 @@ impl DnsServer {
|
|||||||
async fn reload_listeners(
|
async fn reload_listeners(
|
||||||
&self,
|
&self,
|
||||||
listeners: impl IntoIterator<Item = NameServerAddr>,
|
listeners: impl IntoIterator<Item = NameServerAddr>,
|
||||||
runtime: &mut Option<AsyncRuntime>,
|
runtime: &mut Option<CancellableTask>,
|
||||||
) -> anyhow::Result<()> {
|
) -> anyhow::Result<()> {
|
||||||
let listeners = listeners.into_iter().collect();
|
let listeners = listeners.into_iter().collect();
|
||||||
|
|
||||||
@@ -179,14 +179,12 @@ impl DnsServer {
|
|||||||
}
|
}
|
||||||
tracing::info!(?listeners, "reloading");
|
tracing::info!(?listeners, "reloading");
|
||||||
|
|
||||||
if let Some(runtime) = runtime.as_ref()
|
if let Some(runtime) = runtime.take()
|
||||||
&& let Some(Err(error)) = runtime.stop(None).await
|
&& let Err(error) = runtime.stop(None).await
|
||||||
{
|
{
|
||||||
tracing::error!(?error, "failed to stop old DNS server runtime");
|
tracing::error!(?error, "failed to stop old DNS server runtime");
|
||||||
}
|
}
|
||||||
|
|
||||||
let runtime = runtime.get_or_insert_default();
|
|
||||||
|
|
||||||
let mut server = Server::new(self.catalog.clone());
|
let mut server = Server::new(self.catalog.clone());
|
||||||
for listener in &listeners {
|
for listener in &listeners {
|
||||||
let addr = listener.addr;
|
let addr = listener.addr;
|
||||||
@@ -206,15 +204,16 @@ impl DnsServer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
runtime.start(Some(server.shutdown_token().clone()), |_| {
|
*runtime = Some(CancellableTask::with_token(
|
||||||
|
server.shutdown_token().clone(),
|
||||||
async move {
|
async move {
|
||||||
server
|
server
|
||||||
.block_until_done()
|
.block_until_done()
|
||||||
.await
|
.await
|
||||||
.unwrap_or_else(|e| tracing::error!("DNS server exited with error: {:?}", e));
|
.unwrap_or_else(|e| tracing::error!("DNS server exited with error: {:?}", e));
|
||||||
}
|
}
|
||||||
.instrument(tracing::info_span!("DNS server backend runtime"))
|
.instrument(tracing::info_span!("DNS server backend runtime")),
|
||||||
})?;
|
));
|
||||||
|
|
||||||
*self.listeners.write() = listeners;
|
*self.listeners.write() = listeners;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user