Skip to content

Commit 40d1afb

Browse files
authored
Merge pull request #9869 from Turbo87/deps
Remove `spawn_blocking()` call from `GET /crates/:crate_id/:version/dependencies` endpoint
2 parents fb906fc + 81d2332 commit 40d1afb

File tree

2 files changed

+20
-27
lines changed

2 files changed

+20
-27
lines changed

src/controllers/version/metadata.rs

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@
66
77
use axum::extract::Path;
88
use axum::Json;
9+
use crates_io_database::schema::{crates, dependencies};
910
use crates_io_worker::BackgroundJob;
10-
use diesel::{
11-
BoolExpressionMethods, ExpressionMethods, PgExpressionMethods, QueryDsl, RunQueryDsl,
12-
};
1311
use diesel_async::async_connection_wrapper::AsyncConnectionWrapper;
1412
use http::request::Parts;
1513
use http::StatusCode;
@@ -21,11 +19,13 @@ use crate::app::AppState;
2119
use crate::auth::AuthCheck;
2220
use crate::models::token::EndpointScope;
2321
use crate::models::{
24-
insert_version_owner_action, Crate, Rights, Version, VersionAction, VersionOwnerAction,
22+
insert_version_owner_action, Crate, Dependency, Rights, Version, VersionAction,
23+
VersionOwnerAction,
2524
};
2625
use crate::rate_limiter::LimitedAction;
2726
use crate::schema::versions;
2827
use crate::tasks::spawn_blocking;
28+
use crate::util::diesel::prelude::*;
2929
use crate::util::diesel::Conn;
3030
use crate::util::errors::{bad_request, custom, version_not_found, AppResult};
3131
use crate::views::{EncodableDependency, EncodableVersion};
@@ -54,24 +54,26 @@ pub async fn dependencies(
5454
state: AppState,
5555
Path((crate_name, version)): Path<(String, String)>,
5656
) -> AppResult<Json<Value>> {
57+
use diesel_async::RunQueryDsl;
58+
5759
if semver::Version::parse(&version).is_err() {
5860
return Err(version_not_found(&crate_name, &version));
5961
}
6062

6163
let mut conn = state.db_read().await?;
6264
let (version, _) = version_and_crate(&mut conn, &crate_name, &version).await?;
63-
spawn_blocking(move || {
64-
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
6565

66-
let deps = version.dependencies(conn)?;
67-
let deps = deps
68-
.into_iter()
69-
.map(|(dep, crate_name)| EncodableDependency::from_dep(dep, &crate_name))
70-
.collect::<Vec<_>>();
71-
72-
Ok(Json(json!({ "dependencies": deps })))
73-
})
74-
.await
66+
let deps = Dependency::belonging_to(&version)
67+
.inner_join(crates::table)
68+
.select((Dependency::as_select(), crates::name))
69+
.order((dependencies::optional, crates::name))
70+
.load::<(Dependency, String)>(&mut conn)
71+
.await?
72+
.into_iter()
73+
.map(|(dep, crate_name)| EncodableDependency::from_dep(dep, &crate_name))
74+
.collect::<Vec<_>>();
75+
76+
Ok(Json(json!({ "dependencies": deps })))
7577
}
7678

7779
/// Handles the `GET /crates/:crate_id/:version/authors` route.
@@ -173,6 +175,8 @@ pub fn perform_version_yank_update(
173175
yanked: Option<bool>,
174176
yank_message: Option<String>,
175177
) -> AppResult<()> {
178+
use diesel::RunQueryDsl;
179+
176180
let auth = AuthCheck::default()
177181
.with_endpoint_scope(EndpointScope::Yank)
178182
.for_crate(&krate.name)

src/models/version.rs

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use chrono::NaiveDateTime;
55
use crates_io_index::features::FeaturesMap;
66
use serde::Deserialize;
77

8-
use crate::models::{Crate, Dependency, User};
8+
use crate::models::{Crate, User};
99
use crate::schema::*;
1010
use crate::util::diesel::prelude::*;
1111
use crate::util::diesel::Conn;
@@ -35,17 +35,6 @@ pub struct Version {
3535
}
3636

3737
impl Version {
38-
/// Returns (dependency, crate dependency name)
39-
pub fn dependencies(&self, conn: &mut impl Conn) -> QueryResult<Vec<(Dependency, String)>> {
40-
use diesel::RunQueryDsl;
41-
42-
Dependency::belonging_to(self)
43-
.inner_join(crates::table)
44-
.select((Dependency::as_select(), crates::name))
45-
.order((dependencies::optional, crates::name))
46-
.load(conn)
47-
}
48-
4938
pub fn record_readme_rendering(version_id: i32, conn: &mut impl Conn) -> QueryResult<usize> {
5039
use diesel::dsl::now;
5140
use diesel::RunQueryDsl;

0 commit comments

Comments
 (0)