Skip to content

Commit d6a4534

Browse files
committed
downloads_counter: persist all counters on shutdown
1 parent d067a20 commit d6a4534

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/bin/server.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
5454
// Start the background thread periodically persisting download counts to the database.
5555
downloads_counter_thread(app.clone());
5656

57-
let handler = cargo_registry::build_handler(app);
57+
let handler = cargo_registry::build_handler(app.clone());
5858

5959
// On every server restart, ensure the categories available in the database match
6060
// the information in *src/categories.toml*.
@@ -167,6 +167,11 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
167167
}
168168
}
169169

170+
println!("Persisting remaining downloads counters");
171+
if let Err(err) = app.downloads_counter.persist_all_shards(&app) {
172+
println!("downloads_counter error: {}", err);
173+
}
174+
170175
println!("Server has gracefully shutdown!");
171176
Ok(())
172177
}

src/downloads_counter.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,31 @@ impl DownloadsCounter {
5353
}
5454
}
5555

56+
pub fn persist_all_shards(&self, app: &App) -> Result<(), Error> {
57+
let conn = app.primary_database.get()?;
58+
59+
let mut counted_downloads = 0;
60+
let mut counted_versions = 0;
61+
let mut pending_downloads = 0;
62+
for shard in self.inner.shards() {
63+
let shard = std::mem::take(&mut *shard.write());
64+
let stats = self.persist_shard(&conn, shard)?;
65+
66+
counted_downloads += stats.counted_downloads;
67+
counted_versions += stats.counted_versions;
68+
pending_downloads = stats.pending_downloads;
69+
}
70+
71+
println!(
72+
"download_counter all_shards counted_versions={} counted_downloads={} pending_downloads={}",
73+
counted_versions,
74+
counted_downloads,
75+
pending_downloads,
76+
);
77+
78+
Ok(())
79+
}
80+
5681
pub fn persist_next_shard(&self, app: &App) -> Result<(), Error> {
5782
let conn = app.primary_database.get()?;
5883

0 commit comments

Comments
 (0)