From 0c89ee9248b2dc3150e5f3fd95d58d617a4ccd09 Mon Sep 17 00:00:00 2001 From: Igor Katson Date: Sun, 19 Nov 2023 23:11:11 +0000 Subject: [PATCH] Add parameter with_peers to stats_snapshot while its slow --- crates/librqbit/examples/ubuntu.rs | 2 +- crates/librqbit/src/http_api.rs | 2 +- crates/librqbit/src/torrent_manager.rs | 4 ++-- crates/librqbit/src/torrent_state.rs | 8 ++++++-- crates/rqbit/src/main.rs | 2 +- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/crates/librqbit/examples/ubuntu.rs b/crates/librqbit/examples/ubuntu.rs index 6813043..782dbbc 100644 --- a/crates/librqbit/examples/ubuntu.rs +++ b/crates/librqbit/examples/ubuntu.rs @@ -55,7 +55,7 @@ async fn main() -> Result<(), anyhow::Error> { async move { loop { tokio::time::sleep(Duration::from_secs(1)).await; - let stats = handle.torrent_state().stats_snapshot(); + let stats = handle.torrent_state().stats_snapshot(true); info!("stats: {stats:?}"); } } diff --git a/crates/librqbit/src/http_api.rs b/crates/librqbit/src/http_api.rs index e63156f..6fdebb5 100644 --- a/crates/librqbit/src/http_api.rs +++ b/crates/librqbit/src/http_api.rs @@ -320,7 +320,7 @@ impl ApiInternal { fn api_stats(&self, idx: usize) -> Result { let mgr = self.mgr_handle(idx)?; - let snapshot = mgr.torrent_state().stats_snapshot(); + let snapshot = mgr.torrent_state().stats_snapshot(true); let estimator = mgr.speed_estimator(); // Poor mans download speed computation diff --git a/crates/librqbit/src/torrent_manager.rs b/crates/librqbit/src/torrent_manager.rs index 943c755..3f160dc 100644 --- a/crates/librqbit/src/torrent_manager.rs +++ b/crates/librqbit/src/torrent_manager.rs @@ -294,8 +294,8 @@ impl TorrentManager { let state = mgr.state.clone(); async move { loop { - let stats = state.stats_snapshot(); - let fetched = state.stats_snapshot().fetched_bytes; + let stats = state.stats_snapshot(false); + let fetched = stats.fetched_bytes; let needed = state.initially_needed(); // fetched can be too high in theory, so for safety make sure that it doesn't wrap around u64. let remaining = needed diff --git a/crates/librqbit/src/torrent_state.rs b/crates/librqbit/src/torrent_state.rs index ddb0f79..b28ed6e 100644 --- a/crates/librqbit/src/torrent_state.rs +++ b/crates/librqbit/src/torrent_state.rs @@ -809,9 +809,13 @@ impl TorrentState { true } - pub fn stats_snapshot(&self) -> StatsSnapshot { + pub fn stats_snapshot(&self, with_peer_stats: bool) -> StatsSnapshot { use Ordering::*; - let peer_stats = self.peers.stats(); + let peer_stats = if with_peer_stats { + self.peers.stats() + } else { + Default::default() + }; let downloaded = self.stats.downloaded_and_checked.load(Relaxed); let remaining = self.needed - downloaded; StatsSnapshot { diff --git a/crates/rqbit/src/main.rs b/crates/rqbit/src/main.rs index 83cbb5f..49f7686 100644 --- a/crates/rqbit/src/main.rs +++ b/crates/rqbit/src/main.rs @@ -244,7 +244,7 @@ async fn async_main(opts: Opts, spawner: BlockingSpawner) -> anyhow::Result<()> info!("[{}] initializing", idx); }, ManagedTorrentState::Running(handle) => { - let stats = timeit("stats_snapshot", || handle.torrent_state().stats_snapshot()); + let stats = timeit("stats_snapshot", || handle.torrent_state().stats_snapshot(true)); let speed = handle.speed_estimator(); let total = stats.total_bytes; let progress = stats.total_bytes - stats.remaining_bytes;