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 @@ -57,6 +57,31 @@ impl DownloadsCounter {
57
57
}
58
58
}
59
59
60
+ pub fn persist_all_shards ( & self , app : & App ) -> Result < ( ) , Error > {
61
+ let conn = app. primary_database . get ( ) ?;
62
+
63
+ let mut counted_downloads = 0 ;
64
+ let mut counted_versions = 0 ;
65
+ let mut pending_downloads = 0 ;
66
+ for shard in self . inner . shards ( ) {
67
+ let shard = std:: mem:: take ( & mut * shard. write ( ) ) ;
68
+ let stats = self . persist_shard ( & conn, shard) ?;
69
+
70
+ counted_downloads += stats. counted_downloads ;
71
+ counted_versions += stats. counted_versions ;
72
+ pending_downloads = stats. pending_downloads ;
73
+ }
74
+
75
+ println ! (
76
+ "download_counter all_shards counted_versions={} counted_downloads={} pending_downloads={}" ,
77
+ counted_versions,
78
+ counted_downloads,
79
+ pending_downloads,
80
+ ) ;
81
+
82
+ Ok ( ( ) )
83
+ }
84
+
60
85
pub fn persist_next_shard ( & self , app : & App ) -> Result < ( ) , Error > {
61
86
let conn = app. primary_database . get ( ) ?;
62
87
You can’t perform that action at this time.
0 commit comments