p2p_chat/sync/engine/discovery/queries/
maintenance.rs1use crate::sync::engine::SyncEngine;
4use libp2p::kad;
5use std::time::Duration;
6use tracing::trace;
7
8impl SyncEngine {
9 pub(crate) fn cleanup_stale_dht_queries(&mut self) {
14 let stale_timeout = Duration::from_secs(10);
15 let mut stale_queries = Vec::new();
16
17 for (&query_id, query_state) in &self.pending_dht_queries {
18 if query_state.started_at.elapsed() > stale_timeout {
19 stale_queries.push(query_id);
20 }
21 }
22
23 for query_id in stale_queries {
24 if let Some(query_state) = self.pending_dht_queries.remove(&query_id) {
25 trace!(
26 "Removing stale DHT query {:?} (age: {:?}, received_results: {})",
27 query_id,
28 query_state.started_at.elapsed(),
29 query_state.received_results
30 );
31 }
32 }
33
34 self.backoff_manager
35 .cleanup_old_entries(Duration::from_secs(3600));
36 }
37
38 pub(crate) fn has_pending_query_for(&self, key: &kad::RecordKey) -> bool {
48 self.pending_dht_queries
49 .values()
50 .any(|state| state.key == *key)
51 }
52}