Skip to content

Commit 5ac8e2c

Browse files
committed
Use crate's id for deletion from S3, part 1
1 parent cc069c0 commit 5ac8e2c

File tree

3 files changed

+42
-26
lines changed

3 files changed

+42
-26
lines changed

src/bin/crates-admin/delete_crate.rs

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -83,38 +83,50 @@ pub async fn run(opts: Opts) -> anyhow::Result<()> {
8383
let available_at = now + chrono::TimeDelta::hours(opts.availability_delay);
8484

8585
for name in &crate_names {
86-
if let Some(crate_info) = existing_crates.iter().find(|info| info.name == *name) {
87-
let id = crate_info.id;
88-
89-
let deleted_crate = NewDeletedCrate::builder(name)
90-
.created_at(&crate_info.created_at)
91-
.deleted_at(&now)
92-
.deleted_by(deleted_by.id)
93-
.maybe_message(opts.message.as_deref())
94-
.available_at(&available_at)
95-
.build();
96-
97-
info!("{name}: Deleting crate from the database…");
98-
let result = conn
99-
.transaction(|conn| delete_from_database(conn, id, deleted_crate).scope_boxed())
100-
.await;
101-
102-
if let Err(error) = result {
103-
warn!(%id, "{name}: Failed to delete crate from the database: {error}");
86+
let crate_id =
87+
if let Some(crate_info) = existing_crates.iter().find(|info| info.name == *name) {
88+
let id = crate_info.id;
89+
90+
let deleted_crate = NewDeletedCrate::builder(name)
91+
.created_at(&crate_info.created_at)
92+
.deleted_at(&now)
93+
.deleted_by(deleted_by.id)
94+
.maybe_message(opts.message.as_deref())
95+
.available_at(&available_at)
96+
.build();
97+
98+
info!("{name}: Deleting crate from the database…");
99+
let result = conn
100+
.transaction(|conn| delete_from_database(conn, id, deleted_crate).scope_boxed())
101+
.await;
102+
103+
if let Err(error) = result {
104+
warn!(%id, "{name}: Failed to delete crate from the database: {error}");
105+
};
106+
107+
Some(id)
108+
} else {
109+
info!("{name}: Skipped missing crate");
110+
111+
None
104112
};
105-
} else {
106-
info!("{name}: Skipped missing crate");
107-
};
108113

109114
info!("{name}: Enqueuing background jobs…");
110115
let git_index_job = jobs::SyncToGitIndex::new(name);
111116
let sparse_index_job = jobs::SyncToSparseIndex::new(name);
112-
let delete_from_storage_job = jobs::DeleteCrateFromStorage::new(name.into());
117+
let delete_from_storage_job = async |conn: &mut AsyncPgConnection| {
118+
if let Some(crate_id) = crate_id {
119+
jobs::DeleteCrateFromStorage::new(name.into(), crate_id)
120+
.enqueue(conn)
121+
.await?;
122+
}
123+
Ok(())
124+
};
113125

114126
if let Err(error) = tokio::try_join!(
115127
git_index_job.enqueue(&mut conn),
116128
sparse_index_job.enqueue(&mut conn),
117-
delete_from_storage_job.enqueue(&mut conn),
129+
delete_from_storage_job(&mut conn),
118130
) {
119131
warn!("{name}: Failed to enqueue background job: {error}");
120132
}

src/controllers/krate/delete.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ pub async fn delete_crate(
134134

135135
let git_index_job = jobs::SyncToGitIndex::new(&krate.name);
136136
let sparse_index_job = jobs::SyncToSparseIndex::new(&krate.name);
137-
let delete_from_storage_job = jobs::DeleteCrateFromStorage::new(path.name);
137+
let delete_from_storage_job = jobs::DeleteCrateFromStorage::new(path.name, krate.id);
138138

139139
tokio::try_join!(
140140
git_index_job.enqueue(conn),

src/worker/jobs/delete_crate.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,15 @@ use tracing::info;
1212
#[derive(Serialize, Deserialize)]
1313
pub struct DeleteCrateFromStorage {
1414
name: String,
15+
crate_id: Option<i32>,
1516
}
1617

1718
impl DeleteCrateFromStorage {
18-
pub fn new(name: String) -> Self {
19-
Self { name }
19+
pub fn new(name: String, crate_id: i32) -> Self {
20+
Self {
21+
name,
22+
crate_id: Some(crate_id),
23+
}
2024
}
2125
}
2226

0 commit comments

Comments
 (0)