Skip to content

Commit

Permalink
admin/yank_version: Reduce spawn_blocking() usage
Browse files Browse the repository at this point in the history
  • Loading branch information
Turbo87 committed Oct 10, 2024
1 parent e3b1380 commit 20a5fea
Showing 1 changed file with 20 additions and 14 deletions.
34 changes: 20 additions & 14 deletions src/admin/yank_version.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ use crate::worker::jobs;
use crate::worker::jobs::UpdateDefaultVersion;
use crates_io_worker::BackgroundJob;
use diesel::prelude::*;
use diesel_async::async_connection_wrapper::AsyncConnectionWrapper;
use diesel_async::{AsyncConnection, AsyncPgConnection, RunQueryDsl};

#[derive(clap::Parser, Debug)]
#[command(
Expand All @@ -24,24 +26,22 @@ pub struct Opts {
}

pub async fn run(opts: Opts) -> anyhow::Result<()> {
spawn_blocking(move || {
let mut conn = db::oneoff_connection()?;
conn.transaction(|conn| yank(opts, conn))?;
Ok(())
})
.await
let mut conn = db::oneoff_async_connection().await?;
conn.transaction(|conn| yank(opts, conn))?;
Ok(())
}

fn yank(opts: Opts, conn: &mut PgConnection) -> anyhow::Result<()> {
async fn yank(opts: Opts, conn: &mut AsyncPgConnection) -> anyhow::Result<()> {
let Opts {
crate_name,
version,
yes,
} = opts;
let krate: Crate = Crate::by_name(&crate_name).first(conn)?;
let krate: Crate = Crate::by_name(&crate_name).first(conn).await?;
let v: Version = Version::belonging_to(&krate)
.filter(versions::num.eq(&version))
.first(conn)?;
.first(conn)
.await?;

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

println!("yanking version {} ({})", v.num, v.id);
diesel::update(&v)
.set(versions::yanked.eq(true))
.execute(conn)?;
.execute(conn)
.await?;

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

UpdateDefaultVersion::new(krate.id).enqueue(conn)?;
jobs::enqueue_sync_to_index(&krate.name, conn)?;

Ok(())
UpdateDefaultVersion::new(krate.id).enqueue(conn)?;

Ok(())
})
.await
}

0 comments on commit 20a5fea

Please sign in to comment.