diff --git a/frameworks/Rust/hyperlane/Cargo.lock b/frameworks/Rust/hyperlane/Cargo.lock index 98d910ea035..f6b37ff672b 100644 --- a/frameworks/Rust/hyperlane/Cargo.lock +++ b/frameworks/Rust/hyperlane/Cargo.lock @@ -133,9 +133,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "4.0.2" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37" +checksum = "a334ef7c9e23abf0ce748e8cd309037da93e606ad52eb372e4ce327a0dcfbdfd" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -173,11 +173,11 @@ checksum = "fc3dfae702af156917c65f4ccc70687088331f0b694e5e687453e4d68a16b496" [[package]] name = "color-output" -version = "6.6.0" +version = "6.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d465b5dc60106412924964948f7e5c0c1f023e6b45fa451aad4110480bd750" +checksum = "47a70e27f954a060626fdba6829cdded6c3dae6376d0e03822363114aaead8a8" dependencies = [ - "hyperlane-time 0.4.0", + "hyperlane-time", ] [[package]] @@ -269,9 +269,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid", "pem-rfc7468", @@ -362,9 +362,9 @@ checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "file-operation" -version = "0.5.6" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef3359808cbde3797c90abf4faed2f559acc51b6cefb384583e5fe0e62945119" +checksum = "78548b84eac71fe0f185f2169fa960f65af6e49ae2b63fdb729e81cacdf7b5da" dependencies = [ "tokio", ] @@ -638,9 +638,9 @@ dependencies = [ [[package]] name = "http-compress" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce740ff69923dba33591c2c625bb49ccc098264c19e72d004b6fecca7c7d7d7" +checksum = "c5f7d507f95e723dd293f5c486554ab1e70692ee97c27fc4a493684f54dc6c9a" dependencies = [ "brotli", "flate2", @@ -649,15 +649,15 @@ dependencies = [ [[package]] name = "http-constant" -version = "1.42.0" +version = "1.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c978c76917568ef84ce5020d6b1fa49ce74a4dd65bc290b93b1355a81aebdb9e" +checksum = "1292cbdcf2588d15f8bf14cac381785c11ca7634d6a088cad9eebb5068d2652b" [[package]] name = "http-type" -version = "3.64.0" +version = "3.64.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228db23663f214e42497ed0fc66ddab4c7fea8039998823e49d516f559a92e5f" +checksum = "d2d8d89138b251e0a91cdaa261885bcfc959986cba2131d448bdc75f2e18c1d0" dependencies = [ "ahash", "dashmap", @@ -682,9 +682,9 @@ dependencies = [ [[package]] name = "hyperlane" -version = "4.86.0" +version = "4.87.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97c0552d7d2f270ca1fec64766617809aa82b86ad4424d8c31515ed79d2f121e" +checksum = "f0867d16811e67ce0cbf86a0c3fd7947934b1d53e2ee533f2d00e75f926636e8" dependencies = [ "async-func", "clonelicious", @@ -699,34 +699,28 @@ dependencies = [ [[package]] name = "hyperlane-log" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf0482aced2eb7960f268032c44327a3234eb3eea4ef6c80680e1ef83a94535" +checksum = "17a47938bb5388e2428ebbe02098c485c2a596b4aae4cc909320394dede527bb" dependencies = [ "file-operation", - "hyperlane-time 0.5.0", + "hyperlane-time", "lombok-macros", "tokio", ] [[package]] name = "hyperlane-time" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aa55a670a0db8677da642e02e3bd61d4fca3765b9d943f9429e4b0e5c5fd7e5" - -[[package]] -name = "hyperlane-time" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "075b6f8b97160e2af0a15d047f189c537939c824e9f96762dec226fd2f62a2ab" +checksum = "d0f69051b8978d37eb5a3d8f700a39159d40d7646f1aef8d2f3e441279f4dfa1" [[package]] name = "hyperlane_techempower" version = "0.0.1" dependencies = [ "hyperlane", - "rand 0.9.0", + "rand 0.9.1", "serde", "sqlx", ] @@ -907,9 +901,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.171" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libm" @@ -957,9 +951,9 @@ checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "lombok-macros" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c4d9a6dbaf4cdb37d7b148e86ca3aa688b499eff0fb44ea566d9770fb28451" +checksum = "3ffb76637e1a834f7ad93d96b8be0bcfa6673f08fdcab6c9fbeabc1cb0e8c379" dependencies = [ "proc-macro2", "quote", @@ -1168,9 +1162,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] @@ -1203,13 +1197,12 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", - "zerocopy 0.8.24", ] [[package]] @@ -1252,9 +1245,9 @@ dependencies = [ [[package]] name = "recoverable-spawn" -version = "3.7.1" +version = "3.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcc61deaa201c349799f432212c2fdbd81f0587ba6cd10eed29c86cf207fe477" +checksum = "57702670d1a6eb7e02bbd6c2fafe3587c42eb2ce4e5012ae8632171aa58c21b6" dependencies = [ "once_cell", "tokio", @@ -1262,9 +1255,9 @@ dependencies = [ [[package]] name = "recoverable-thread-pool" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c492038cf040045396f083da49acefb762bb82739431e54dfd224a18d34bbb9" +checksum = "03a8924916abfed76681374565d505b59b2c8bc17f03e3693be2243c324433ed" dependencies = [ "lombok-macros", "recoverable-spawn", @@ -1409,9 +1402,9 @@ dependencies = [ [[package]] name = "server-manager" -version = "3.2.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91c4f62e3f523a86b32faa645e4798300df473eab061651af180abbf4c7bb0e" +checksum = "7be400c8b4c701205cf9415f5463845319fbaeea0964750cb94f830224145d86" dependencies = [ "tokio", ] @@ -1440,9 +1433,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "c28b4eafe8a2d82f83559ef5941afff1ccba3da8e375c8f148efd75df181bf4f" dependencies = [ "libc", ] @@ -1459,9 +1452,9 @@ dependencies = [ [[package]] name = "simd-json" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10b5602e4f1f7d358956f94cac1eff59220f34cf9e26d49f5fde5acef851cbed" +checksum = "c962f626b54771990066e5435ec8331d1462576cd2d1e62f24076ae014f92112" dependencies = [ "getrandom 0.3.2", "halfbrown", @@ -1527,9 +1520,9 @@ dependencies = [ [[package]] name = "sqlx" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14e22987355fbf8cfb813a0cf8cd97b1b4ec834b94dbd759a9e8679d41fabe83" +checksum = "f3c3a85280daca669cfd3bcb68a337882a8bc57ec882f72c5d13a430613a738e" dependencies = [ "sqlx-core", "sqlx-macros", @@ -1540,9 +1533,9 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55c4720d7d4cd3d5b00f61d03751c685ad09c33ae8290c8a2c11335e0604300b" +checksum = "f743f2a3cea30a58cd479013f75550e879009e3a02f616f18ca699335aa248c3" dependencies = [ "base64", "bytes", @@ -1574,9 +1567,9 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175147fcb75f353ac7675509bc58abb2cb291caf0fd24a3623b8f7e3eb0a754b" +checksum = "7f4200e0fde19834956d4252347c12a083bdcb237d7a1a1446bffd8768417dce" dependencies = [ "proc-macro2", "quote", @@ -1587,9 +1580,9 @@ dependencies = [ [[package]] name = "sqlx-macros-core" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cde983058e53bfa75998e1982086c5efe3c370f3250bf0357e344fa3352e32b" +checksum = "882ceaa29cade31beca7129b6beeb05737f44f82dbe2a9806ecea5a7093d00b7" dependencies = [ "dotenvy", "either", @@ -1613,9 +1606,9 @@ dependencies = [ [[package]] name = "sqlx-mysql" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "847d2e5393a4f39e47e4f36cab419709bc2b83cbe4223c60e86e1471655be333" +checksum = "0afdd3aa7a629683c2d750c2df343025545087081ab5942593a5288855b1b7a7" dependencies = [ "atoi", "base64", @@ -1655,9 +1648,9 @@ dependencies = [ [[package]] name = "sqlx-postgres" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc35947a541b9e0a2e3d85da444f1c4137c13040267141b208395a0d0ca4659f" +checksum = "a0bedbe1bbb5e2615ef347a5e9d8cd7680fb63e77d9dafc0f29be15e53f1ebe6" dependencies = [ "atoi", "base64", @@ -1692,9 +1685,9 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c48291dac4e5ed32da0927a0b981788be65674aeb62666d19873ab4289febde" +checksum = "c26083e9a520e8eb87a06b12347679b142dc2ea29e6e409f805644a7a979a5bc" dependencies = [ "atoi", "flume", diff --git a/frameworks/Rust/hyperlane/Cargo.toml b/frameworks/Rust/hyperlane/Cargo.toml index f274f2108d5..9e013fda2da 100644 --- a/frameworks/Rust/hyperlane/Cargo.toml +++ b/frameworks/Rust/hyperlane/Cargo.toml @@ -18,10 +18,10 @@ exclude = [ ] [dependencies] -hyperlane = "4.86.0" -rand = "0.9.0" +hyperlane = "4.87.3" +rand = "0.9.1" serde = "1.0.219" -sqlx = { version = "0.8.3", features = ["runtime-tokio", "postgres"] } +sqlx = { version = "0.8.5", features = ["runtime-tokio", "postgres"] } [profile.dev] incremental = false @@ -43,3 +43,10 @@ strip = "debuginfo" [features] dev = [] +json = [] +plaintext = [] +fortunes = [] +db = [] +query = [] +update = [] +cached_query = [] diff --git a/frameworks/Rust/hyperlane/benchmark_config.json b/frameworks/Rust/hyperlane/benchmark_config.json index 1f810752e18..7864eb27b08 100644 --- a/frameworks/Rust/hyperlane/benchmark_config.json +++ b/frameworks/Rust/hyperlane/benchmark_config.json @@ -2,14 +2,104 @@ "framework": "hyperlane", "tests": [ { - "default": { - "dockerfile": "hyperlane.dockerfile", + "json": { + "dockerfile": "hyperlane.json.dockerfile", "json_url": "/json", + "port": 8080, + "approach": "Realistic", + "classification": "Platform", + "database": "Postgres", + "framework": "hyperlane", + "language": "Rust", + "orm": "raw", + "platform": "Rust", + "webserver": "hyperlane", + "os": "Linux", + "database_os": "Linux", + "display_name": "hyperlane" + }, + "plaintext": { + "dockerfile": "hyperlane.plaintext.dockerfile", "plaintext_url": "/plaintext", + "port": 8080, + "approach": "Realistic", + "classification": "Platform", + "database": "Postgres", + "framework": "hyperlane", + "language": "Rust", + "orm": "raw", + "platform": "Rust", + "webserver": "hyperlane", + "os": "Linux", + "database_os": "Linux", + "display_name": "hyperlane" + }, + "fortunes": { + "dockerfile": "hyperlane.fortunes.dockerfile", "fortune_url": "/fortunes", + "port": 8080, + "approach": "Realistic", + "classification": "Platform", + "database": "Postgres", + "framework": "hyperlane", + "language": "Rust", + "orm": "raw", + "platform": "Rust", + "webserver": "hyperlane", + "os": "Linux", + "database_os": "Linux", + "display_name": "hyperlane" + }, + "db": { + "dockerfile": "hyperlane.db.dockerfile", "db_url": "/db", + "port": 8080, + "approach": "Realistic", + "classification": "Platform", + "database": "Postgres", + "framework": "hyperlane", + "language": "Rust", + "orm": "raw", + "platform": "Rust", + "webserver": "hyperlane", + "os": "Linux", + "database_os": "Linux", + "display_name": "hyperlane" + }, + "query": { + "dockerfile": "hyperlane.query.dockerfile", "query_url": "/query?q=", + "port": 8080, + "approach": "Realistic", + "classification": "Platform", + "database": "Postgres", + "framework": "hyperlane", + "language": "Rust", + "orm": "raw", + "platform": "Rust", + "webserver": "hyperlane", + "os": "Linux", + "database_os": "Linux", + "display_name": "hyperlane" + }, + "update": { + "dockerfile": "hyperlane.update.dockerfile", "update_url": "/upda?q=", + "port": 8080, + "approach": "Realistic", + "classification": "Platform", + "database": "Postgres", + "framework": "hyperlane", + "language": "Rust", + "orm": "raw", + "platform": "Rust", + "webserver": "hyperlane", + "os": "Linux", + "database_os": "Linux", + "display_name": "hyperlane" + }, + "cached_query": { + "dockerfile": "hyperlane.cached_query.dockerfile", "cached_query_url": "/cached-quer?c=", "port": 8080, "approach": "Realistic", diff --git a/frameworks/Rust/hyperlane/hyperlane.cached_query.dockerfile b/frameworks/Rust/hyperlane/hyperlane.cached_query.dockerfile new file mode 100644 index 00000000000..d90fbed9fc8 --- /dev/null +++ b/frameworks/Rust/hyperlane/hyperlane.cached_query.dockerfile @@ -0,0 +1,15 @@ +FROM rust:1.85 + +RUN apt-get update -yqq && apt-get install -yqq cmake g++ binutils lld + +ENV POSTGRES_URL=postgres://benchmarkdbuser:benchmarkdbpass@tfb-database:5432/hello_world + +ADD ./ /hyperlane_techempower +WORKDIR /hyperlane_techempower + +RUN cargo clean +RUN RUSTFLAGS="-C target-cpu=native -C link-arg=-fuse-ld=lld" cargo build --release --features cached_query + +EXPOSE 8080 + +CMD ./target/release/hyperlane_techempower diff --git a/frameworks/Rust/hyperlane/hyperlane.dockerfile b/frameworks/Rust/hyperlane/hyperlane.db.dockerfile similarity index 91% rename from frameworks/Rust/hyperlane/hyperlane.dockerfile rename to frameworks/Rust/hyperlane/hyperlane.db.dockerfile index d9bd815fd04..632f725fc54 100644 --- a/frameworks/Rust/hyperlane/hyperlane.dockerfile +++ b/frameworks/Rust/hyperlane/hyperlane.db.dockerfile @@ -8,7 +8,7 @@ ADD ./ /hyperlane_techempower WORKDIR /hyperlane_techempower RUN cargo clean -RUN RUSTFLAGS="-C target-cpu=native -C link-arg=-fuse-ld=lld" cargo build --release +RUN RUSTFLAGS="-C target-cpu=native -C link-arg=-fuse-ld=lld" cargo build --release --features db EXPOSE 8080 diff --git a/frameworks/Rust/hyperlane/hyperlane.fortunes.dockerfile b/frameworks/Rust/hyperlane/hyperlane.fortunes.dockerfile new file mode 100644 index 00000000000..6c17364aab5 --- /dev/null +++ b/frameworks/Rust/hyperlane/hyperlane.fortunes.dockerfile @@ -0,0 +1,15 @@ +FROM rust:1.85 + +RUN apt-get update -yqq && apt-get install -yqq cmake g++ binutils lld + +ENV POSTGRES_URL=postgres://benchmarkdbuser:benchmarkdbpass@tfb-database:5432/hello_world + +ADD ./ /hyperlane_techempower +WORKDIR /hyperlane_techempower + +RUN cargo clean +RUN RUSTFLAGS="-C target-cpu=native -C link-arg=-fuse-ld=lld" cargo build --release --features fortunes + +EXPOSE 8080 + +CMD ./target/release/hyperlane_techempower diff --git a/frameworks/Rust/hyperlane/hyperlane.json.dockerfile b/frameworks/Rust/hyperlane/hyperlane.json.dockerfile new file mode 100644 index 00000000000..225112b5b38 --- /dev/null +++ b/frameworks/Rust/hyperlane/hyperlane.json.dockerfile @@ -0,0 +1,15 @@ +FROM rust:1.85 + +RUN apt-get update -yqq && apt-get install -yqq cmake g++ binutils lld + +ENV POSTGRES_URL=postgres://benchmarkdbuser:benchmarkdbpass@tfb-database:5432/hello_world + +ADD ./ /hyperlane_techempower +WORKDIR /hyperlane_techempower + +RUN cargo clean +RUN RUSTFLAGS="-C target-cpu=native -C link-arg=-fuse-ld=lld" cargo build --release --features json + +EXPOSE 8080 + +CMD ./target/release/hyperlane_techempower diff --git a/frameworks/Rust/hyperlane/hyperlane.plaintext.dockerfile b/frameworks/Rust/hyperlane/hyperlane.plaintext.dockerfile new file mode 100644 index 00000000000..f2620d45892 --- /dev/null +++ b/frameworks/Rust/hyperlane/hyperlane.plaintext.dockerfile @@ -0,0 +1,15 @@ +FROM rust:1.85 + +RUN apt-get update -yqq && apt-get install -yqq cmake g++ binutils lld + +ENV POSTGRES_URL=postgres://benchmarkdbuser:benchmarkdbpass@tfb-database:5432/hello_world + +ADD ./ /hyperlane_techempower +WORKDIR /hyperlane_techempower + +RUN cargo clean +RUN RUSTFLAGS="-C target-cpu=native -C link-arg=-fuse-ld=lld" cargo build --release --features plaintext + +EXPOSE 8080 + +CMD ./target/release/hyperlane_techempower diff --git a/frameworks/Rust/hyperlane/hyperlane.query.dockerfile b/frameworks/Rust/hyperlane/hyperlane.query.dockerfile new file mode 100644 index 00000000000..04463e5b6dd --- /dev/null +++ b/frameworks/Rust/hyperlane/hyperlane.query.dockerfile @@ -0,0 +1,15 @@ +FROM rust:1.85 + +RUN apt-get update -yqq && apt-get install -yqq cmake g++ binutils lld + +ENV POSTGRES_URL=postgres://benchmarkdbuser:benchmarkdbpass@tfb-database:5432/hello_world + +ADD ./ /hyperlane_techempower +WORKDIR /hyperlane_techempower + +RUN cargo clean +RUN RUSTFLAGS="-C target-cpu=native -C link-arg=-fuse-ld=lld" cargo build --release --features query + +EXPOSE 8080 + +CMD ./target/release/hyperlane_techempower diff --git a/frameworks/Rust/hyperlane/hyperlane.update.dockerfile b/frameworks/Rust/hyperlane/hyperlane.update.dockerfile new file mode 100644 index 00000000000..c265407a1ff --- /dev/null +++ b/frameworks/Rust/hyperlane/hyperlane.update.dockerfile @@ -0,0 +1,15 @@ +FROM rust:1.85 + +RUN apt-get update -yqq && apt-get install -yqq cmake g++ binutils lld + +ENV POSTGRES_URL=postgres://benchmarkdbuser:benchmarkdbpass@tfb-database:5432/hello_world + +ADD ./ /hyperlane_techempower +WORKDIR /hyperlane_techempower + +RUN cargo clean +RUN RUSTFLAGS="-C target-cpu=native -C link-arg=-fuse-ld=lld" cargo build --release --features update + +EXPOSE 8080 + +CMD ./target/release/hyperlane_techempower diff --git a/frameworks/Rust/hyperlane/src/db.rs b/frameworks/Rust/hyperlane/src/db.rs index bafba28ca6d..379645fe5e5 100644 --- a/frameworks/Rust/hyperlane/src/db.rs +++ b/frameworks/Rust/hyperlane/src/db.rs @@ -119,9 +119,13 @@ pub async fn get_update_data( let db_pool: &DbPoolConnection = get_db_connection(); let mut query_res_list: Vec = Vec::with_capacity(limit as usize); let rows: Vec = get_some_row_id(limit, db_pool).await; - let mut sql: String = format!("UPDATE {} SET randomNumber = CASE id ", TABLE_NAME_WORLD); + let mut sql: String = String::with_capacity(rows.len() * 32); + sql.push_str(&format!( + "UPDATE {} SET randomNumber = CASE id ", + TABLE_NAME_WORLD + )); let mut id_list: Vec = Vec::with_capacity(rows.len()); - let mut value_list: Vec = Vec::with_capacity(rows.len() * 2); + let mut value_list: Vec = Vec::with_capacity(rows.len()); let mut random_numbers: Vec = Vec::with_capacity(rows.len()); for (i, row) in rows.iter().enumerate() { let new_random_number: i32 = get_random_id() as i32; @@ -131,10 +135,8 @@ pub async fn get_update_data( query_res_list.push(QueryRow::new(row.id, new_random_number)); } sql.push_str(&value_list.join(" ")); - let id_params: String = id_list - .iter() - .enumerate() - .map(|(i, _)| format!("${}", (rows.len() * 2 + 1) + i)) + let id_params: String = (0..rows.len()) + .map(|i| format!("${}", (rows.len() * 2 + 1) + i)) .collect::>() .join(","); sql.push_str(&format!( @@ -174,7 +176,7 @@ pub async fn query_world_row(db_pool: &DbPoolConnection, id: Queries) -> QueryRo pub async fn update_world_rows(limit: Queries) -> Vec { let db_pool: &DbPoolConnection = get_db_connection(); let (sql, data, id_list, random_numbers) = get_update_data(limit).await; - let mut query_builder: query::Query<'_, Postgres, postgres::PgArguments> = query(&sql); + let mut query_builder = query(&sql); for (id, random_number) in id_list.iter().zip(random_numbers.iter()) { query_builder = query_builder.bind(id).bind(random_number); } @@ -194,18 +196,18 @@ pub async fn all_world_row() -> Vec { pub async fn get_some_row_id(limit: Queries, db_pool: &DbPoolConnection) -> Vec { let semaphore: Arc = Arc::new(Semaphore::new(32)); - let mut tasks: Vec> = Vec::with_capacity(limit as usize); - for _ in 0..limit { - let _ = semaphore.clone().acquire_owned().await.map(|permit| { - let db_pool: DbPoolConnection = db_pool.clone(); - tasks.push(spawn(async move { + let tasks: Vec<_> = (0..limit) + .map(|_| { + let semaphore: Arc = semaphore.clone(); + let db_pool: Pool = db_pool.clone(); + spawn(async move { + let _permit: Result = + semaphore.acquire_owned().await; let id: i32 = get_random_id(); - let res: QueryRow = query_world_row(&db_pool, id).await; - drop(permit); - res - })); - }); - } + query_world_row(&db_pool, id).await + }) + }) + .collect(); join_all(tasks) .await .into_iter() diff --git a/frameworks/Rust/hyperlane/src/main.rs b/frameworks/Rust/hyperlane/src/main.rs index e4b739e7c6a..e6c40b0d9e0 100644 --- a/frameworks/Rust/hyperlane/src/main.rs +++ b/frameworks/Rust/hyperlane/src/main.rs @@ -1,3 +1,6 @@ +#![allow(dead_code)] +#![allow(unused_imports)] + pub(crate) mod r#const; pub(crate) mod db; pub(crate) mod lazy; @@ -14,13 +17,15 @@ pub(crate) use hyperlane::{ once_cell::sync::Lazy, serde::*, serde_json::{Value, json}, - tokio::{spawn, sync::Semaphore, task::JoinHandle}, + tokio::{ + spawn, + sync::{AcquireError, OwnedSemaphorePermit, Semaphore}, + task::JoinHandle, + }, *, }; pub(crate) use lazy::*; pub(crate) use rand::{Rng, SeedableRng, rng, rngs::SmallRng}; -pub(crate) use request_middleware::*; -pub(crate) use route::*; pub(crate) use server::*; pub(crate) use sqlx::{ postgres::{PgPoolOptions, PgRow}, diff --git a/frameworks/Rust/hyperlane/src/request_middleware.rs b/frameworks/Rust/hyperlane/src/request_middleware.rs index 592dbb89170..7e7eb1cd7c1 100644 --- a/frameworks/Rust/hyperlane/src/request_middleware.rs +++ b/frameworks/Rust/hyperlane/src/request_middleware.rs @@ -1,13 +1,30 @@ use crate::*; pub async fn request(ctx: Context) { - let _ = ctx - .set_response_header(CONNECTION, CONNECTION_KEEP_ALIVE) - .await - .set_response_header(CONTENT_TYPE, APPLICATION_JSON) + ctx.set_response_header(CONNECTION, CONNECTION_KEEP_ALIVE) .await .set_response_header(SERVER, HYPERLANE) .await .set_response_header(DATE, gmt()) .await; + #[cfg(feature = "plaintext")] + { + ctx.set_response_header(CONTENT_TYPE, TEXT_PLAIN).await; + } + #[cfg(feature = "fortunes")] + { + ctx.set_response_header(CONTENT_TYPE, content_type_charset(TEXT_HTML, UTF8)) + .await; + } + #[cfg(any( + feature = "json", + feature = "db", + feature = "query", + feature = "update", + feature = "cached_query" + ))] + { + ctx.set_response_header(CONTENT_TYPE, APPLICATION_JSON) + .await; + } } diff --git a/frameworks/Rust/hyperlane/src/route.rs b/frameworks/Rust/hyperlane/src/route.rs index b92ae44b881..74f346b9ea7 100644 --- a/frameworks/Rust/hyperlane/src/route.rs +++ b/frameworks/Rust/hyperlane/src/route.rs @@ -10,11 +10,7 @@ pub async fn json(ctx: Context) { } pub async fn plaintext(ctx: Context) { - let _ = ctx - .set_response_header(CONTENT_TYPE, TEXT_PLAIN) - .await - .send_response(200, RESPONSEDATA_BIN) - .await; + let _ = ctx.send_response(200, RESPONSEDATA_BIN).await; } pub async fn db(ctx: Context) { @@ -25,7 +21,7 @@ pub async fn db(ctx: Context) { .await; } -pub async fn queries(ctx: Context) { +pub async fn query(ctx: Context) { let queries: Queries = ctx .get_request_query("q") .await @@ -56,14 +52,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(); - let _ = ctx - .set_response_header(CONTENT_TYPE, content_type_charset(TEXT_HTML, UTF8)) - .await - .send_response(200, res) - .await; + let _ = ctx.send_response(200, res).await; } -pub async fn updates(ctx: Context) { +pub async fn update(ctx: Context) { let queries: Queries = ctx .get_request_query("q") .await @@ -77,7 +69,7 @@ pub async fn updates(ctx: Context) { .await; } -pub async fn cached_queries(ctx: Context) { +pub async fn cached_query(ctx: Context) { let count: Queries = ctx .get_request_query("c") .await diff --git a/frameworks/Rust/hyperlane/src/server.rs b/frameworks/Rust/hyperlane/src/server.rs index c26882a7ce5..e3402d638c5 100644 --- a/frameworks/Rust/hyperlane/src/server.rs +++ b/frameworks/Rust/hyperlane/src/server.rs @@ -3,6 +3,8 @@ use tokio::runtime::{Builder, Runtime}; fn runtime() -> Runtime { Builder::new_multi_thread() + .worker_threads(get_thread_count() >> 1) + .thread_stack_size(1_048_576) .worker_threads(get_thread_count() >> 1) .thread_stack_size(1_048_576) .max_blocking_threads(5120) @@ -23,18 +25,33 @@ async fn init_server() { server.disable_inner_print().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; - server.route("/db", db).await; - server.route("/query", queries).await; - server.route("/fortunes", fortunes).await; - server.route("/upda", updates).await; + server.request_middleware(request_middleware::request).await; + #[cfg(any(feature = "dev", feature = "plaintext"))] + server.route("/plaintext", route::plaintext).await; + #[cfg(any(feature = "dev", feature = "json"))] + server.route("/json", route::json).await; + #[cfg(any(feature = "dev", feature = "cached_query"))] + server.route("/cached-quer", route::cached_query).await; + #[cfg(any(feature = "dev", feature = "db"))] + server.route("/db", route::db).await; + #[cfg(any(feature = "dev", feature = "query"))] + server.route("/query", route::query).await; + #[cfg(any(feature = "dev", feature = "fortunes"))] + server.route("/fortunes", route::fortunes).await; + #[cfg(any(feature = "dev", feature = "update"))] + server.route("/upda", route::update).await; server.listen().await.unwrap(); } async fn init() { + #[cfg(any( + feature = "dev", + feature = "db", + feature = "query", + feature = "update", + feature = "fortunes", + feature = "cached_query", + ))] init_db().await; init_server().await; }