mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-09-03 17:45:44 +00:00
peer_mgr: remove peer from cache when lost route
This commit is contained in:
@@ -79,8 +79,13 @@ impl DnsPeerMgrInner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let Some(route) = self.peer_mgr.get_route().get_peer_info(peer_id).await else {
|
let Some(route) = self.peer_mgr.get_route().get_peer_info(peer_id).await else {
|
||||||
|
if self.peers.remove(&peer_id).await.is_some() {
|
||||||
|
tracing::debug!(%peer_id, "peer route disappeared, removing from cache");
|
||||||
|
self.dirty.mark();
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
if self
|
if self
|
||||||
.peers
|
.peers
|
||||||
.get(&peer_id)
|
.get(&peer_id)
|
||||||
@@ -90,19 +95,18 @@ impl DnsPeerMgrInner {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut invalidate = route.dns.is_empty();
|
let info =
|
||||||
|
if !route.dns.is_empty() {
|
||||||
if !invalidate {
|
self.fetch(peer_id).await.inspect_err(|error| {
|
||||||
match self.fetch(peer_id).await {
|
|
||||||
Ok(info) => self.peers.insert(peer_id, info).await,
|
|
||||||
Err(error) => {
|
|
||||||
tracing::warn!(%peer_id, ?error, "failed to fetch dns export config from peer");
|
tracing::warn!(%peer_id, ?error, "failed to fetch dns export config from peer");
|
||||||
invalidate = true;
|
}).ok()
|
||||||
}
|
} else {
|
||||||
|
None
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
if invalidate {
|
if let Some(info) = info {
|
||||||
|
self.peers.insert(peer_id, info).await;
|
||||||
|
} else {
|
||||||
self.peers.invalidate(&peer_id).await;
|
self.peers.invalidate(&peer_id).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -288,18 +292,14 @@ mod tests {
|
|||||||
.await;
|
.await;
|
||||||
|
|
||||||
let snapshot = mgr.snapshot();
|
let snapshot = mgr.snapshot();
|
||||||
assert!(
|
assert!(snapshot
|
||||||
snapshot
|
|
||||||
.zones
|
.zones
|
||||||
.iter()
|
.iter()
|
||||||
.any(|z| z.origin.contains("peer-cache.test"))
|
.any(|z| z.origin.contains("peer-cache.test")));
|
||||||
);
|
assert!(snapshot
|
||||||
assert!(
|
|
||||||
snapshot
|
|
||||||
.zones
|
.zones
|
||||||
.iter()
|
.iter()
|
||||||
.any(|z| z.origin.contains("local-custom.test"))
|
.any(|z| z.origin.contains("local-custom.test")));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
@@ -540,12 +540,10 @@ mod tests {
|
|||||||
|
|
||||||
assert!(local_dns.dirty.peek());
|
assert!(local_dns.dirty.peek());
|
||||||
let snapshot = local_dns.snapshot();
|
let snapshot = local_dns.snapshot();
|
||||||
assert!(
|
assert!(snapshot
|
||||||
snapshot
|
|
||||||
.zones
|
.zones
|
||||||
.iter()
|
.iter()
|
||||||
.any(|z| z.origin.contains("remote-export.test"))
|
.any(|z| z.origin.contains("remote-export.test")));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
@@ -556,17 +554,11 @@ mod tests {
|
|||||||
Ipv4Addr::new(10, 2, 0, 1),
|
Ipv4Addr::new(10, 2, 0, 1),
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
let peer_a = create_peer_manager_with_zone(
|
let peer_a =
|
||||||
"peer-a",
|
create_peer_manager_with_zone("peer-a", "remote-a.test", Ipv4Addr::new(10, 2, 0, 2))
|
||||||
"remote-a.test",
|
|
||||||
Ipv4Addr::new(10, 2, 0, 2),
|
|
||||||
)
|
|
||||||
.await;
|
.await;
|
||||||
let peer_b = create_peer_manager_with_zone(
|
let peer_b =
|
||||||
"peer-b",
|
create_peer_manager_with_zone("peer-b", "remote-b.test", Ipv4Addr::new(10, 2, 0, 3))
|
||||||
"remote-b.test",
|
|
||||||
Ipv4Addr::new(10, 2, 0, 3),
|
|
||||||
)
|
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let local_dns = DnsPeerMgr::new(local.clone(), local.get_global_ctx());
|
let local_dns = DnsPeerMgr::new(local.clone(), local.get_global_ctx());
|
||||||
@@ -585,18 +577,14 @@ mod tests {
|
|||||||
local_dns.refresh(peer_a.my_peer_id()).await;
|
local_dns.refresh(peer_a.my_peer_id()).await;
|
||||||
|
|
||||||
let snapshot = local_dns.snapshot();
|
let snapshot = local_dns.snapshot();
|
||||||
assert!(
|
assert!(snapshot
|
||||||
snapshot
|
|
||||||
.zones
|
.zones
|
||||||
.iter()
|
.iter()
|
||||||
.any(|z| z.origin.contains("remote-a.test"))
|
.any(|z| z.origin.contains("remote-a.test")));
|
||||||
);
|
assert!(!snapshot
|
||||||
assert!(
|
|
||||||
!snapshot
|
|
||||||
.zones
|
.zones
|
||||||
.iter()
|
.iter()
|
||||||
.any(|z| z.origin.contains("remote-b.test"))
|
.any(|z| z.origin.contains("remote-b.test")));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
@@ -744,12 +732,10 @@ mod tests {
|
|||||||
.get(&unchanged_id)
|
.get(&unchanged_id)
|
||||||
.await
|
.await
|
||||||
.expect("unchanged peer cache should stay");
|
.expect("unchanged peer cache should stay");
|
||||||
assert!(
|
assert!(unchanged_cache
|
||||||
unchanged_cache
|
|
||||||
.zones
|
.zones
|
||||||
.iter()
|
.iter()
|
||||||
.any(|z| z.origin.contains("cached-unchanged.test"))
|
.any(|z| z.origin.contains("cached-unchanged.test")));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
@@ -775,18 +761,14 @@ mod tests {
|
|||||||
.await;
|
.await;
|
||||||
|
|
||||||
let before = mgr.snapshot();
|
let before = mgr.snapshot();
|
||||||
assert!(
|
assert!(before
|
||||||
before
|
|
||||||
.zones
|
.zones
|
||||||
.iter()
|
.iter()
|
||||||
.any(|z| z.origin.contains("cached-expire.test"))
|
.any(|z| z.origin.contains("cached-expire.test")));
|
||||||
);
|
assert!(before
|
||||||
assert!(
|
|
||||||
before
|
|
||||||
.zones
|
.zones
|
||||||
.iter()
|
.iter()
|
||||||
.any(|z| z.origin.contains("local-tti.test"))
|
.any(|z| z.origin.contains("local-tti.test")));
|
||||||
);
|
|
||||||
|
|
||||||
let deadline = tokio::time::Instant::now() + DNS_PEER_TTI + Duration::from_secs(3);
|
let deadline = tokio::time::Instant::now() + DNS_PEER_TTI + Duration::from_secs(3);
|
||||||
loop {
|
loop {
|
||||||
@@ -796,12 +778,10 @@ mod tests {
|
|||||||
.iter()
|
.iter()
|
||||||
.any(|z| z.origin.contains("cached-expire.test"));
|
.any(|z| z.origin.contains("cached-expire.test"));
|
||||||
if expired {
|
if expired {
|
||||||
assert!(
|
assert!(now_snapshot
|
||||||
now_snapshot
|
|
||||||
.zones
|
.zones
|
||||||
.iter()
|
.iter()
|
||||||
.any(|z| z.origin.contains("local-tti.test"))
|
.any(|z| z.origin.contains("local-tti.test")));
|
||||||
);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -867,4 +847,3 @@ mod tests {
|
|||||||
assert!(res.is_none());
|
assert!(res.is_none());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user