Browse Source

Upgrade hyperlane (#9843)

* feat: update & fortune

* feat: randomNumber

* feat: max row 500

* feat: update

* feat: Fortune

* feat: fortunes

* feat: update

* feat: update

* feat: update

* feat: update

* feat: fortunes

* feat: fortunes

* feat: fortunes

* feat: fortunes

* feat: fortunes

* feat: fortunes

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: cache

* feat: cache

* feat: config

* feat: config

* feat: config

* feat: v4.36.1

* docs: readme

* feat: remove dyn

* docs: readme

* feat: lock

* feat: lock

* feat: lock

* feat: lock

* feat: db pool

* feat: db pool

* feat: lock

* feat: lock

* feat: db

* feat: db

* feat: db

* feat: db

* feat: db

* feat: db

* feat: db

* feat: db

* feat: rand

* feat: rand

* feat: rand

* feat: rand

* feat: rand

* feat: port

* feat: port

* feat: port

* feat: db

* feat: db

* feat: db

* feat: lock

* feat: lock

* feat: v4.41.0

* feat: v4.42.0

* Merge remote-tracking branch 'upstream/master'

* Merge remote-tracking branch 'upstream/master'

* feat: inline

* feat: dockerfile

* feat: v4.52.1

* feat: remove key

* remove: log

* remove: log

* feat: async

* remove: empty loop

* feat: utf8

* change: pool_size

* remove: utf8

* feat: log

* feat: log

* feat: v3.14.1

* feat: 4.56.3

* feat: 4.56.4

* feat: 4.56.5

* feat:  rename

* Merge branch 'master' of github.com:TechEmpower/FrameworkBenchmarks

* feat: speed

* feat: speed

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* feat: runtime

* feat: runtime

* feat: runtime

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* lock: toml

* feat: update

* Merge remote-tracking branch 'upstream/master'

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* Merge remote-tracking branch 'upstream/master'
尤雨东 3 months ago
parent
commit
49e93a1fe5

+ 55 - 62
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",

+ 10 - 3
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 = []

+ 92 - 2
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",

+ 15 - 0
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

+ 1 - 1
frameworks/Rust/hyperlane/hyperlane.dockerfile → 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
 

+ 15 - 0
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

+ 15 - 0
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

+ 15 - 0
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

+ 15 - 0
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

+ 15 - 0
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

+ 20 - 18
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<QueryRow> = Vec::with_capacity(limit as usize);
     let rows: Vec<QueryRow> = 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<i32> = Vec::with_capacity(rows.len());
-    let mut value_list: Vec<String> = Vec::with_capacity(rows.len() * 2);
+    let mut value_list: Vec<String> = Vec::with_capacity(rows.len());
     let mut random_numbers: Vec<i32> = 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::<Vec<_>>()
         .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<QueryRow> {
     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<PgRow> {
 
 pub async fn get_some_row_id(limit: Queries, db_pool: &DbPoolConnection) -> Vec<QueryRow> {
     let semaphore: Arc<Semaphore> = Arc::new(Semaphore::new(32));
-    let mut tasks: Vec<JoinHandle<QueryRow>> = 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> = semaphore.clone();
+            let db_pool: Pool<Postgres> = db_pool.clone();
+            spawn(async move {
+                let _permit: Result<OwnedSemaphorePermit, AcquireError> =
+                    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()

+ 8 - 3
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},

+ 21 - 4
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;
+    }
 }

+ 5 - 13
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

+ 25 - 8
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;
 }