diff --git a/src/admin/populate.rs b/src/admin/populate.rs index fa81b75bd37..bea2c061383 100644 --- a/src/admin/populate.rs +++ b/src/admin/populate.rs @@ -1,8 +1,10 @@ use crate::{db, schema::version_downloads}; -use crate::tasks::spawn_blocking; use diesel::prelude::*; -use rand::{thread_rng, Rng}; +use diesel_async::scoped_futures::ScopedFutureExt; +use diesel_async::{AsyncConnection, AsyncPgConnection, RunQueryDsl}; +use rand::rngs::StdRng; +use rand::{Rng, SeedableRng}; #[derive(clap::Parser, Debug)] #[command( @@ -15,19 +17,17 @@ pub struct Opts { } pub async fn run(opts: Opts) -> anyhow::Result<()> { - spawn_blocking(move || { - let mut conn = db::oneoff_connection()?; - conn.transaction(|conn| update(opts, conn))?; - Ok(()) - }) - .await + let mut conn = db::oneoff_async_connection().await?; + conn.transaction(|conn| update(opts, conn).scope_boxed()) + .await?; + Ok(()) } -fn update(opts: Opts, conn: &mut PgConnection) -> QueryResult<()> { +async fn update(opts: Opts, conn: &mut AsyncPgConnection) -> QueryResult<()> { use diesel::dsl::*; for id in opts.version_ids { - let mut rng = thread_rng(); + let mut rng = StdRng::from_entropy(); let mut dls = rng.gen_range(5_000i32..10_000); for day in 0..90 { @@ -39,7 +39,8 @@ fn update(opts: Opts, conn: &mut PgConnection) -> QueryResult<()> { version_downloads::downloads.eq(dls), version_downloads::date.eq(date(now - day.days())), )) - .execute(conn)?; + .execute(conn) + .await?; } } Ok(())