diff --git a/frameworks/Rust/axum/benchmark_config.json b/frameworks/Rust/axum/benchmark_config.json index ade60875389..c33a1edad78 100755 --- a/frameworks/Rust/axum/benchmark_config.json +++ b/frameworks/Rust/axum/benchmark_config.json @@ -28,7 +28,7 @@ "docker_cmd": "/app/axum-sqlx", "db_url": "/db", "fortune_url": "/fortunes", - "cached_query_url": "/cached-queries?queries=", + "cached_query_url": "/cached-queries?q=", "port": 8000, "approach": "Realistic", "classification": "Fullstack", @@ -50,8 +50,8 @@ "docker_cmd": "/app/axum-pg", "db_url": "/db", "fortune_url": "/fortunes", - "query_url": "/queries?queries=", - "update_url": "/updates?queries=", + "query_url": "/queries?q=", + "update_url": "/updates?q=", "port": 8000, "approach": "Realistic", "classification": "Fullstack", @@ -72,8 +72,8 @@ "dockerfile": "axum.dockerfile", "docker_cmd": "/app/axum-pg-pool", "db_url": "/db", - "query_url": "/queries?queries=", - "update_url": "/updates?queries=", + "query_url": "/queries?q=", + "update_url": "/updates?q=", "fortune_url": "/fortunes", "port": 8000, "approach": "Realistic", @@ -95,9 +95,9 @@ "dockerfile": "axum.dockerfile", "docker_cmd": "/app/axum-mongo", "db_url": "/db", - "query_url": "/queries?queries=", + "query_url": "/queries?q=", "fortune_url": "/fortunes", - "update_url": "/updates?queries=", + "update_url": "/updates?q=", "port": 8000, "approach": "Realistic", "classification": "Fullstack", @@ -118,8 +118,8 @@ "dockerfile": "axum.dockerfile", "docker_cmd": "/app/axum-mongo-raw", "db_url": "/db", - "query_url": "/queries?queries=", - "update_url": "/updates?queries=", + "query_url": "/queries?q=", + "update_url": "/updates?q=", "port": 8000, "approach": "Realistic", "classification": "Fullstack", diff --git a/frameworks/Rust/axum/src/common/mod.rs b/frameworks/Rust/axum/src/common/mod.rs index d55958155f1..808b2a70eeb 100644 --- a/frameworks/Rust/axum/src/common/mod.rs +++ b/frameworks/Rust/axum/src/common/mod.rs @@ -36,14 +36,14 @@ where /// Generate a single integer in the range 1 to 10,000 (inclusive) #[allow(dead_code)] -#[inline] +#[inline(always)] pub fn random_id(rng: &mut SmallRng) -> i32 { rng.gen_range(1..10_001) } /// Generate vector of integers in the range 1 to 10,000 (inclusive) #[allow(dead_code)] -#[inline] +#[inline(always)] pub fn random_ids(rng: &mut SmallRng, count: usize) -> Vec { rng.sample_iter(Uniform::new(1, 10_001)) .take(count) diff --git a/frameworks/Rust/axum/src/common/utils.rs b/frameworks/Rust/axum/src/common/utils.rs index 063411f3da7..0da86151e62 100644 --- a/frameworks/Rust/axum/src/common/utils.rs +++ b/frameworks/Rust/axum/src/common/utils.rs @@ -7,13 +7,14 @@ use serde::Deserialize; #[derive(Debug, Deserialize)] pub struct Params { - queries: Option, + q: Option, } #[allow(dead_code)] +#[inline(always)] pub fn parse_params(params: Params) -> usize { params - .queries + .q .and_then(|q| q.parse().ok()) .unwrap_or(1) .clamp(1, 500) diff --git a/frameworks/Rust/axum/src/main.rs b/frameworks/Rust/axum/src/main.rs index 70858e27ddc..0b33fb7edcb 100644 --- a/frameworks/Rust/axum/src/main.rs +++ b/frameworks/Rust/axum/src/main.rs @@ -26,13 +26,16 @@ pub async fn json() -> impl IntoResponse { (StatusCode::OK, Json(message)) } -#[tokio::main] -async fn main() { +fn main() { dotenv().ok(); + server::start_tokio(serve_app) +} + +async fn serve_app() { let app = Router::new() .route("/plaintext", get(plaintext)) .route("/json", get(json)); server::serve_hyper(app, Some(8000)).await -} +} \ No newline at end of file diff --git a/frameworks/Rust/axum/src/main_sqlx.rs b/frameworks/Rust/axum/src/main_sqlx.rs index 163372b83d8..b3a7937841b 100644 --- a/frameworks/Rust/axum/src/main_sqlx.rs +++ b/frameworks/Rust/axum/src/main_sqlx.rs @@ -1,6 +1,8 @@ mod common; mod sqlx; +use std::sync::Arc; + use ::sqlx::PgPool; use axum::{ extract::{Query, State}, @@ -56,7 +58,7 @@ async fn queries( let ids = random_ids(&mut rng, count); let mut worlds: Vec = Vec::with_capacity(count); - for id in ids { + for id in &ids { let world: World = ::sqlx::query_as(common::SELECT_WORLD_BY_ID) .bind(id) .fetch_one(&mut *db.acquire().await.unwrap()) @@ -96,7 +98,7 @@ async fn cache( ) -> impl IntoResponse { let count = parse_params(params); let mut rng = SmallRng::from_rng(&mut thread_rng()).unwrap(); - let mut worlds: Vec> = Vec::with_capacity(count); + let mut worlds: Vec>> = Vec::with_capacity(count); for id in random_ids(&mut rng, count) { worlds.push(cache.get(&id).await); @@ -113,7 +115,7 @@ async fn preload_cache(AppState { db, cache }: &AppState) { .expect("error loading worlds"); for world in worlds { - cache.insert(world.id, world).await; + cache.insert(world.id, Arc::new(world)).await; } } @@ -121,7 +123,7 @@ async fn preload_cache(AppState { db, cache }: &AppState) { #[derive(Clone)] struct AppState { db: PgPool, - cache: Cache, + cache: Cache>, } #[tokio::main] diff --git a/frameworks/Rust/axum/src/pg/database.rs b/frameworks/Rust/axum/src/pg/database.rs index bc78b2ba5c8..b9cff086c5a 100644 --- a/frameworks/Rust/axum/src/pg/database.rs +++ b/frameworks/Rust/axum/src/pg/database.rs @@ -90,21 +90,18 @@ impl PgConnection { } pub async fn update_worlds(&self, num: usize) -> Result, PgError> { - let worlds = self.fetch_random_worlds(num).await?; + let mut worlds = self.fetch_random_worlds(num).await?; // Update the worlds with new random numbers let mut rng = SmallRng::from_rng(&mut thread_rng()).unwrap(); let mut ids = Vec::with_capacity(num); let mut nids = Vec::with_capacity(num); - let worlds: Vec = worlds - .into_iter() - .map(|mut w| { - w.randomnumber = random_id(&mut rng); - ids.push(w.id); - nids.push(w.randomnumber); - w - }) - .collect(); + + for w in &mut worlds { + w.randomnumber = random_id(&mut rng); + ids.push(w.id); + nids.push(w.randomnumber); + } // Update the random worlds in the database. self.client