Skip to content

Commit 1aaa5a6

Browse files
committed
admin/delete_crate: Remove spawn_blocking() usage
1 parent b54d0eb commit 1aaa5a6

File tree

1 file changed

+44
-49
lines changed

1 file changed

+44
-49
lines changed

src/admin/delete_crate.rs

Lines changed: 44 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
use crate::schema::{crate_owners, teams, users};
2-
use crate::tasks::spawn_blocking;
32
use crate::worker::jobs;
43
use crate::{admin::dialoguer, db, schema::crates};
54
use anyhow::Context;
65
use crates_io_worker::BackgroundJob;
76
use diesel::dsl::sql;
87
use diesel::sql_types::Text;
98
use diesel::{ExpressionMethods, JoinOnDsl, QueryDsl};
10-
use diesel_async::async_connection_wrapper::AsyncConnectionWrapper;
9+
use diesel_async::RunQueryDsl;
1110
use std::collections::HashMap;
1211

1312
#[derive(clap::Parser, Debug)]
@@ -34,24 +33,21 @@ pub async fn run(opts: Opts) -> anyhow::Result<()> {
3433
let mut crate_names = opts.crate_names;
3534
crate_names.sort();
3635

37-
let query_result = {
38-
use diesel_async::RunQueryDsl;
39-
40-
crates::table
41-
.select((
42-
crates::name,
43-
crates::id,
44-
sql::<Text>(
45-
"CASE WHEN crate_owners.owner_kind = 1 THEN teams.login ELSE users.gh_login END",
46-
),
47-
))
48-
.left_join(crate_owners::table.on(crate_owners::crate_id.eq(crates::id)))
49-
.left_join(teams::table.on(teams::id.eq(crate_owners::owner_id)))
50-
.left_join(users::table.on(users::id.eq(crate_owners::owner_id)))
51-
.filter(crates::name.eq_any(&crate_names))
52-
.load::<(String, i32, String)>(&mut conn).await
53-
.context("Failed to look up crate name from the database")
54-
}?;
36+
let query_result = crates::table
37+
.select((
38+
crates::name,
39+
crates::id,
40+
sql::<Text>(
41+
"CASE WHEN crate_owners.owner_kind = 1 THEN teams.login ELSE users.gh_login END",
42+
),
43+
))
44+
.left_join(crate_owners::table.on(crate_owners::crate_id.eq(crates::id)))
45+
.left_join(teams::table.on(teams::id.eq(crate_owners::owner_id)))
46+
.left_join(users::table.on(users::id.eq(crate_owners::owner_id)))
47+
.filter(crates::name.eq_any(&crate_names))
48+
.load::<(String, i32, String)>(&mut conn)
49+
.await
50+
.context("Failed to look up crate name from the database")?;
5551

5652
let mut existing_crates: HashMap<String, (i32, Vec<String>)> = HashMap::new();
5753
for (name, id, login) in query_result {
@@ -81,37 +77,36 @@ pub async fn run(opts: Opts) -> anyhow::Result<()> {
8177
return Ok(());
8278
}
8379

84-
spawn_blocking(move || {
85-
use diesel::RunQueryDsl;
86-
87-
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
88-
89-
for name in &crate_names {
90-
if let Some((id, _)) = existing_crates.get(name) {
91-
info!("{name}: Deleting crate from the database…");
92-
if let Err(error) = diesel::delete(crates::table.find(id)).execute(conn) {
93-
warn!(%id, "{name}: Failed to delete crate from the database: {error}");
94-
}
95-
} else {
96-
info!("{name}: Skipped missing crate");
97-
};
98-
99-
info!("{name}: Enqueuing index sync jobs…");
100-
if let Err(error) = jobs::SyncToGitIndex::new(name).enqueue(conn) {
101-
warn!("{name}: Failed to enqueue SyncToGitIndex job: {error}");
102-
}
103-
if let Err(error) = jobs::SyncToSparseIndex::new(name).enqueue(conn) {
104-
warn!("{name}: Failed to enqueue SyncToSparseIndex job: {error}");
80+
for name in &crate_names {
81+
if let Some((id, _)) = existing_crates.get(name) {
82+
info!("{name}: Deleting crate from the database…");
83+
if let Err(error) = diesel::delete(crates::table.find(id))
84+
.execute(&mut conn)
85+
.await
86+
{
87+
warn!(%id, "{name}: Failed to delete crate from the database: {error}");
10588
}
89+
} else {
90+
info!("{name}: Skipped missing crate");
91+
};
92+
93+
info!("{name}: Enqueuing index sync jobs…");
94+
let job = jobs::SyncToGitIndex::new(name);
95+
if let Err(error) = job.async_enqueue(&mut conn).await {
96+
warn!("{name}: Failed to enqueue SyncToGitIndex job: {error}");
97+
}
10698

107-
info!("{name}: Enqueuing DeleteCrateFromStorage job…");
108-
let job = jobs::DeleteCrateFromStorage::new(name.into());
109-
if let Err(error) = job.enqueue(conn) {
110-
warn!("{name}: Failed to enqueue DeleteCrateFromStorage job: {error}");
111-
}
99+
let job = jobs::SyncToSparseIndex::new(name);
100+
if let Err(error) = job.async_enqueue(&mut conn).await {
101+
warn!("{name}: Failed to enqueue SyncToSparseIndex job: {error}");
112102
}
113103

114-
Ok(())
115-
})
116-
.await
104+
info!("{name}: Enqueuing DeleteCrateFromStorage job…");
105+
let job = jobs::DeleteCrateFromStorage::new(name.into());
106+
if let Err(error) = job.async_enqueue(&mut conn).await {
107+
warn!("{name}: Failed to enqueue DeleteCrateFromStorage job: {error}");
108+
}
109+
}
110+
111+
Ok(())
117112
}

0 commit comments

Comments
 (0)