From 231b7d83009f39d0719378f4f78b820b0847faaa Mon Sep 17 00:00:00 2001 From: Luna Yao <40349250+ZnqbuZ@users.noreply.github.com> Date: Fri, 3 Apr 2026 13:38:23 +0200 Subject: [PATCH] node_mgr: fix catalog creation, step 1 --- easytier/src/dns/node_mgr.rs | 37 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/easytier/src/dns/node_mgr.rs b/easytier/src/dns/node_mgr.rs index c56148e1..d4d1f7e5 100644 --- a/easytier/src/dns/node_mgr.rs +++ b/easytier/src/dns/node_mgr.rs @@ -8,7 +8,7 @@ use crate::proto::rpc_types::controller::BaseController; use crate::utils::{DeterministicDigest, MapTryInto}; use anyhow::Error; use hickory_server::authority::Catalog; -use itertools::Itertools; +use itertools::{chain, Itertools}; use moka::future::Cache; use std::collections::HashSet; use std::time::Duration; @@ -64,23 +64,17 @@ impl DnsNodeMgr { tracing::warn!("building catalog with zones: {:?}", zones); - let mut catalog = Catalog::new(); - - for zone in zones.iter() { + zones.into_iter().fold(Catalog::new(), |mut catalog, zone| { catalog.upsert( zone.origin.clone(), - zone.create_memory_authority().into_iter().collect(), + chain( + zone.create_memory_authority(), + zone.create_forward_authority(), + ) + .collect(), ); - } - - for zone in zones.iter() { - catalog.upsert( - zone.origin.clone(), - zone.create_forward_authority().into_iter().collect(), - ); - } - - catalog + catalog + }) } pub fn collect_zones(&self) -> ZoneGroup { @@ -126,7 +120,12 @@ impl DnsNodeMgrRpc for DnsNodeMgr { type Controller = BaseController; // TODO: change level to trace - #[instrument(level = "debug", skip_all, fields(from = ?input.id, snapshot = ?input.snapshot), err)] + #[instrument( + level = "debug", + skip_all, + fields(from = ?input.id, snapshot = ?input.snapshot), + err + )] async fn heartbeat( &self, _: BaseController, @@ -169,15 +168,15 @@ impl DnsNodeMgrRpc for DnsNodeMgr { #[cfg(test)] mod tests { use super::*; + use crate::common::log; use crate::dns::utils::response::ResponseHandle; use hickory_proto::op::{Message, MessageType, OpCode, Query, ResponseCode}; use hickory_proto::rr::{rdata, Name, RData, RecordType}; - use hickory_proto::serialize::binary::{BinDecodable, BinDecoder, BinEncodable, BinEncoder}; + use hickory_proto::serialize::binary::{BinDecodable, BinEncodable, BinEncoder}; use hickory_proto::xfer::Protocol; - use hickory_server::authority::{MessageRequest, MessageResponse}; + use hickory_server::authority::MessageRequest; use hickory_server::server::Request; use std::net::{Ipv4Addr, SocketAddrV4}; - use crate::common::log; #[tokio::test] async fn test_force_insert_node_info_then_catalog_lookup() -> anyhow::Result<()> {