Skip to content

Commit

Permalink
admin/yank_version: Remove spawn_blocking() usage (#9655)
Browse files Browse the repository at this point in the history
  • Loading branch information
Turbo87 authored Oct 13, 2024
1 parent 813f349 commit 449ca0a
Showing 1 changed file with 25 additions and 15 deletions.
40 changes: 25 additions & 15 deletions src/admin/yank_version.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ use crate::admin::dialoguer;
use crate::db;
use crate::models::{Crate, Version};
use crate::schema::versions;
use crate::tasks::spawn_blocking;
use crate::worker::jobs::{SyncToGitIndex, SyncToSparseIndex, UpdateDefaultVersion};
use crates_io_worker::BackgroundJob;
use diesel::prelude::*;
use diesel_async::scoped_futures::ScopedFutureExt;
use diesel_async::{AsyncConnection, AsyncPgConnection, RunQueryDsl};

#[derive(clap::Parser, Debug)]
#[command(
Expand All @@ -23,24 +24,26 @@ 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).scope_boxed())
.await?;

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 @@ -52,19 +55,26 @@ 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?;

SyncToGitIndex::new(&krate.name).async_enqueue(conn).await?;

SyncToSparseIndex::new(&krate.name)
.async_enqueue(conn)
.await?;

SyncToGitIndex::new(&krate.name).enqueue(conn)?;
SyncToSparseIndex::new(&krate.name).enqueue(conn)?;
UpdateDefaultVersion::new(krate.id).enqueue(conn)?;
UpdateDefaultVersion::new(krate.id)
.async_enqueue(conn)
.await?;

Ok(())
}

0 comments on commit 449ca0a

Please sign in to comment.