server: rearrange method ordering

This commit is contained in:
Luna Yao
2026-04-06 01:01:40 +02:00
parent 41d7335bd8
commit a031b6f701
+51 -51
View File
@@ -115,57 +115,6 @@ impl DnsServer {
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)]
async fn reload_addresses(
&self,
@@ -218,6 +167,57 @@ impl DnsServer {
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")]
pub async fn run(&self, token: CancellationToken) {
let dirty = &self.mgr.dirty;