Skip to content

Commit b62e1f8

Browse files
committed
worker/jobs/downloads/update_metadata: Update values in the crate_downloads table too
This is not removing the `crates` table update just yet, since we need to keep both tables in sync for now until the rest of the code is migrated to reading from the `crate_downloads` table instead.
1 parent c128a4b commit b62e1f8

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

src/worker/jobs/downloads/update_metadata.rs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,12 @@ fn batch_update(batch_size: i64, conn: &mut PgConnection) -> QueryResult<i64> {
126126
SET downloads = crates.downloads + crate_downloads_batch.downloads
127127
FROM crate_downloads_batch
128128
WHERE crates.id = crate_downloads_batch.crate_id
129+
), updated_crate_downloads AS (
130+
-- Update the `downloads` count for each crate in the `crate_downloads` table.
131+
UPDATE crate_downloads
132+
SET downloads = crate_downloads.downloads + crate_downloads_batch.downloads
133+
FROM crate_downloads_batch
134+
WHERE crate_downloads.crate_id = crate_downloads_batch.crate_id
129135
), updated_metadata AS (
130136
-- Update the `total_downloads` count in the `metadata` table.
131137
UPDATE metadata
@@ -170,7 +176,7 @@ mod tests {
170176
use super::*;
171177
use crate::email::Emails;
172178
use crate::models::{Crate, NewCrate, NewUser, NewVersion, User, Version};
173-
use crate::schema::{crates, versions};
179+
use crate::schema::{crate_downloads, crates, versions};
174180
use crate::test_util::test_db_connection;
175181
use std::collections::BTreeMap;
176182

@@ -224,17 +230,27 @@ mod tests {
224230
.unwrap();
225231

226232
super::update(conn).unwrap();
233+
227234
let version_downloads = versions::table
228235
.find(version.id)
229236
.select(versions::downloads)
230237
.first(conn);
231238
assert_eq!(version_downloads, Ok(1));
239+
232240
let crate_downloads = crates::table
233241
.find(krate.id)
234242
.select(crates::downloads)
235243
.first(conn);
236244
assert_eq!(crate_downloads, Ok(1));
245+
246+
let crate_downloads = crate_downloads::table
247+
.find(krate.id)
248+
.select(crate_downloads::downloads)
249+
.first(conn);
250+
assert_eq!(crate_downloads, Ok(1));
251+
237252
super::update(conn).unwrap();
253+
238254
let version_downloads = versions::table
239255
.find(version.id)
240256
.select(versions::downloads)
@@ -330,17 +346,29 @@ mod tests {
330346
.filter(crates::id.eq(krate.id))
331347
.first(conn)
332348
.unwrap();
349+
333350
super::update(conn).unwrap();
351+
334352
let version2: Version = versions::table.find(version.id).first(conn).unwrap();
335353
assert_eq!(version2.downloads, 2);
336354
assert_eq!(version2.updated_at, version_before.updated_at);
355+
337356
let krate2: Crate = Crate::all()
338357
.filter(crates::id.eq(krate.id))
339358
.first(conn)
340359
.unwrap();
341360
assert_eq!(krate2.downloads, 2);
342361
assert_eq!(krate2.updated_at, krate_before.updated_at);
362+
363+
let krate2_downloads: i64 = crate_downloads::table
364+
.find(krate.id)
365+
.select(crate_downloads::downloads)
366+
.first(conn)
367+
.unwrap();
368+
assert_eq!(krate2_downloads, 2);
369+
343370
super::update(conn).unwrap();
371+
344372
let version3: Version = versions::table.find(version.id).first(conn).unwrap();
345373
assert_eq!(version3.downloads, 2);
346374
}

0 commit comments

Comments
 (0)