From 08dac981aff1c7e1fb30ab6a86b25e9a3206ef14 Mon Sep 17 00:00:00 2001 From: Denis Cornehl Date: Wed, 11 Feb 2026 00:32:25 +0100 Subject: [PATCH] delete crates & versions from the build queue when deleting from db --- ...d7536cd388eb5573c0fa1b9d5dbcd2396ed58.json | 14 +++++++ ...8b6f43433831ead2bca9877b4bef513df23d7.json | 15 +++++++ ...d7536cd388eb5573c0fa1b9d5dbcd2396ed58.json | 14 +++++++ ...8b6f43433831ead2bca9877b4bef513df23d7.json | 15 +++++++ ...d7536cd388eb5573c0fa1b9d5dbcd2396ed58.json | 14 +++++++ ...8b6f43433831ead2bca9877b4bef513df23d7.json | 15 +++++++ crates/bin/docs_rs_watcher/src/db/delete.rs | 39 ++++++++++++++++--- 7 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 .sqlx/query-27271bd144f03ed951980be34cad7536cd388eb5573c0fa1b9d5dbcd2396ed58.json create mode 100644 .sqlx/query-7abbefbac6ac8c49611820d8f1a8b6f43433831ead2bca9877b4bef513df23d7.json create mode 100644 crates/bin/cratesfyi/.sqlx/query-27271bd144f03ed951980be34cad7536cd388eb5573c0fa1b9d5dbcd2396ed58.json create mode 100644 crates/bin/cratesfyi/.sqlx/query-7abbefbac6ac8c49611820d8f1a8b6f43433831ead2bca9877b4bef513df23d7.json create mode 100644 crates/bin/docs_rs_watcher/.sqlx/query-27271bd144f03ed951980be34cad7536cd388eb5573c0fa1b9d5dbcd2396ed58.json create mode 100644 crates/bin/docs_rs_watcher/.sqlx/query-7abbefbac6ac8c49611820d8f1a8b6f43433831ead2bca9877b4bef513df23d7.json diff --git a/.sqlx/query-27271bd144f03ed951980be34cad7536cd388eb5573c0fa1b9d5dbcd2396ed58.json b/.sqlx/query-27271bd144f03ed951980be34cad7536cd388eb5573c0fa1b9d5dbcd2396ed58.json new file mode 100644 index 000000000..cdcc75110 --- /dev/null +++ b/.sqlx/query-27271bd144f03ed951980be34cad7536cd388eb5573c0fa1b9d5dbcd2396ed58.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM queue WHERE name = $1;", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "27271bd144f03ed951980be34cad7536cd388eb5573c0fa1b9d5dbcd2396ed58" +} diff --git a/.sqlx/query-7abbefbac6ac8c49611820d8f1a8b6f43433831ead2bca9877b4bef513df23d7.json b/.sqlx/query-7abbefbac6ac8c49611820d8f1a8b6f43433831ead2bca9877b4bef513df23d7.json new file mode 100644 index 000000000..79007deaa --- /dev/null +++ b/.sqlx/query-7abbefbac6ac8c49611820d8f1a8b6f43433831ead2bca9877b4bef513df23d7.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM queue WHERE name = $1 AND version = $2;", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "7abbefbac6ac8c49611820d8f1a8b6f43433831ead2bca9877b4bef513df23d7" +} diff --git a/crates/bin/cratesfyi/.sqlx/query-27271bd144f03ed951980be34cad7536cd388eb5573c0fa1b9d5dbcd2396ed58.json b/crates/bin/cratesfyi/.sqlx/query-27271bd144f03ed951980be34cad7536cd388eb5573c0fa1b9d5dbcd2396ed58.json new file mode 100644 index 000000000..cdcc75110 --- /dev/null +++ b/crates/bin/cratesfyi/.sqlx/query-27271bd144f03ed951980be34cad7536cd388eb5573c0fa1b9d5dbcd2396ed58.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM queue WHERE name = $1;", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "27271bd144f03ed951980be34cad7536cd388eb5573c0fa1b9d5dbcd2396ed58" +} diff --git a/crates/bin/cratesfyi/.sqlx/query-7abbefbac6ac8c49611820d8f1a8b6f43433831ead2bca9877b4bef513df23d7.json b/crates/bin/cratesfyi/.sqlx/query-7abbefbac6ac8c49611820d8f1a8b6f43433831ead2bca9877b4bef513df23d7.json new file mode 100644 index 000000000..79007deaa --- /dev/null +++ b/crates/bin/cratesfyi/.sqlx/query-7abbefbac6ac8c49611820d8f1a8b6f43433831ead2bca9877b4bef513df23d7.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM queue WHERE name = $1 AND version = $2;", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "7abbefbac6ac8c49611820d8f1a8b6f43433831ead2bca9877b4bef513df23d7" +} diff --git a/crates/bin/docs_rs_watcher/.sqlx/query-27271bd144f03ed951980be34cad7536cd388eb5573c0fa1b9d5dbcd2396ed58.json b/crates/bin/docs_rs_watcher/.sqlx/query-27271bd144f03ed951980be34cad7536cd388eb5573c0fa1b9d5dbcd2396ed58.json new file mode 100644 index 000000000..cdcc75110 --- /dev/null +++ b/crates/bin/docs_rs_watcher/.sqlx/query-27271bd144f03ed951980be34cad7536cd388eb5573c0fa1b9d5dbcd2396ed58.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM queue WHERE name = $1;", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "27271bd144f03ed951980be34cad7536cd388eb5573c0fa1b9d5dbcd2396ed58" +} diff --git a/crates/bin/docs_rs_watcher/.sqlx/query-7abbefbac6ac8c49611820d8f1a8b6f43433831ead2bca9877b4bef513df23d7.json b/crates/bin/docs_rs_watcher/.sqlx/query-7abbefbac6ac8c49611820d8f1a8b6f43433831ead2bca9877b4bef513df23d7.json new file mode 100644 index 000000000..79007deaa --- /dev/null +++ b/crates/bin/docs_rs_watcher/.sqlx/query-7abbefbac6ac8c49611820d8f1a8b6f43433831ead2bca9877b4bef513df23d7.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM queue WHERE name = $1 AND version = $2;", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "7abbefbac6ac8c49611820d8f1a8b6f43433831ead2bca9877b4bef513df23d7" +} diff --git a/crates/bin/docs_rs_watcher/src/db/delete.rs b/crates/bin/docs_rs_watcher/src/db/delete.rs index 5979bd9d1..990cc0e91 100644 --- a/crates/bin/docs_rs_watcher/src/db/delete.rs +++ b/crates/bin/docs_rs_watcher/src/db/delete.rs @@ -63,7 +63,7 @@ pub async fn delete_version( return Ok(()); }; - let is_library = delete_version_from_database(conn, crate_id, version).await?; + let is_library = delete_version_from_database(conn, name, crate_id, version).await?; let paths = if is_library { LIBRARY_STORAGE_PATHS_TO_DELETE } else { @@ -125,6 +125,7 @@ const METADATA: &[(&str, &str)] = &[ /// Returns whether this release was a library async fn delete_version_from_database( conn: &mut sqlx::PgConnection, + name: &KrateName, crate_id: CrateId, version: &Version, ) -> Result { @@ -143,6 +144,14 @@ async fn delete_version_from_database( .await? .unwrap_or(false); + sqlx::query!( + "DELETE FROM queue WHERE name = $1 AND version = $2;", + name as _, + version as _ + ) + .execute(&mut *transaction) + .await?; + update_latest_version_id(&mut transaction, crate_id).await?; transaction.commit().await?; @@ -171,7 +180,7 @@ async fn delete_crate_from_database( ) .as_str()).bind(crate_id).execute(&mut *transaction).await?; } - sqlx::query!("DELETE FROM owner_rels WHERE cid = $1;", crate_id.0) + sqlx::query!("DELETE FROM owner_rels WHERE cid = $1;", crate_id as _) .execute(&mut *transaction) .await?; @@ -181,16 +190,19 @@ async fn delete_crate_from_database( FROM releases WHERE releases.crate_id = $1 ", - crate_id.0 + crate_id as _ ) .fetch_one(&mut *transaction) .await? .unwrap_or(false); - sqlx::query!("DELETE FROM releases WHERE crate_id = $1;", crate_id.0) + sqlx::query!("DELETE FROM releases WHERE crate_id = $1;", crate_id as _) .execute(&mut *transaction) .await?; - sqlx::query!("DELETE FROM crates WHERE id = $1;", crate_id.0) + sqlx::query!("DELETE FROM crates WHERE id = $1;", crate_id as _) + .execute(&mut *transaction) + .await?; + sqlx::query!("DELETE FROM queue WHERE name = $1;", name as _) .execute(&mut *transaction) .await?; @@ -253,8 +265,14 @@ mod tests { async fn test_delete_crate(archive_storage: bool) -> Result<()> { let env = TestEnvironment::new().await?; let storage = env.storage()?; + let queue = env.build_queue()?; let mut conn = env.async_conn().await?; + // crate fake entries in the build queue + queue.add_crate(&FOO, &V1, 0, None).await?; + queue.add_crate(&FOO, &V2, 0, None).await?; + queue.add_crate(&BAR, &V1, 0, None).await?; + // Create fake packages in the database let pkg1_v1_id = env .fake_release() @@ -302,6 +320,10 @@ mod tests { delete_crate(&mut conn, storage, &FOO).await?; + assert!(!queue.has_build_queued(&FOO, &V1).await?); + assert!(!queue.has_build_queued(&FOO, &V2).await?); + assert!(queue.has_build_queued(&BAR, &V1).await?); + assert!(!crate_exists(&mut conn, &FOO).await?); assert!(crate_exists(&mut conn, &BAR).await?); assert!(!release_exists(&mut conn, pkg1_v1_id).await?); @@ -359,6 +381,7 @@ mod tests { async fn test_delete_version(archive_storage: bool) -> Result<()> { let env = TestEnvironment::new().await?; let storage = env.storage()?; + let queue = env.build_queue()?; async fn owners(conn: &mut sqlx::PgConnection, crate_id: CrateId) -> Result> { Ok(sqlx::query!( @@ -387,6 +410,9 @@ mod tests { } let mut conn = env.async_conn().await?; + queue.add_crate(&KRATE, &V1, 0, None).await?; + queue.add_crate(&KRATE, &V2, 0, None).await?; + let v1 = env .fake_release() .await @@ -400,6 +426,7 @@ mod tests { }) .create() .await?; + assert!(queue.has_build_queued(&KRATE, &V2).await?); assert!(release_exists(&mut conn, v1).await?); assert!( storage @@ -456,6 +483,8 @@ mod tests { ); delete_version(&mut conn, storage, &KRATE, &V1).await?; + assert!(!queue.has_build_queued(&KRATE, &V1).await?); + assert!(queue.has_build_queued(&KRATE, &V2).await?); assert!(!release_exists(&mut conn, v1).await?); if archive_storage { // for archive storage the archive and index files