@@ -15,7 +15,6 @@ use diesel_async::AsyncPgConnection;
1515use http:: request:: Parts ;
1616use http:: StatusCode ;
1717use serde:: Deserialize ;
18- use tokio:: runtime:: Handle ;
1918
2019use crate :: app:: AppState ;
2120use crate :: auth:: { AuthCheck , Authentication } ;
@@ -27,7 +26,6 @@ use crate::rate_limiter::LimitedAction;
2726use crate :: schema:: versions;
2827use crate :: tasks:: spawn_blocking;
2928use crate :: util:: diesel:: prelude:: * ;
30- use crate :: util:: diesel:: Conn ;
3129use crate :: util:: errors:: { bad_request, custom, version_not_found, AppResult } ;
3230use crate :: views:: { EncodableDependency , EncodableVersion } ;
3331use 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}
0 commit comments