Add lazy P2P demand tracking and need_p2p override (#2003)

- add lazy_p2p so nodes only start background P2P for peers that actually have recent business traffic
- add need_p2p so specific peers can still request eager background P2P even when other nodes enable lazy mode
- cover the new behavior with focused connector/peer-manager tests plus three-node integration tests that verify relay-to-direct route transition
This commit is contained in:
KKRainbow
2026-03-23 09:38:57 +08:00
committed by GitHub
parent 2bfdd44759
commit 1d89ddbb16
22 changed files with 876 additions and 91 deletions
+1 -1
View File
@@ -45,7 +45,7 @@ pub async fn prepare_env_with_tld_dns_zone(
if let Some(zone) = tld_dns_zone {
flags.tld_dns_zone = zone.to_string();
}
ctx.config.set_flags(flags);
ctx.set_flags(flags);
}
let (s, r) = create_packet_recv_chan();
+8 -5
View File
@@ -593,9 +593,12 @@ impl Instance {
let mut direct_conn_manager =
DirectConnectorManager::new(global_ctx.clone(), peer_manager.clone());
direct_conn_manager.run();
let direct_conn_manager = Arc::new(direct_conn_manager);
let udp_hole_puncher = UdpHolePunchConnector::new(peer_manager.clone());
let tcp_hole_puncher = TcpHolePunchConnector::new(peer_manager.clone());
let udp_hole_puncher =
Arc::new(Mutex::new(UdpHolePunchConnector::new(peer_manager.clone())));
let tcp_hole_puncher =
Arc::new(Mutex::new(TcpHolePunchConnector::new(peer_manager.clone())));
let peer_center = Arc::new(PeerCenterInstance::new(peer_manager.clone()));
@@ -618,9 +621,9 @@ impl Instance {
peer_manager,
listener_manager,
conn_manager,
direct_conn_manager: Arc::new(direct_conn_manager),
udp_hole_puncher: Arc::new(Mutex::new(udp_hole_puncher)),
tcp_hole_puncher: Arc::new(Mutex::new(tcp_hole_puncher)),
direct_conn_manager,
udp_hole_puncher,
tcp_hole_puncher,
ip_proxy: None,
#[cfg(feature = "kcp")]