diff --git a/frameworks/Rust/hyperlane/Cargo.lock b/frameworks/Rust/hyperlane/Cargo.lock index d32d72d8a04..98d910ea035 100644 --- a/frameworks/Rust/hyperlane/Cargo.lock +++ b/frameworks/Rust/hyperlane/Cargo.lock @@ -324,9 +324,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" dependencies = [ "libc", "windows-sys 0.59.0", @@ -655,9 +655,9 @@ checksum = "c978c76917568ef84ce5020d6b1fa49ce74a4dd65bc290b93b1355a81aebdb9e" [[package]] name = "http-type" -version = "3.63.0" +version = "3.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b636cec6e80b206725f9bf79c36ebccbee37ead35fdbca1b7583ee99f495a602" +checksum = "228db23663f214e42497ed0fc66ddab4c7fea8039998823e49d516f559a92e5f" dependencies = [ "ahash", "dashmap", @@ -682,9 +682,9 @@ dependencies = [ [[package]] name = "hyperlane" -version = "4.84.0" +version = "4.86.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65f71c235dd571f014fc5426a30f9f4ba42cf341007e4dc2797eec75da16c36d" +checksum = "97c0552d7d2f270ca1fec64766617809aa82b86ad4424d8c31515ed79d2f121e" dependencies = [ "async-func", "clonelicious", @@ -726,7 +726,6 @@ name = "hyperlane_techempower" version = "0.0.1" dependencies = [ "hyperlane", - "num_cpus", "rand 0.9.0", "serde", "sqlx", @@ -873,9 +872,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -930,9 +929,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" @@ -985,9 +984,9 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "miniz_oxide" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ "adler2", ] @@ -1274,9 +1273,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" +checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" dependencies = [ "bitflags", ] @@ -1329,9 +1328,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustix" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96" +checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" dependencies = [ "bitflags", "errno", @@ -1490,18 +1489,18 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" dependencies = [ "serde", ] [[package]] name = "socket2" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" dependencies = [ "libc", "windows-sys 0.52.0", @@ -1528,9 +1527,9 @@ dependencies = [ [[package]] name = "sqlx" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4410e73b3c0d8442c5f99b425d7a435b5ee0ae4167b3196771dd3f7a01be745f" +checksum = "14e22987355fbf8cfb813a0cf8cd97b1b4ec834b94dbd759a9e8679d41fabe83" dependencies = [ "sqlx-core", "sqlx-macros", @@ -1541,10 +1540,11 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a007b6936676aa9ab40207cde35daab0a04b823be8ae004368c0793b96a61e0" +checksum = "55c4720d7d4cd3d5b00f61d03751c685ad09c33ae8290c8a2c11335e0604300b" dependencies = [ + "base64", "bytes", "crc", "crossbeam-queue", @@ -1574,9 +1574,9 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3112e2ad78643fef903618d78cf0aec1cb3134b019730edb039b69eaf531f310" +checksum = "175147fcb75f353ac7675509bc58abb2cb291caf0fd24a3623b8f7e3eb0a754b" dependencies = [ "proc-macro2", "quote", @@ -1587,9 +1587,9 @@ dependencies = [ [[package]] name = "sqlx-macros-core" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e9f90acc5ab146a99bf5061a7eb4976b573f560bc898ef3bf8435448dd5e7ad" +checksum = "1cde983058e53bfa75998e1982086c5efe3c370f3250bf0357e344fa3352e32b" dependencies = [ "dotenvy", "either", @@ -1613,9 +1613,9 @@ dependencies = [ [[package]] name = "sqlx-mysql" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4560278f0e00ce64938540546f59f590d60beee33fffbd3b9cd47851e5fff233" +checksum = "847d2e5393a4f39e47e4f36cab419709bc2b83cbe4223c60e86e1471655be333" dependencies = [ "atoi", "base64", @@ -1655,9 +1655,9 @@ dependencies = [ [[package]] name = "sqlx-postgres" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5b98a57f363ed6764d5b3a12bfedf62f07aa16e1856a7ddc2a0bb190a959613" +checksum = "cc35947a541b9e0a2e3d85da444f1c4137c13040267141b208395a0d0ca4659f" dependencies = [ "atoi", "base64", @@ -1692,9 +1692,9 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f85ca71d3a5b24e64e1d08dd8fe36c6c95c339a896cc33068148906784620540" +checksum = "6c48291dac4e5ed32da0927a0b981788be65674aeb62666d19873ab4289febde" dependencies = [ "atoi", "flume", @@ -1709,6 +1709,7 @@ dependencies = [ "serde", "serde_urlencoded", "sqlx-core", + "thiserror 2.0.12", "tracing", "url", ] @@ -2268,9 +2269,9 @@ checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "xml-rs" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5b940ebc25896e71dd073bad2dbaa2abfe97b0a391415e22ad1326d9c54e3c4" +checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" [[package]] name = "yoke" diff --git a/frameworks/Rust/hyperlane/Cargo.toml b/frameworks/Rust/hyperlane/Cargo.toml index 16838acbca6..f274f2108d5 100644 --- a/frameworks/Rust/hyperlane/Cargo.toml +++ b/frameworks/Rust/hyperlane/Cargo.toml @@ -18,8 +18,7 @@ exclude = [ ] [dependencies] -hyperlane = "4.84.0" -num_cpus = "1.16.0" +hyperlane = "4.86.0" rand = "0.9.0" serde = "1.0.219" sqlx = { version = "0.8.3", features = ["runtime-tokio", "postgres"] } diff --git a/frameworks/Rust/hyperlane/src/const.rs b/frameworks/Rust/hyperlane/src/const.rs new file mode 100644 index 00000000000..93728efd2e4 --- /dev/null +++ b/frameworks/Rust/hyperlane/src/const.rs @@ -0,0 +1,17 @@ +pub const RESPONSEDATA_STR: &str = "Hello, World!"; +pub const RESPONSEDATA_BIN: &[u8] = b"Hello, World!"; +pub const DATABASE_TYPE: &str = "postgres"; +pub const DATABASE_HOST: &str = "tfb-database"; +pub const DATABASE_USER_NAME: &str = "benchmarkdbuser"; +pub const DATABASE_USER_PASSWORD: &str = "benchmarkdbpass"; +pub const DATABASE_PORT: usize = 5_432; +pub const DATABASE_NAME: &str = "hello_world"; +pub const TABLE_NAME_WORLD: &str = "World"; +pub const TABLE_NAME_FORTUNE: &str = "Fortune"; +pub const ROW_LIMIT: i32 = 500; +pub const RANDOM_MAX: i32 = 10_000; +pub const RANDOM_MAX_ADD_ONE: u32 = 10_001; +pub const KEY_ID: &str = "id"; +pub const KEY_RANDOM_NUMBER: &str = "randomnumber"; +pub const KEY_MESSAGE: &str = "message"; +pub const DB_MAX_CONNECTIONS: u32 = 100; diff --git a/frameworks/Rust/hyperlane/src/constant.rs b/frameworks/Rust/hyperlane/src/constant.rs deleted file mode 100644 index 3c09d6f416a..00000000000 --- a/frameworks/Rust/hyperlane/src/constant.rs +++ /dev/null @@ -1,16 +0,0 @@ -pub static RESPONSEDATA_STR: &str = "Hello, World!"; -pub static RESPONSEDATA_BIN: &[u8] = b"Hello, World!"; -pub static DATABASE_TYPE: &str = "postgres"; -pub static DATABASE_HOST: &str = "tfb-database"; -pub static DATABASE_USER_NAME: &str = "benchmarkdbuser"; -pub static DATABASE_USER_PASSWORD: &str = "benchmarkdbpass"; -pub static DATABASE_PORT: usize = 5_432; -pub static DATABASE_NAME: &str = "hello_world"; -pub static TABLE_NAME_WORLD: &str = "World"; -pub static TABLE_NAME_FORTUNE: &str = "Fortune"; -pub static ROW_LIMIT: i32 = 500; -pub static RANDOM_MAX: i32 = 10_000; -pub static RANDOM_MAX_ADD_ONE: u32 = 10_001; -pub static KEY_ID: &str = "id"; -pub static KEY_RANDOM_NUMBER: &str = "randomnumber"; -pub static KEY_MESSAGE: &str = "message"; diff --git a/frameworks/Rust/hyperlane/src/db.rs b/frameworks/Rust/hyperlane/src/db.rs index 92d7253438d..bafba28ca6d 100644 --- a/frameworks/Rust/hyperlane/src/db.rs +++ b/frameworks/Rust/hyperlane/src/db.rs @@ -100,9 +100,9 @@ pub async fn connection_db() -> DbPoolConnection { DATABASE_NAME ), }; - let pool_size: u32 = num_cpus::get() as u32; + let pool_size: u32 = (get_thread_count() as u32).min(DB_MAX_CONNECTIONS); let pool: DbPoolConnection = PgPoolOptions::new() - .max_connections(100) + .max_connections(DB_MAX_CONNECTIONS) .min_connections(pool_size) .max_lifetime(None) .test_before_acquire(false) diff --git a/frameworks/Rust/hyperlane/src/main.rs b/frameworks/Rust/hyperlane/src/main.rs index 0b7ce0a26de..e4b739e7c6a 100644 --- a/frameworks/Rust/hyperlane/src/main.rs +++ b/frameworks/Rust/hyperlane/src/main.rs @@ -1,14 +1,13 @@ -pub(crate) mod constant; +pub(crate) mod r#const; pub(crate) mod db; pub(crate) mod lazy; pub(crate) mod request_middleware; -pub(crate) mod response_middleware; pub(crate) mod route; pub(crate) mod server; pub(crate) mod r#type; pub(crate) mod utils; -pub(crate) use constant::*; +pub(crate) use r#const::*; pub(crate) use db::*; pub(crate) use hyperlane::{ futures::{executor::block_on, future::join_all}, @@ -21,7 +20,6 @@ pub(crate) use hyperlane::{ pub(crate) use lazy::*; pub(crate) use rand::{Rng, SeedableRng, rng, rngs::SmallRng}; pub(crate) use request_middleware::*; -pub(crate) use response_middleware::*; pub(crate) use route::*; pub(crate) use server::*; pub(crate) use sqlx::{ diff --git a/frameworks/Rust/hyperlane/src/request_middleware.rs b/frameworks/Rust/hyperlane/src/request_middleware.rs index d2da9d540f9..592dbb89170 100644 --- a/frameworks/Rust/hyperlane/src/request_middleware.rs +++ b/frameworks/Rust/hyperlane/src/request_middleware.rs @@ -9,7 +9,5 @@ pub async fn request(ctx: Context) { .set_response_header(SERVER, HYPERLANE) .await .set_response_header(DATE, gmt()) - .await - .set_response_status_code(200) .await; } diff --git a/frameworks/Rust/hyperlane/src/response_middleware.rs b/frameworks/Rust/hyperlane/src/response_middleware.rs deleted file mode 100644 index 85e8f422ebf..00000000000 --- a/frameworks/Rust/hyperlane/src/response_middleware.rs +++ /dev/null @@ -1,5 +0,0 @@ -use crate::*; - -pub async fn response(ctx: Context) { - let _ = ctx.send().await; -} diff --git a/frameworks/Rust/hyperlane/src/route.rs b/frameworks/Rust/hyperlane/src/route.rs index 8ed6ec4e460..b92ae44b881 100644 --- a/frameworks/Rust/hyperlane/src/route.rs +++ b/frameworks/Rust/hyperlane/src/route.rs @@ -5,7 +5,7 @@ pub async fn json(ctx: Context) { "message": RESPONSEDATA_STR }); let _ = ctx - .set_response_body(serde_json::to_string(&json).unwrap_or_default()) + .send_response(200, serde_json::to_string(&json).unwrap_or_default()) .await; } @@ -13,7 +13,7 @@ pub async fn plaintext(ctx: Context) { let _ = ctx .set_response_header(CONTENT_TYPE, TEXT_PLAIN) .await - .set_response_body(RESPONSEDATA_BIN) + .send_response(200, RESPONSEDATA_BIN) .await; } @@ -21,7 +21,7 @@ pub async fn db(ctx: Context) { let db_connection: &DbPoolConnection = get_db_connection(); let query_row: QueryRow = random_world_row(db_connection).await; let _ = ctx - .set_response_body(serde_json::to_string(&query_row).unwrap_or_default()) + .send_response(200, serde_json::to_string(&query_row).unwrap_or_default()) .await; } @@ -36,7 +36,7 @@ pub async fn queries(ctx: Context) { let db_pool: &DbPoolConnection = get_db_connection(); let data: Vec = get_some_row_id(queries, db_pool).await; let _ = ctx - .set_response_body(serde_json::to_string(&data).unwrap_or_default()) + .send_response(200, serde_json::to_string(&data).unwrap_or_default()) .await; } @@ -56,9 +56,10 @@ pub async fn fortunes(ctx: Context) { )); fortunes_list.sort_by(|it, next| it.message.cmp(&next.message)); let res: String = FortunesTemplate::new(fortunes_list).to_string(); - ctx.set_response_header(CONTENT_TYPE, content_type_charset(TEXT_HTML, UTF8)) + let _ = ctx + .set_response_header(CONTENT_TYPE, content_type_charset(TEXT_HTML, UTF8)) .await - .set_response_body(res) + .send_response(200, res) .await; } @@ -72,7 +73,7 @@ pub async fn updates(ctx: Context) { .max(1); let res: Vec = update_world_rows(queries).await; let _ = ctx - .set_response_body(serde_json::to_string(&res).unwrap_or_default()) + .send_response(200, serde_json::to_string(&res).unwrap_or_default()) .await; } @@ -86,6 +87,6 @@ pub async fn cached_queries(ctx: Context) { .max(1); let res: Vec = CACHE.iter().take(count as usize).cloned().collect(); let _ = ctx - .set_response_body(serde_json::to_string(&res).unwrap_or_default()) + .send_response(200, serde_json::to_string(&res).unwrap_or_default()) .await; } diff --git a/frameworks/Rust/hyperlane/src/server.rs b/frameworks/Rust/hyperlane/src/server.rs index 72883143580..c26882a7ce5 100644 --- a/frameworks/Rust/hyperlane/src/server.rs +++ b/frameworks/Rust/hyperlane/src/server.rs @@ -3,8 +3,8 @@ use tokio::runtime::{Builder, Runtime}; fn runtime() -> Runtime { Builder::new_multi_thread() - .worker_threads(get_thread_count()) - .thread_stack_size(2097152) + .worker_threads(get_thread_count() >> 1) + .thread_stack_size(1_048_576) .max_blocking_threads(5120) .max_io_events_per_tick(5120) .enable_all() @@ -21,8 +21,9 @@ async fn init_server() { server.disable_log().await; server.disable_inner_log().await; server.disable_inner_print().await; - server.http_line_buffer_size(512).await; - server.websocket_buffer_size(512).await; + server.http_line_buffer_size(256).await; + server.websocket_buffer_size(256).await; + server.request_middleware(request).await; server.route("/plaintext", plaintext).await; server.route("/json", json).await; server.route("/cached-quer", cached_queries).await; @@ -30,8 +31,6 @@ async fn init_server() { server.route("/query", queries).await; server.route("/fortunes", fortunes).await; server.route("/upda", updates).await; - server.request_middleware(request).await; - server.response_middleware(response).await; server.listen().await.unwrap(); }