Skip to content

Commit d813089

Browse files
feat(iroh-net)!: improve dns behaviour by staggering requests (#2313)
## Description Improves dns behaviour by staggering concurrent queries. Other changes include: - Remove unnecessary trait bounds from `ResolverExt` functions. - Unify dns capabilities under `ResolverExt`. - Add helper fn `stagger_call` with a minimal test. - Add staggering versions of the `ResolverExt` functions. - Use staggered options and turn on tests ## Breaking Changes - `iroh_net::dns::node_info::lookup_by_domain` moved to `iroh_net::ResolverExt::lookup_by_domain` ## Notes & open questions Whether test are less prone to fail randomly is something I can't test locally (no windows) so I'm trusting ci here. ## Change checklist - [x] Self-review. - [x] Documentation updates if relevant. - [x] Tests if relevant. - [x] All breaking changes documented.
1 parent 6d1a6dd commit d813089

File tree

7 files changed

+269
-47
lines changed

7 files changed

+269
-47
lines changed

iroh-dns-server/examples/resolve.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ async fn main() -> anyhow::Result<()> {
5757
TxtAttrs::<String>::lookup_by_id(&resolver, &node_id, origin).await?
5858
}
5959
Command::Domain { domain } => {
60-
TxtAttrs::<String>::lookup_by_domain(&resolver, &domain).await?
60+
TxtAttrs::<String>::lookup_by_name(&resolver, &domain).await?
6161
}
6262
};
6363
println!("resolved node {}", resolved.node_id());

iroh-dns-server/src/lib.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,7 @@ mod tests {
2222
};
2323
use iroh_net::{
2424
discovery::pkarr_publish::PkarrRelayClient,
25-
dns::{
26-
node_info::{lookup_by_id, NodeInfo},
27-
DnsResolver,
28-
},
25+
dns::{node_info::NodeInfo, DnsResolver, ResolverExt},
2926
key::SecretKey,
3027
};
3128
use pkarr::{PkarrClient, SignedPacket};
@@ -168,7 +165,7 @@ mod tests {
168165
pkarr.publish(&signed_packet).await?;
169166

170167
let resolver = test_resolver(nameserver);
171-
let res = lookup_by_id(&resolver, &node_id, origin).await?;
168+
let res = resolver.lookup_by_id(&node_id, origin).await?;
172169

173170
assert_eq!(res.node_id, node_id);
174171
assert_eq!(res.info.relay_url.map(Url::from), Some(relay_url));
@@ -204,7 +201,7 @@ mod tests {
204201

205202
// resolve via DNS from our server, which will lookup from our DHT
206203
let resolver = test_resolver(nameserver);
207-
let res = lookup_by_id(&resolver, &node_id, origin).await?;
204+
let res = resolver.lookup_by_id(&node_id, origin).await?;
208205

209206
assert_eq!(res.node_id, node_id);
210207
assert_eq!(res.info.relay_url.map(Url::from), Some(relay_url));

iroh-net/src/discovery.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,7 @@ mod test_dns_pkarr {
562562

563563
use crate::{
564564
discovery::pkarr_publish::PkarrPublisher,
565-
dns::node_info::{lookup_by_id, NodeInfo},
565+
dns::{node_info::NodeInfo, ResolverExt},
566566
relay::{RelayMap, RelayMode},
567567
test_utils::{
568568
dns_server::{create_dns_resolver, run_dns_server},
@@ -590,7 +590,7 @@ mod test_dns_pkarr {
590590
state.upsert(signed_packet)?;
591591

592592
let resolver = create_dns_resolver(nameserver)?;
593-
let resolved = lookup_by_id(&resolver, &node_info.node_id, &origin).await?;
593+
let resolved = resolver.lookup_by_id(&node_info.node_id, &origin).await?;
594594

595595
assert_eq!(resolved, node_info.into());
596596

@@ -620,7 +620,7 @@ mod test_dns_pkarr {
620620
publisher.update_addr_info(&addr_info);
621621
// wait until our shared state received the update from pkarr publishing
622622
dns_pkarr_server.on_node(&node_id, timeout).await?;
623-
let resolved = lookup_by_id(&resolver, &node_id, &origin).await?;
623+
let resolved = resolver.lookup_by_id(&node_id, &origin).await?;
624624

625625
let expected = NodeAddr {
626626
info: addr_info,

iroh-net/src/discovery/dns.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ use futures_lite::stream::Boxed as BoxStream;
55

66
use crate::{
77
discovery::{Discovery, DiscoveryItem},
8-
dns, Endpoint, NodeId,
8+
dns::ResolverExt,
9+
Endpoint, NodeId,
910
};
1011

1112
/// The n0 testing DNS node origin
1213
pub const N0_DNS_NODE_ORIGIN: &str = "dns.iroh.link";
14+
const DNS_STAGGERING_MS: &[u64] = &[200, 300];
1315

1416
/// DNS node discovery
1517
///
@@ -53,8 +55,9 @@ impl Discovery for DnsDiscovery {
5355
let resolver = ep.dns_resolver().clone();
5456
let origin_domain = self.origin_domain.clone();
5557
let fut = async move {
56-
let node_addr =
57-
dns::node_info::lookup_by_id(&resolver, &node_id, &origin_domain).await?;
58+
let node_addr = resolver
59+
.lookup_by_id_staggered(&node_id, &origin_domain, DNS_STAGGERING_MS)
60+
.await?;
5861
Ok(DiscoveryItem {
5962
provenance: "dns",
6063
last_updated: None,

0 commit comments

Comments
 (0)