Skip to content

Commit dd90af8

Browse files
authored
controllers/version: Pipelining database queries (#10306)
1 parent 9607d28 commit dd90af8

File tree

3 files changed

+14
-8
lines changed

3 files changed

+14
-8
lines changed

src/controllers/version/metadata.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,10 @@ use super::CrateVersionPath;
2525
pub async fn find_version(state: AppState, path: CrateVersionPath) -> AppResult<ErasedJson> {
2626
let mut conn = state.db_read().await?;
2727
let (version, krate) = path.load_version_and_crate(&mut conn).await?;
28-
let published_by = version.published_by(&mut conn).await?;
29-
let actions = VersionOwnerAction::by_version(&mut conn, &version).await?;
28+
let (actions, published_by) = tokio::try_join!(
29+
VersionOwnerAction::by_version(&mut conn, &version),
30+
version.published_by(&mut conn),
31+
)?;
3032

3133
let version = EncodableVersion::from(version, &krate.name, published_by, actions);
3234
Ok(json!({ "version": version }))

src/controllers/version/update.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,10 @@ pub async fn update_version(
7171
)
7272
.await?;
7373

74-
let published_by = version.published_by(&mut conn).await?;
75-
let actions = VersionOwnerAction::by_version(&mut conn, &version).await?;
74+
let (actions, published_by) = tokio::try_join!(
75+
VersionOwnerAction::by_version(&mut conn, &version),
76+
version.published_by(&mut conn),
77+
)?;
7678
let updated_version = EncodableVersion::from(version, &krate.name, published_by, actions);
7779
Ok(json!({ "version": updated_version }))
7880
}

src/models/action.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ use chrono::NaiveDateTime;
55
use crates_io_diesel_helpers::pg_enum;
66
use diesel::prelude::*;
77
use diesel_async::{AsyncPgConnection, RunQueryDsl};
8+
use futures_util::future::BoxFuture;
9+
use futures_util::future::FutureExt;
810

911
pg_enum! {
1012
pub enum VersionAction {
@@ -54,18 +56,18 @@ impl VersionOwnerAction {
5456
version_owner_actions::table.load(conn).await
5557
}
5658

57-
pub async fn by_version(
59+
pub fn by_version<'a>(
5860
conn: &mut AsyncPgConnection,
59-
version: &Version,
60-
) -> QueryResult<Vec<(Self, User)>> {
61+
version: &'a Version,
62+
) -> BoxFuture<'a, QueryResult<Vec<(Self, User)>>> {
6163
use version_owner_actions::dsl::version_id;
6264

6365
version_owner_actions::table
6466
.filter(version_id.eq(version.id))
6567
.inner_join(users::table)
6668
.order(version_owner_actions::dsl::id)
6769
.load(conn)
68-
.await
70+
.boxed()
6971
}
7072

7173
pub async fn for_versions(

0 commit comments

Comments
 (0)