File tree Expand file tree Collapse file tree 2 files changed +31
-1
lines changed Expand file tree Collapse file tree 2 files changed +31
-1
lines changed Original file line number Diff line number Diff line change @@ -54,7 +54,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
54
54
// Start the background thread periodically persisting download counts to the database.
55
55
downloads_counter_thread ( app. clone ( ) ) ;
56
56
57
- let handler = cargo_registry:: build_handler ( app) ;
57
+ let handler = cargo_registry:: build_handler ( app. clone ( ) ) ;
58
58
59
59
// On every server restart, ensure the categories available in the database match
60
60
// the information in *src/categories.toml*.
@@ -167,6 +167,11 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
167
167
}
168
168
}
169
169
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
+
170
175
println ! ( "Server has gracefully shutdown!" ) ;
171
176
Ok ( ( ) )
172
177
}
Original file line number Diff line number Diff line change @@ -53,6 +53,31 @@ impl DownloadsCounter {
53
53
}
54
54
}
55
55
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
+
56
81
pub fn persist_next_shard ( & self , app : & App ) -> Result < ( ) , Error > {
57
82
let conn = app. primary_database . get ( ) ?;
58
83
You can’t perform that action at this time.
0 commit comments