Skip to content

Commit 37b73ae

Browse files
committed
controllers/version/metadata: Migrate perform_version_yank_update() to async/await
1 parent 7e43e4e commit 37b73ae

File tree

2 files changed

+39
-38
lines changed

2 files changed

+39
-38
lines changed

src/controllers/version/metadata.rs

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ use diesel_async::AsyncPgConnection;
1515
use http::request::Parts;
1616
use http::StatusCode;
1717
use serde::Deserialize;
18-
use tokio::runtime::Handle;
1918

2019
use crate::app::AppState;
2120
use crate::auth::{AuthCheck, Authentication};
@@ -27,7 +26,6 @@ use crate::rate_limiter::LimitedAction;
2726
use crate::schema::versions;
2827
use crate::tasks::spawn_blocking;
2928
use crate::util::diesel::prelude::*;
30-
use crate::util::diesel::Conn;
3129
use crate::util::errors::{bad_request, custom, version_not_found, AppResult};
3230
use crate::views::{EncodableDependency, EncodableVersion};
3331
use crate::worker::jobs::{SyncToGitIndex, SyncToSparseIndex, UpdateDefaultVersion};
@@ -137,19 +135,20 @@ pub async fn update(
137135
.check_rate_limit(auth.user_id(), LimitedAction::YankUnyank, &mut conn)
138136
.await?;
139137

138+
perform_version_yank_update(
139+
&state,
140+
&mut conn,
141+
&mut version,
142+
&krate,
143+
&auth,
144+
update_request.version.yanked,
145+
update_request.version.yank_message,
146+
)
147+
.await?;
148+
140149
spawn_blocking(move || {
141150
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
142151

143-
perform_version_yank_update(
144-
&state,
145-
conn,
146-
&mut version,
147-
&krate,
148-
&auth,
149-
update_request.version.yanked,
150-
update_request.version.yank_message,
151-
)?;
152-
153152
let published_by = version.published_by(conn)?;
154153
let actions = VersionOwnerAction::by_version(conn, &version)?;
155154
let updated_version = EncodableVersion::from(version, &krate.name, published_by, actions);
@@ -186,24 +185,24 @@ pub async fn authenticate(
186185
.await
187186
}
188187

189-
pub fn perform_version_yank_update(
188+
pub async fn perform_version_yank_update(
190189
state: &AppState,
191-
conn: &mut impl Conn,
190+
conn: &mut AsyncPgConnection,
192191
version: &mut Version,
193192
krate: &Crate,
194193
auth: &Authentication,
195194
yanked: Option<bool>,
196195
yank_message: Option<String>,
197196
) -> AppResult<()> {
198-
use diesel::RunQueryDsl;
197+
use diesel_async::RunQueryDsl;
199198

200199
let api_token_id = auth.api_token_id();
201200
let user = auth.user();
202-
let owners = krate.owners(conn)?;
201+
let owners = krate.async_owners(conn).await?;
203202

204203
let yanked = yanked.unwrap_or(version.yanked);
205204

206-
if Handle::current().block_on(user.rights(state, &owners))? < Rights::Publish {
205+
if user.rights(state, &owners).await? < Rights::Publish {
207206
if user.is_admin {
208207
let action = if yanked { "yanking" } else { "unyanking" };
209208
warn!(
@@ -230,7 +229,8 @@ pub fn perform_version_yank_update(
230229
versions::yanked.eq(yanked),
231230
versions::yank_message.eq(&yank_message),
232231
))
233-
.execute(conn)?;
232+
.execute(conn)
233+
.await?;
234234

235235
// If no rows were updated, return early
236236
if updated_cnt == 0 {
@@ -252,11 +252,16 @@ pub fn perform_version_yank_update(
252252
.maybe_api_token_id(api_token_id)
253253
.action(action)
254254
.build()
255-
.insert(conn)?;
255+
.async_insert(conn)
256+
.await?;
256257

257-
SyncToGitIndex::new(&krate.name).enqueue(conn)?;
258-
SyncToSparseIndex::new(&krate.name).enqueue(conn)?;
259-
UpdateDefaultVersion::new(krate.id).enqueue(conn)?;
258+
SyncToGitIndex::new(&krate.name).async_enqueue(conn).await?;
259+
SyncToSparseIndex::new(&krate.name)
260+
.async_enqueue(conn)
261+
.await?;
262+
UpdateDefaultVersion::new(krate.id)
263+
.async_enqueue(conn)
264+
.await?;
260265

261266
Ok(())
262267
}

src/controllers/version/yank.rs

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@ use super::version_and_crate;
55
use crate::app::AppState;
66
use crate::controllers::helpers::ok_true;
77
use crate::rate_limiter::LimitedAction;
8-
use crate::tasks::spawn_blocking;
98
use crate::util::errors::{version_not_found, AppResult};
109
use axum::extract::Path;
1110
use axum::response::Response;
12-
use diesel_async::async_connection_wrapper::AsyncConnectionWrapper;
1311
use http::request::Parts;
1412

1513
/// Handles the `DELETE /crates/:crate_id/:version/yank` route.
@@ -62,18 +60,16 @@ async fn modify_yank(
6260
.check_rate_limit(auth.user_id(), LimitedAction::YankUnyank, &mut conn)
6361
.await?;
6462

65-
spawn_blocking(move || {
66-
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
67-
perform_version_yank_update(
68-
&state,
69-
conn,
70-
&mut version,
71-
&krate,
72-
&auth,
73-
Some(yanked),
74-
None,
75-
)?;
76-
ok_true()
77-
})
78-
.await
63+
perform_version_yank_update(
64+
&state,
65+
&mut conn,
66+
&mut version,
67+
&krate,
68+
&auth,
69+
Some(yanked),
70+
None,
71+
)
72+
.await?;
73+
74+
ok_true()
7975
}

0 commit comments

Comments
 (0)