mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-09-02 17:15:43 +00:00
server: rearrange method ordering
This commit is contained in:
+51
-51
@@ -115,57 +115,6 @@ impl DnsServer {
|
|||||||
self.addresses.read().iter().map(|a| a.addr).collect()
|
self.addresses.read().iter().map(|a| a.addr).collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[instrument(skip_all)]
|
|
||||||
async fn reload_listeners(
|
|
||||||
&self,
|
|
||||||
listeners: impl IntoIterator<Item = NameServerAddr>,
|
|
||||||
runtime: &mut Option<AsyncRuntime>,
|
|
||||||
) -> anyhow::Result<()> {
|
|
||||||
let listeners = listeners.into_iter().collect();
|
|
||||||
|
|
||||||
if *self.listeners.read() == listeners {
|
|
||||||
tracing::info!("listeners unchanged, no need to reload");
|
|
||||||
return Ok(());
|
|
||||||
}
|
|
||||||
tracing::info!(?listeners, "reloading");
|
|
||||||
|
|
||||||
if let Some(runtime) = runtime.as_ref() {
|
|
||||||
if let Some(Err(e)) = runtime.stop().await {
|
|
||||||
tracing::error!("failed to stop old DNS server runtime: {}", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let runtime = runtime.get_or_insert_default();
|
|
||||||
|
|
||||||
let mut server = ServerFuture::new(self.catalog.clone());
|
|
||||||
for listener in &listeners {
|
|
||||||
let addr = listener.addr;
|
|
||||||
tracing::info!(?addr, "binding listener");
|
|
||||||
if let Err(error) = match listener.protocol {
|
|
||||||
Protocol::Udp => bind_socket(addr, None).map(|s| server.register_socket(s)),
|
|
||||||
Protocol::Tcp => bind_socket(addr, None)
|
|
||||||
.map(|s| server.register_listener(s, DNS_SERVER_LISTENER_TCP_TIMEOUT)),
|
|
||||||
_ => unimplemented!(),
|
|
||||||
} {
|
|
||||||
tracing::error!(?addr, ?error, "failed to bind listener");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
runtime.start(Some(server.shutdown_token().clone()), |_| {
|
|
||||||
async move {
|
|
||||||
server
|
|
||||||
.block_until_done()
|
|
||||||
.await
|
|
||||||
.unwrap_or_else(|e| tracing::error!("DNS server exited with error: {:?}", e));
|
|
||||||
}
|
|
||||||
.instrument(tracing::info_span!("DNS server backend runtime"))
|
|
||||||
});
|
|
||||||
|
|
||||||
*self.listeners.write() = listeners;
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[instrument(skip_all)]
|
#[instrument(skip_all)]
|
||||||
async fn reload_addresses(
|
async fn reload_addresses(
|
||||||
&self,
|
&self,
|
||||||
@@ -218,6 +167,57 @@ impl DnsServer {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[instrument(skip_all)]
|
||||||
|
async fn reload_listeners(
|
||||||
|
&self,
|
||||||
|
listeners: impl IntoIterator<Item = NameServerAddr>,
|
||||||
|
runtime: &mut Option<AsyncRuntime>,
|
||||||
|
) -> anyhow::Result<()> {
|
||||||
|
let listeners = listeners.into_iter().collect();
|
||||||
|
|
||||||
|
if *self.listeners.read() == listeners {
|
||||||
|
tracing::info!("listeners unchanged, no need to reload");
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
tracing::info!(?listeners, "reloading");
|
||||||
|
|
||||||
|
if let Some(runtime) = runtime.as_ref() {
|
||||||
|
if let Some(Err(e)) = runtime.stop().await {
|
||||||
|
tracing::error!("failed to stop old DNS server runtime: {}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let runtime = runtime.get_or_insert_default();
|
||||||
|
|
||||||
|
let mut server = ServerFuture::new(self.catalog.clone());
|
||||||
|
for listener in &listeners {
|
||||||
|
let addr = listener.addr;
|
||||||
|
tracing::info!(?addr, "binding listener");
|
||||||
|
if let Err(error) = match listener.protocol {
|
||||||
|
Protocol::Udp => bind_socket(addr, None).map(|s| server.register_socket(s)),
|
||||||
|
Protocol::Tcp => bind_socket(addr, None)
|
||||||
|
.map(|s| server.register_listener(s, DNS_SERVER_LISTENER_TCP_TIMEOUT)),
|
||||||
|
_ => unimplemented!(),
|
||||||
|
} {
|
||||||
|
tracing::error!(?addr, ?error, "failed to bind listener");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
runtime.start(Some(server.shutdown_token().clone()), |_| {
|
||||||
|
async move {
|
||||||
|
server
|
||||||
|
.block_until_done()
|
||||||
|
.await
|
||||||
|
.unwrap_or_else(|e| tracing::error!("DNS server exited with error: {:?}", e));
|
||||||
|
}
|
||||||
|
.instrument(tracing::info_span!("DNS server backend runtime"))
|
||||||
|
});
|
||||||
|
|
||||||
|
*self.listeners.write() = listeners;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[instrument(skip_all, name = "DnsServer main loop")]
|
#[instrument(skip_all, name = "DnsServer main loop")]
|
||||||
pub async fn run(&self, token: CancellationToken) {
|
pub async fn run(&self, token: CancellationToken) {
|
||||||
let dirty = &self.mgr.dirty;
|
let dirty = &self.mgr.dirty;
|
||||||
|
|||||||
Reference in New Issue
Block a user