Add a struct for session stats + bump the counters

This commit is contained in:
Igor Katson 2024-08-21 11:22:37 +01:00
parent ee2ad7138e
commit 67afdb0aa5
No known key found for this signature in database
GPG key ID: B4EC22B66D61A3F5
8 changed files with 96 additions and 31 deletions

View file

@ -1,4 +1,4 @@
use std::net::SocketAddr;
use std::{net::SocketAddr, sync::Arc};
use anyhow::Context;
use backoff::backoff::Backoff;
@ -8,6 +8,7 @@ use peer_binary_protocol::{Message, Request};
use crate::{
peer_connection::WriterRequest,
session_stats::atomic::AtomicSessionStats,
torrent_state::utils::{atomic_inc, TimedExistence},
type_aliases::{PeerHandle, BF},
};
@ -18,8 +19,8 @@ use super::peer::{LivePeerState, Peer, PeerRx, PeerState, PeerTx};
pub mod stats;
#[derive(Default)]
pub(crate) struct PeerStates {
pub session_stats: Arc<AtomicSessionStats>,
pub stats: AggregatePeerStatsAtomic,
pub states: DashMap<PeerHandle, Peer>,
}
@ -36,7 +37,10 @@ impl PeerStates {
Entry::Vacant(vac) => {
vac.insert(Default::default());
atomic_inc(&self.stats.queued);
atomic_inc(&self.session_stats.peers.queued);
atomic_inc(&self.stats.seen);
atomic_inc(&self.session_stats.peers.queued);
Some(addr)
}
}
@ -73,7 +77,10 @@ impl PeerStates {
pub fn drop_peer(&self, handle: PeerHandle) -> Option<Peer> {
let p = self.states.remove(&handle).map(|r| r.1)?;
self.stats.dec(p.state.get());
let s = p.state.get();
self.stats.dec(s);
self.session_stats.peers.dec(s);
Some(p)
}
@ -99,7 +106,7 @@ impl PeerStates {
let rx = self
.with_peer_mut(h, "mark_peer_connecting", |peer| {
peer.state
.idle_to_connecting(&self.stats)
.idle_to_connecting(&[&self.stats, &self.session_stats.peers])
.context("invalid peer state")
})
.context("peer not found in states")??;
@ -114,7 +121,8 @@ impl PeerStates {
pub fn mark_peer_not_needed(&self, handle: PeerHandle) -> Option<PeerState> {
let prev = self.with_peer_mut(handle, "mark_peer_not_needed", |peer| {
peer.state.set_not_needed(&self.stats)
peer.state
.set_not_needed(&[&self.stats, &self.session_stats.peers])
})?;
Some(prev)
}
@ -132,6 +140,7 @@ impl PeerStates {
atomic_inc(&p.stats.counters.times_stolen_from_me);
});
self.stats.inc_steals();
self.session_stats.peers.inc_steals();
self.with_live_mut(from_peer, "send_cancellations", |live| {
let to_remove = live