diff --git a/frameworks/Rust/hyperlane/.gitignore b/frameworks/Rust/hyperlane/.gitignore index c0ed7d09f10..791af9f28cb 100644 --- a/frameworks/Rust/hyperlane/.gitignore +++ b/frameworks/Rust/hyperlane/.gitignore @@ -1,2 +1,2 @@ /target -/logs \ No newline at end of file +/logs diff --git a/frameworks/Rust/hyperlane/Cargo.lock b/frameworks/Rust/hyperlane/Cargo.lock index 536749cba52..73d56f9e079 100644 --- a/frameworks/Rust/hyperlane/Cargo.lock +++ b/frameworks/Rust/hyperlane/Cargo.lock @@ -187,9 +187,9 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -219,20 +219,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "dashmap" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", -] - [[package]] name = "der" version = "0.7.10" @@ -301,9 +287,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" dependencies = [ "concurrent-queue", "parking", @@ -485,12 +471,6 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - [[package]] name = "hashbrown" version = "0.15.4" @@ -508,7 +488,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.15.4", + "hashbrown", ] [[package]] @@ -558,9 +538,9 @@ dependencies = [ [[package]] name = "http-compress" -version = "2.13.7" +version = "2.16.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e96d49fe9cb2263dd459ed72df6206870f0c0c6befa0bbc79227771c630a4c" +checksum = "757db00ff4cb103647c32497514aceeb685bc2686d84c8707124f1c8eeaac2e3" dependencies = [ "brotli", "flate2", @@ -569,17 +549,16 @@ dependencies = [ [[package]] name = "http-constant" -version = "1.51.1" +version = "1.59.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bcafcd7f8e3b8801c795910e390f461c765065502b294decccb7715d20c3bfa" +checksum = "8d68fc1cd9b672083471b783a0f17f4df5eb470f79a2685b6f55e631618bcd2b" [[package]] name = "http-type" -version = "4.27.3" +version = "4.55.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61b7ebec2f82af03e6e15005e0244ad2e08df1fffccafee3493e70222fa11a10" +checksum = "06966dd52009ec38901b439b9060dd9ed0ead6d1204f214fa9a933ae3cb85328" dependencies = [ - "dashmap", "hex", "http-compress", "http-constant", @@ -594,21 +573,22 @@ dependencies = [ [[package]] name = "hyperlane" -version = "5.40.1" +version = "6.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21630ec0514aff461fbd197da6d8436649559f5508806e80c5ddc0ef34287f82" +checksum = "8b7977949b728631efd15f05ac20930c3d4881cab8ec1ad7d723a99431a21443" dependencies = [ "http-type", "lombok-macros", "regex", "serde", + "serde_json", ] [[package]] name = "hyperlane-time" -version = "0.5.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d7e07007bd67be0c3f07646066d9300ea999fb7d3371610354393101ac2db2c" +checksum = "ed590017e6b8cd1c4f25cf6b5beda4efd3c5a76842c8782dca4fe650552a6c21" [[package]] name = "hyperlane_techempower" @@ -619,7 +599,7 @@ dependencies = [ "hyperlane-time", "num_cpus", "once_cell", - "rand 0.9.1", + "rand 0.9.2", "serde", "serde_json", "sqlx", @@ -734,19 +714,19 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown", ] [[package]] name = "io-uring" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" dependencies = [ "bitflags", "cfg-if", @@ -814,9 +794,9 @@ checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "lombok-macros" -version = "1.12.2" +version = "1.13.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9490d57fd90a670d464a8a464e65a5822d1f34badd8ada1c53c0572f98e10e" +checksum = "7647fa75302b5ffffa7ff8bdb78220beb7da2be7eaf3a939453012f25931d749" dependencies = [ "proc-macro2", "quote", @@ -1069,9 +1049,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", @@ -1117,9 +1097,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.13" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ "bitflags", ] @@ -1175,9 +1155,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.25" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "ryu" @@ -1225,9 +1205,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.142" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" dependencies = [ "itoa", "memchr", @@ -1271,9 +1251,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.5" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] @@ -1305,12 +1285,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.10" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1361,7 +1341,7 @@ dependencies = [ "futures-intrusive", "futures-io", "futures-util", - "hashbrown 0.15.4", + "hashbrown", "hashlink", "indexmap", "log", @@ -1632,9 +1612,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.46.1" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes", @@ -1647,7 +1627,7 @@ dependencies = [ "slab", "socket2", "tokio-macros", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1710,7 +1690,7 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b907da542cbced5261bd3256de1b3a1bf340a3d37f93425a07362a1d687de56" dependencies = [ - "rand 0.9.1", + "rand 0.9.2", ] [[package]] @@ -1815,15 +1795,6 @@ dependencies = [ "windows-targets 0.48.5", ] -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-sys" version = "0.59.0" @@ -1971,9 +1942,9 @@ checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "xml-rs" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" +checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" [[package]] name = "yoke" @@ -2059,9 +2030,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", diff --git a/frameworks/Rust/hyperlane/Cargo.toml b/frameworks/Rust/hyperlane/Cargo.toml index 96d2bc484a9..afccb3c2ee0 100644 --- a/frameworks/Rust/hyperlane/Cargo.toml +++ b/frameworks/Rust/hyperlane/Cargo.toml @@ -1,12 +1,13 @@ [package] name = "hyperlane_techempower" version = "0.1.0" +readme = "README.md" edition = "2024" authors = ["root@ltpp.vip"] license = "MIT" -description = """Hyperlane is a lightweight and high-performance Rust HTTP server library designed to simplify network service development. It supports HTTP request parsing, response building, and TCP communication, making it ideal for building modern web services. Additionally, it provides support for request and response middleware, WebSocket, and Server-Sent Events (SSE), enabling flexible and efficient real-time communication.""" +description = """A lightweight, high-performance, and cross-platform Rust HTTP server library built on Tokio. It simplifies modern web service development by providing built-in support for middleware, WebSocket, Server-Sent Events (SSE), and raw TCP communication. With a unified and ergonomic API across Windows, Linux, and MacOS, it enables developers to build robust, scalable, and event-driven network applications with minimal overhead and maximum flexibility.""" keywords = ["http", "request", "response", "tcp", "redirect"] -repository = "https://github.com/eastspire/hyperlane.git" +repository = "https://github.com/hyperlane-dev/hyperlane.git" categories = ["network-programming", "web-programming"] exclude = [ "target", @@ -19,13 +20,13 @@ exclude = [ [dependencies] futures = "0.3.31" -hyperlane = "5.40.1" -hyperlane-time = "0.5.6" +hyperlane = "6.6.0" +hyperlane-time = "0.7.7" num_cpus = "1.17.0" once_cell = "1.21.3" -rand = "0.9.1" +rand = "0.9.2" serde = "1.0.219" -serde_json = "1.0.140" +serde_json = "1.0.142" sqlx = { version = "0.8.6", features = ["runtime-tokio", "postgres"] } [profile.dev] @@ -48,10 +49,3 @@ strip = "debuginfo" [features] dev = [] -json = [] -plaintext = [] -fortunes = [] -db = [] -query = [] -update = [] -cached_query = [] diff --git a/frameworks/Rust/hyperlane/README.md b/frameworks/Rust/hyperlane/README.md index d2b95b513b9..8afc763acc2 100644 --- a/frameworks/Rust/hyperlane/README.md +++ b/frameworks/Rust/hyperlane/README.md @@ -1,8 +1,8 @@ -# [hyperlane](https://github.com/eastspire/hyperlane) web framework +# [hyperlane](https://github.com/hyperlane-dev/hyperlane) web framework ## Description -> Hyperlane is a lightweight and high-performance Rust HTTP server library designed to simplify network service development. It supports HTTP request parsing, response building, and TCP communication, making it ideal for building modern web services. Additionally, it provides support for request and response middleware, WebSocket, and Server-Sent Events (SSE), enabling flexible and efficient real-time communication. Built with pure Rust and standard library, Hyperlane offers true cross-platform compatibility across Windows, Linux and macOS, with the same API experience on all platforms, powered by Tokio's async runtime for seamless networking without platform-specific dependencies. +> A lightweight, high-performance, and cross-platform Rust HTTP server library built on Tokio. It simplifies modern web service development by providing built-in support for middleware, WebSocket, Server-Sent Events (SSE), and raw TCP communication. With a unified and ergonomic API across Windows, Linux, and MacOS, it enables developers to build robust, scalable, and event-driven network applications with minimal overhead and maximum flexibility. ## Database diff --git a/frameworks/Rust/hyperlane/benchmark_config.json b/frameworks/Rust/hyperlane/benchmark_config.json index 7864eb27b08..5476d84b5dd 100644 --- a/frameworks/Rust/hyperlane/benchmark_config.json +++ b/frameworks/Rust/hyperlane/benchmark_config.json @@ -2,104 +2,14 @@ "framework": "hyperlane", "tests": [ { - "json": { - "dockerfile": "hyperlane.json.dockerfile", + "default": { + "dockerfile": "hyperlane.default.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 deleted file mode 100644 index d90fbed9fc8..00000000000 --- a/frameworks/Rust/hyperlane/hyperlane.cached_query.dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -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.db.dockerfile b/frameworks/Rust/hyperlane/hyperlane.default.dockerfile similarity index 91% rename from frameworks/Rust/hyperlane/hyperlane.db.dockerfile rename to frameworks/Rust/hyperlane/hyperlane.default.dockerfile index 632f725fc54..d9bd815fd04 100644 --- a/frameworks/Rust/hyperlane/hyperlane.db.dockerfile +++ b/frameworks/Rust/hyperlane/hyperlane.default.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 --features db +RUN RUSTFLAGS="-C target-cpu=native -C link-arg=-fuse-ld=lld" cargo build --release EXPOSE 8080 diff --git a/frameworks/Rust/hyperlane/hyperlane.fortunes.dockerfile b/frameworks/Rust/hyperlane/hyperlane.fortunes.dockerfile deleted file mode 100644 index 6c17364aab5..00000000000 --- a/frameworks/Rust/hyperlane/hyperlane.fortunes.dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -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 deleted file mode 100644 index 225112b5b38..00000000000 --- a/frameworks/Rust/hyperlane/hyperlane.json.dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -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 deleted file mode 100644 index f2620d45892..00000000000 --- a/frameworks/Rust/hyperlane/hyperlane.plaintext.dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -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 deleted file mode 100644 index 04463e5b6dd..00000000000 --- a/frameworks/Rust/hyperlane/hyperlane.query.dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -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 deleted file mode 100644 index c265407a1ff..00000000000 --- a/frameworks/Rust/hyperlane/hyperlane.update.dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -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/const.rs b/frameworks/Rust/hyperlane/src/const.rs index 93728efd2e4..c68b37c2bd1 100644 --- a/frameworks/Rust/hyperlane/src/const.rs +++ b/frameworks/Rust/hyperlane/src/const.rs @@ -15,3 +15,4 @@ 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; +pub const HTTP_BUFFER: usize = 256; diff --git a/frameworks/Rust/hyperlane/src/db.rs b/frameworks/Rust/hyperlane/src/db.rs index eb7c57b779e..136b451438c 100644 --- a/frameworks/Rust/hyperlane/src/db.rs +++ b/frameworks/Rust/hyperlane/src/db.rs @@ -153,7 +153,8 @@ pub async fn init_db() { create_table().await; insert_records().await; } - black_box(init_cache().await); + let _ = get_db_connection(); + let _ = CACHE.get(0); } pub async fn random_world_row(db_pool: &DbPoolConnection) -> QueryRow { diff --git a/frameworks/Rust/hyperlane/src/request_middleware.rs b/frameworks/Rust/hyperlane/src/request_middleware.rs index 2c598f982b2..7f7105e9363 100644 --- a/frameworks/Rust/hyperlane/src/request_middleware.rs +++ b/frameworks/Rust/hyperlane/src/request_middleware.rs @@ -1,35 +1,16 @@ use super::*; pub async fn request(ctx: Context) { - ctx.set_response_header(CONNECTION, KEEP_ALIVE) + ctx.set_response_version(HttpVersion::HTTP1_1) .await - .set_response_header(SERVER, HYPERLANE) + .replace_response_header(CONNECTION, KEEP_ALIVE) .await - .set_response_header(DATE, gmt()) + .replace_response_header(SERVER, HYPERLANE) + .await + .replace_response_header(DATE, gmt()) .await .set_response_status_code(200) + .await + .replace_response_header(CONTENT_TYPE, APPLICATION_JSON) .await; - #[cfg(feature = "plaintext")] - { - ctx.set_response_header(CONTENT_TYPE, TEXT_PLAIN).await; - } - #[cfg(feature = "fortunes")] - { - ctx.set_response_header( - CONTENT_TYPE, - ContentType::format_content_type_with_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 1eaa40d61d7..75683e1c313 100644 --- a/frameworks/Rust/hyperlane/src/route.rs +++ b/frameworks/Rust/hyperlane/src/route.rs @@ -4,91 +4,145 @@ pub async fn json(ctx: Context) { let json: Value = json!({ "message": RESPONSEDATA_STR }); - let _ = ctx - .set_response_body(serde_json::to_string(&json).unwrap_or_default()) - .await - .send() - .await; + let run = || async { + ctx.set_response_body(serde_json::to_string(&json).unwrap_or_default()) + .await; + ctx.send().await.unwrap(); + }; + run().await; + while let Ok(_) = ctx.http_from_stream(HTTP_BUFFER).await { + run().await; + } + ctx.closed().await; } pub async fn plaintext(ctx: Context) { - let _ = ctx.set_response_body(RESPONSEDATA_BIN).await.send().await; + ctx.replace_response_header(CONTENT_TYPE, TEXT_PLAIN).await; + ctx.set_response_body(RESPONSEDATA_BIN).await; + let run = || async { + ctx.send().await.unwrap(); + }; + run().await; + while let Ok(_) = ctx.http_from_stream(HTTP_BUFFER).await { + run().await; + } + ctx.closed().await; } 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()) - .await - .send() - .await; + let run = || async { + let query_row: QueryRow = random_world_row(db_connection).await; + ctx.set_response_body(serde_json::to_string(&query_row).unwrap_or_default()) + .await + .send() + .await + .unwrap(); + }; + run().await; + while let Ok(_) = ctx.http_from_stream(HTTP_BUFFER).await { + run().await; + } + ctx.closed().await; } pub async fn query(ctx: Context) { - let queries: Queries = ctx - .get_request_query("q") - .await - .and_then(|queries| queries.parse::().ok()) - .unwrap_or_default() - .min(ROW_LIMIT as Queries) - .max(1); - 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()) - .await - .send() - .await; + let run = || async { + let queries: Queries = ctx + .get_request_query("q") + .await + .and_then(|queries| queries.parse::().ok()) + .unwrap_or_default() + .min(ROW_LIMIT as Queries) + .max(1); + let db_pool: &DbPoolConnection = get_db_connection(); + let data: Vec = get_some_row_id(queries, db_pool).await; + ctx.set_response_body(serde_json::to_string(&data).unwrap_or_default()) + .await + .send() + .await + .unwrap(); + }; + run().await; + while let Ok(_) = ctx.http_from_stream(HTTP_BUFFER).await { + run().await; + } + ctx.closed().await; } pub async fn fortunes(ctx: Context) { - let all_rows: Vec = all_world_row().await; - let mut fortunes_list: Vec = all_rows - .iter() - .map(|row| { - let id: i32 = row.get(KEY_ID); - let message: String = row.get(KEY_MESSAGE); - Fortunes::new(id, message) - }) - .collect(); - fortunes_list.push(Fortunes::new( - 0, - "Additional fortune added at request time.".to_owned(), - )); - fortunes_list.sort_by(|it, next| it.message.cmp(&next.message)); - let res: String = FortunesTemplate::new(fortunes_list).to_string(); - let _ = ctx.set_response_body(res).await.send().await; + ctx.replace_response_header( + CONTENT_TYPE, + ContentType::format_content_type_with_charset(TEXT_HTML, UTF8), + ) + .await; + let run = || async { + let all_rows: Vec = all_world_row().await; + let mut fortunes_list: Vec = all_rows + .iter() + .map(|row| { + let id: i32 = row.get(KEY_ID); + let message: String = row.get(KEY_MESSAGE); + Fortunes::new(id, message) + }) + .collect(); + fortunes_list.push(Fortunes::new( + 0, + "Additional fortune added at request time.".to_owned(), + )); + fortunes_list.sort_by(|it, next| it.message.cmp(&next.message)); + let res: String = FortunesTemplate::new(fortunes_list).to_string(); + ctx.set_response_body(res).await.send().await.unwrap(); + }; + run().await; + while let Ok(_) = ctx.http_from_stream(HTTP_BUFFER).await { + run().await; + } + ctx.closed().await; } pub async fn update(ctx: Context) { - let queries: Queries = ctx - .get_request_query("q") - .await - .and_then(|queries| queries.parse::().ok()) - .unwrap_or_default() - .min(ROW_LIMIT as Queries) - .max(1); - let res: Vec = update_world_rows(queries).await; - let _ = ctx - .set_response_body(serde_json::to_string(&res).unwrap_or_default()) - .await - .send() - .await; + let run = || async { + let queries: Queries = ctx + .get_request_query("q") + .await + .and_then(|queries| queries.parse::().ok()) + .unwrap_or_default() + .min(ROW_LIMIT as Queries) + .max(1); + let res: Vec = update_world_rows(queries).await; + ctx.set_response_body(serde_json::to_string(&res).unwrap_or_default()) + .await + .send() + .await + .unwrap(); + }; + run().await; + while let Ok(_) = ctx.http_from_stream(HTTP_BUFFER).await { + run().await; + } + ctx.closed().await; } pub async fn cached_query(ctx: Context) { - let count: Queries = ctx - .get_request_query("c") - .await - .and_then(|queries| queries.parse::().ok()) - .unwrap_or_default() - .min(ROW_LIMIT as Queries) - .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()) - .await - .send() - .await; + let run = || async { + let count: Queries = ctx + .get_request_query("c") + .await + .and_then(|queries| queries.parse::().ok()) + .unwrap_or_default() + .min(ROW_LIMIT as Queries) + .max(1); + let res: Vec = CACHE.iter().take(count as usize).cloned().collect(); + ctx.set_response_body(serde_json::to_string(&res).unwrap_or_default()) + .await + .send() + .await + .unwrap(); + }; + run().await; + while let Ok(_) = ctx.http_from_stream(HTTP_BUFFER).await { + run().await; + } + ctx.closed().await; } diff --git a/frameworks/Rust/hyperlane/src/server.rs b/frameworks/Rust/hyperlane/src/server.rs index e469a774c9f..49781cf544b 100644 --- a/frameworks/Rust/hyperlane/src/server.rs +++ b/frameworks/Rust/hyperlane/src/server.rs @@ -17,36 +17,57 @@ async fn init_server() { server.port(8080).await; server.disable_linger().await; server.disable_nodelay().await; - server.error_handler(async |_: PanicInfo| {}).await; - server.http_buffer_size(256).await; - server.ws_buffer_size(256).await; + server.http_buffer(256).await; + server.ws_buffer(256).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.run().await.unwrap(); + + server + .disable_http_hook("/plaintext") + .await + .route("/plaintext", route::plaintext) + .await; + + server + .disable_http_hook("/json") + .await + .route("/json", route::json) + .await; + + server + .disable_http_hook("/cached-quer") + .await + .route("/cached-quer", route::cached_query) + .await; + + server + .disable_http_hook("/db") + .await + .route("/db", route::db) + .await; + + server + .disable_http_hook("/query") + .await + .route("/query", route::query) + .await; + + server + .disable_http_hook("/fortunes") + .await + .route("/fortunes", route::fortunes) + .await; + + server + .disable_http_hook("/upda") + .await + .route("/upda", route::update) + .await; + + server.run().await.unwrap().wait().await; } async fn init() { - #[cfg(any( - feature = "dev", - feature = "db", - feature = "query", - feature = "update", - feature = "fortunes", - feature = "cached_query", - ))] init_db().await; init_server().await; }