ws: swarm worker: more readability refactors

This commit is contained in:
Joakim Frostegård 2024-01-25 23:40:19 +01:00
parent f050467c2a
commit e4422cf3ff

View file

@ -40,8 +40,9 @@ impl TorrentMaps {
request_sender_meta: InMessageMeta, request_sender_meta: InMessageMeta,
request: AnnounceRequest, request: AnnounceRequest,
) { ) {
self.get_torrent_map_by_ip_version(request_sender_meta.ip_version) let torrent_map = self.get_torrent_map_by_ip_version(request_sender_meta.ip_version);
.handle_announce_request(
torrent_map.handle_announce_request(
config, config,
rng, rng,
out_messages, out_messages,
@ -58,8 +59,9 @@ impl TorrentMaps {
meta: InMessageMeta, meta: InMessageMeta,
request: ScrapeRequest, request: ScrapeRequest,
) { ) {
self.get_torrent_map_by_ip_version(meta.ip_version) let torrent_map = self.get_torrent_map_by_ip_version(meta.ip_version);
.handle_scrape_request(config, out_messages, meta, request);
torrent_map.handle_scrape_request(config, out_messages, meta, request);
} }
pub fn clean( pub fn clean(
@ -87,8 +89,9 @@ impl TorrentMaps {
peer_id: PeerId, peer_id: PeerId,
ip_version: IpVersion, ip_version: IpVersion,
) { ) {
self.get_torrent_map_by_ip_version(ip_version) let torrent_map = self.get_torrent_map_by_ip_version(ip_version);
.handle_connection_closed(info_hash, peer_id);
torrent_map.handle_connection_closed(info_hash, peer_id);
} }
fn get_torrent_map_by_ip_version(&mut self, ip_version: IpVersion) -> &mut TorrentMap { fn get_torrent_map_by_ip_version(&mut self, ip_version: IpVersion) -> &mut TorrentMap {
@ -257,14 +260,7 @@ impl TorrentMap {
pub fn handle_connection_closed(&mut self, info_hash: InfoHash, peer_id: PeerId) { pub fn handle_connection_closed(&mut self, info_hash: InfoHash, peer_id: PeerId) {
if let Some(torrent_data) = self.torrents.get_mut(&info_hash) { if let Some(torrent_data) = self.torrents.get_mut(&info_hash) {
if let Some(peer) = torrent_data.peers.remove(&peer_id) { torrent_data.handle_connection_closed(peer_id, &self.peer_gauge);
if peer.seeder {
torrent_data.num_seeders -= 1;
}
#[cfg(feature = "metrics")]
self.peer_gauge.decrement(1.0);
}
} }
} }
@ -289,27 +285,11 @@ impl TorrentMap {
return false; return false;
} }
let num_seeders = &mut torrent_data.num_seeders; let num_peers = torrent_data.clean_and_get_num_peers(now);
torrent_data.peers.retain(|_, peer| { total_num_peers += num_peers as u64;
peer.expecting_answers
.retain(|_, valid_until| valid_until.valid(now));
peer.expecting_answers.shrink_to_fit();
let keep = peer.valid_until.valid(now); num_peers > 0
if (!keep) & peer.seeder {
*num_seeders -= 1;
}
keep
});
total_num_peers += torrent_data.peers.len() as u64;
torrent_data.peers.shrink_to_fit();
!torrent_data.peers.is_empty()
}); });
self.torrents.shrink_to_fit(); self.torrents.shrink_to_fit();
@ -528,6 +508,41 @@ impl TorrentData {
None None
} }
} }
pub fn handle_connection_closed(
&mut self,
peer_id: PeerId,
#[cfg(feature = "metrics")] peer_gauge: &::metrics::Gauge,
) {
if let Some(peer) = self.peers.remove(&peer_id) {
if peer.seeder {
self.num_seeders -= 1;
}
#[cfg(feature = "metrics")]
peer_gauge.decrement(1.0);
}
}
fn clean_and_get_num_peers(&mut self, now: SecondsSinceServerStart) -> usize {
self.peers.retain(|_, peer| {
peer.expecting_answers
.retain(|_, valid_until| valid_until.valid(now));
peer.expecting_answers.shrink_to_fit();
let keep = peer.valid_until.valid(now);
if (!keep) & peer.seeder {
self.num_seeders -= 1;
}
keep
});
self.peers.shrink_to_fit();
self.peers.len()
}
} }
#[derive(Clone, Debug)] #[derive(Clone, Debug)]