Skip to content

Commit 20a5fea

Browse files
committed
admin/yank_version: Reduce spawn_blocking() usage
1 parent e3b1380 commit 20a5fea

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

src/admin/yank_version.rs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ use crate::worker::jobs;
77
use crate::worker::jobs::UpdateDefaultVersion;
88
use crates_io_worker::BackgroundJob;
99
use diesel::prelude::*;
10+
use diesel_async::async_connection_wrapper::AsyncConnectionWrapper;
11+
use diesel_async::{AsyncConnection, AsyncPgConnection, RunQueryDsl};
1012

1113
#[derive(clap::Parser, Debug)]
1214
#[command(
@@ -24,24 +26,22 @@ pub struct Opts {
2426
}
2527

2628
pub async fn run(opts: Opts) -> anyhow::Result<()> {
27-
spawn_blocking(move || {
28-
let mut conn = db::oneoff_connection()?;
29-
conn.transaction(|conn| yank(opts, conn))?;
30-
Ok(())
31-
})
32-
.await
29+
let mut conn = db::oneoff_async_connection().await?;
30+
conn.transaction(|conn| yank(opts, conn))?;
31+
Ok(())
3332
}
3433

35-
fn yank(opts: Opts, conn: &mut PgConnection) -> anyhow::Result<()> {
34+
async fn yank(opts: Opts, conn: &mut AsyncPgConnection) -> anyhow::Result<()> {
3635
let Opts {
3736
crate_name,
3837
version,
3938
yes,
4039
} = opts;
41-
let krate: Crate = Crate::by_name(&crate_name).first(conn)?;
40+
let krate: Crate = Crate::by_name(&crate_name).first(conn).await?;
4241
let v: Version = Version::belonging_to(&krate)
4342
.filter(versions::num.eq(&version))
44-
.first(conn)?;
43+
.first(conn)
44+
.await?;
4545

4646
if v.yanked {
4747
println!("Version {version} of crate {crate_name} is already yanked");
@@ -53,19 +53,25 @@ fn yank(opts: Opts, conn: &mut PgConnection) -> anyhow::Result<()> {
5353
"Are you sure you want to yank {crate_name}#{version} ({})?",
5454
v.id
5555
);
56-
if !dialoguer::confirm(&prompt)? {
56+
if !dialoguer::async_confirm(&prompt).await? {
5757
return Ok(());
5858
}
5959
}
6060

6161
println!("yanking version {} ({})", v.num, v.id);
6262
diesel::update(&v)
6363
.set(versions::yanked.eq(true))
64-
.execute(conn)?;
64+
.execute(conn)
65+
.await?;
6566

66-
jobs::enqueue_sync_to_index(&krate.name, conn)?;
67+
spawn_blocking(move || {
68+
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
6769

68-
UpdateDefaultVersion::new(krate.id).enqueue(conn)?;
70+
jobs::enqueue_sync_to_index(&krate.name, conn)?;
6971

70-
Ok(())
72+
UpdateDefaultVersion::new(krate.id).enqueue(conn)?;
73+
74+
Ok(())
75+
})
76+
.await
7177
}

0 commit comments

Comments
 (0)