Browse Source

Upgrade hyperlane (#10071)

* 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'

* feat: hyperlane

* feat: update

* docs: readme

* feat: update

* Merge remote-tracking branch 'upstream/master'

* feat: update

* feat: update

* feat: update

* Merge remote-tracking branch 'upstream/master'

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: lock

* feat: use super

* feat: update lock

* feat: update

* feat: update lock

* feat: update lock

* feat: update lock

* feat: lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* feat: update lock

* Merge remote-tracking branch 'upstream/master'

* feat: update

* feat: utf8

* feat: utf8

* feat: lock

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* update: code

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* feat: update

* Merge remote-tracking branch 'upstream/master'

* feat: update version

* feat: update version

* update: code

* Merge remote-tracking branch 'upstream/master'

* feat: lock

* feat: lock

* feat: lock

* feat: lock

* feat: lock

* feat: lock

* feat: lock

* feat: error handle

* feat: dep

* feat: get_thread_count

* update: code

* feat: lock

* feat: speed

* feat: speed

* update: code

* feat: speed

* update: code

* feat: lock

* fix: Framework hyperlane does not define a default test in benchmark_config.json

* feat: hyperlane http version

* feat: hyperlane http version

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: v0.1.0

* feat: toml

* feat: v6

* feat: v6

* feat: v6

* feat: v6

* feat: v6

* debug: test cache

* debug: test cache

* feat: v6

* feat: send unwrap

* feat: v6

* feat: v6

* feat: v0.1.0

* feat: toml

* feat: toml

* feat: db

* feat: toml

* feat: toml

* feat: toml

* feat: toml

* feat: dir update

---------

Co-authored-by: 尤雨东 <[email protected]>
尤雨东 2 weeks ago
parent
commit
433e1f8a8e

+ 37 - 20
frameworks/Rust/hyperlane/Cargo.lock

@@ -325,9 +325,9 @@ checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
 
 [[package]]
 name = "form_urlencoded"
-version = "1.2.1"
+version = "1.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
 dependencies = [
  "percent-encoding",
 ]
@@ -538,9 +538,9 @@ dependencies = [
 
 [[package]]
 name = "http-compress"
-version = "2.16.5"
+version = "2.16.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "757db00ff4cb103647c32497514aceeb685bc2686d84c8707124f1c8eeaac2e3"
+checksum = "f86b015115d24b1fb70b663fdbc1f1c849883372fb19143709a718751074b907"
 dependencies = [
  "brotli",
  "flate2",
@@ -555,9 +555,9 @@ checksum = "c10a92fc539f5fc3b2c5c3de4255e4f62f2768c9cd5a0e7879edf3d3b3189186"
 
 [[package]]
 name = "http-type"
-version = "4.58.1"
+version = "4.60.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "abed1c209d167f814d402413f3de1ea85b9d200ddf7724d5cf487531580beafb"
+checksum = "31db399a7dbd7ddd5098b6c8ace6959ed1651a21d9ac76cc099c8bd10af3038c"
 dependencies = [
  "hex",
  "http-compress",
@@ -573,11 +573,12 @@ dependencies = [
 
 [[package]]
 name = "hyperlane"
-version = "7.6.1"
+version = "8.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f9d7945668a0db60ff3ed6b139d6a5d3e59bb171a3b065745066f74e01eaab7"
+checksum = "7968f7272ce9339f8d77effc5f27b7ae571e0061decc67c5d44508e729a93603"
 dependencies = [
  "http-type",
+ "inventory",
  "lombok-macros",
  "regex",
  "serde",
@@ -586,9 +587,9 @@ dependencies = [
 
 [[package]]
 name = "hyperlane-time"
-version = "0.7.7"
+version = "0.7.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed590017e6b8cd1c4f25cf6b5beda4efd3c5a76842c8782dca4fe650552a6c21"
+checksum = "19b7a0bcb6105d14602c6777b955605fd0abee9c3fd412b4af4712db8a61e358"
 
 [[package]]
 name = "hyperlane_techempower"
@@ -693,9 +694,9 @@ dependencies = [
 
 [[package]]
 name = "idna"
-version = "1.0.3"
+version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
+checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
 dependencies = [
  "idna_adapter",
  "smallvec",
@@ -722,6 +723,15 @@ dependencies = [
  "hashbrown",
 ]
 
+[[package]]
+name = "inventory"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e"
+dependencies = [
+ "rustversion",
+]
+
 [[package]]
 name = "io-uring"
 version = "0.7.9"
@@ -962,9 +972,9 @@ dependencies = [
 
 [[package]]
 name = "percent-encoding"
-version = "2.3.1"
+version = "2.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
 
 [[package]]
 name = "pin-project-lite"
@@ -1117,9 +1127,9 @@ dependencies = [
 
 [[package]]
 name = "regex"
-version = "1.11.1"
+version = "1.11.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
+checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -1170,6 +1180,12 @@ version = "0.1.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
 
+[[package]]
+name = "rustversion"
+version = "1.0.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
+
 [[package]]
 name = "ryu"
 version = "1.0.20"
@@ -1216,9 +1232,9 @@ dependencies = [
 
 [[package]]
 name = "serde_json"
-version = "1.0.142"
+version = "1.0.143"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7"
+checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a"
 dependencies = [
  "itoa",
  "memchr",
@@ -1739,13 +1755,14 @@ checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0"
 
 [[package]]
 name = "url"
-version = "2.5.4"
+version = "2.5.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
+checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
 dependencies = [
  "form_urlencoded",
  "idna",
  "percent-encoding",
+ "serde",
 ]
 
 [[package]]

+ 3 - 3
frameworks/Rust/hyperlane/Cargo.toml

@@ -20,13 +20,13 @@ exclude = [
 
 [dependencies]
 futures = "0.3.31"
-hyperlane = "7.6.1"
-hyperlane-time = "0.7.7"
+hyperlane = "8.1.2"
+hyperlane-time = "0.7.8"
 num_cpus = "1.17.0"
 once_cell = "1.21.3"
 rand = "0.9.2"
 serde = "1.0.219"
-serde_json = "1.0.142"
+serde_json = "1.0.143"
 sqlx = { version = "0.8.6", features = ["runtime-tokio", "postgres"] }
 
 [profile.dev]

+ 10 - 10
frameworks/Rust/hyperlane/src/db.rs → frameworks/Rust/hyperlane/src/db/fn.rs

@@ -7,7 +7,7 @@ pub fn get_db_connection() -> &'static DbPoolConnection {
 #[cfg(feature = "dev")]
 pub async fn create_database() {
     let db_pool: &DbPoolConnection = get_db_connection();
-    let _ = query(&format!("CREATE DATABASE {};", DATABASE_NAME))
+    let _ = db_query(&format!("CREATE DATABASE {};", DATABASE_NAME))
         .execute(db_pool)
         .await;
 }
@@ -15,7 +15,7 @@ pub async fn create_database() {
 #[cfg(feature = "dev")]
 pub async fn create_table() {
     let db_pool: &DbPoolConnection = get_db_connection();
-    let _ = query(&format!(
+    let _ = db_query(&format!(
         "CREATE TABLE IF NOT EXISTS {} (
             id SERIAL PRIMARY KEY, randomNumber INT NOT NULL
         );",
@@ -23,7 +23,7 @@ pub async fn create_table() {
     ))
     .execute(db_pool)
     .await;
-    let _ = query(&format!(
+    let _ = db_query(&format!(
         "CREATE TABLE IF NOT EXISTS {} (
             id SERIAL PRIMARY KEY, message VARCHAR NOT NULL
         );",
@@ -36,7 +36,7 @@ pub async fn create_table() {
 #[cfg(feature = "dev")]
 pub async fn insert_records() {
     let db_pool: &DbPoolConnection = get_db_connection();
-    let row: PgRow = query(&format!("SELECT COUNT(*) FROM {}", TABLE_NAME_WORLD))
+    let row: PgRow = db_query(&format!("SELECT COUNT(*) FROM {}", TABLE_NAME_WORLD))
         .fetch_one(db_pool)
         .await
         .unwrap();
@@ -56,7 +56,7 @@ pub async fn insert_records() {
         TABLE_NAME_WORLD,
         values.join(",")
     );
-    let _ = query(&sql).execute(db_pool).await;
+    let _ = db_query(&sql).execute(db_pool).await;
     let mut values: Vec<String> = Vec::new();
     for _ in 0..missing_count {
         let random_number: i32 = get_random_id();
@@ -67,7 +67,7 @@ pub async fn insert_records() {
         TABLE_NAME_FORTUNE,
         values.join(",")
     );
-    let _ = query(&sql).execute(db_pool).await;
+    let _ = db_query(&sql).execute(db_pool).await;
 }
 
 pub async fn init_cache() -> Vec<QueryRow> {
@@ -77,7 +77,7 @@ pub async fn init_cache() -> Vec<QueryRow> {
         "SELECT id, randomNumber FROM {} LIMIT {}",
         TABLE_NAME_WORLD, RANDOM_MAX
     );
-    if let Ok(rows) = query(&sql).fetch_all(db_pool).await {
+    if let Ok(rows) = db_query(&sql).fetch_all(db_pool).await {
         for row in rows {
             let id: i32 = row.get(KEY_ID);
             let random_number: i32 = row.get(KEY_RANDOM_NUMBER);
@@ -146,7 +146,7 @@ pub async fn random_world_row(db_pool: &DbPoolConnection) -> QueryRow {
 
 pub async fn query_world_row(db_pool: &DbPoolConnection, id: Queries) -> QueryRow {
     let sql: &str = "SELECT id, randomNumber FROM World WHERE id = $1";
-    if let Ok(rows) = query(sql).bind(id).fetch_one(db_pool).await {
+    if let Ok(rows) = db_query(sql).bind(id).fetch_one(db_pool).await {
         let random_number: i32 = rows.get(KEY_RANDOM_NUMBER);
         return QueryRow::new(id as i32, random_number);
     }
@@ -161,7 +161,7 @@ pub async fn update_world_rows(limit: Queries) -> Vec<QueryRow> {
     for (id, random_number) in id_list.into_iter().zip(random_numbers.into_iter()) {
         let db_pool: Pool<Postgres> = db_pool.clone();
         tasks.push(spawn(async move {
-            query(sql)
+            db_query(sql)
                 .bind(random_number)
                 .bind(id)
                 .execute(&db_pool)
@@ -175,7 +175,7 @@ pub async fn update_world_rows(limit: Queries) -> Vec<QueryRow> {
 pub async fn all_world_row() -> Vec<PgRow> {
     let db_pool: &DbPoolConnection = get_db_connection();
     let sql: String = format!("SELECT id, message FROM {}", TABLE_NAME_FORTUNE);
-    let res: Vec<PgRow> = query(&sql).fetch_all(db_pool).await.unwrap_or_default();
+    let res: Vec<PgRow> = db_query(&sql).fetch_all(db_pool).await.unwrap_or_default();
     return res;
 }
 

+ 9 - 0
frameworks/Rust/hyperlane/src/db/mod.rs

@@ -0,0 +1,9 @@
+pub(crate) mod r#fn;
+pub(crate) mod r#static;
+pub(crate) mod r#type;
+
+pub use r#fn::*;
+pub use r#static::*;
+pub use r#type::*;
+
+use super::*;

+ 0 - 0
frameworks/Rust/hyperlane/src/lazy.rs → frameworks/Rust/hyperlane/src/db/static.rs


+ 3 - 0
frameworks/Rust/hyperlane/src/db/type.rs

@@ -0,0 +1,3 @@
+use super::*;
+
+pub type DbPoolConnection = Pool<Postgres>;

+ 5 - 13
frameworks/Rust/hyperlane/src/main.rs

@@ -1,41 +1,33 @@
-#![allow(dead_code)]
-#![allow(unused_imports)]
-pub(crate) mod r#const;
 pub(crate) mod db;
-pub(crate) mod lazy;
-pub(crate) mod request_middleware;
+pub(crate) mod middleware;
 pub(crate) mod route;
 pub(crate) mod server;
-pub(crate) mod r#type;
 pub(crate) mod utils;
 
-pub(crate) use r#const::*;
 pub(crate) use db::*;
-pub(crate) use r#type::*;
+pub(crate) use server::*;
 pub(crate) use utils::*;
 
-pub(crate) use std::{fmt, hint::black_box, sync::Arc};
+pub(crate) use std::fmt;
 
 pub(crate) use futures::{executor::block_on, future::join_all};
 pub(crate) use hyperlane::{
     tokio::{
         runtime::{Builder, Runtime},
         spawn,
-        sync::{AcquireError, OwnedSemaphorePermit, Semaphore},
         task::JoinHandle,
     },
     *,
 };
 pub(crate) use hyperlane_time::*;
-pub(crate) use lazy::*;
 pub(crate) use once_cell::sync::Lazy;
 pub(crate) use rand::{Rng, SeedableRng, rng, rngs::SmallRng};
 pub(crate) use serde::*;
 pub(crate) use serde_json::{Value, json};
-pub(crate) use server::*;
 pub(crate) use sqlx::{
+    Pool, Postgres, Row,
     postgres::{PgPoolOptions, PgRow},
-    *,
+    query as db_query,
 };
 
 fn main() {

+ 0 - 0
frameworks/Rust/hyperlane/src/request_middleware.rs → frameworks/Rust/hyperlane/src/middleware/fn.rs


+ 5 - 0
frameworks/Rust/hyperlane/src/middleware/mod.rs

@@ -0,0 +1,5 @@
+pub(crate) mod r#fn;
+
+pub use r#fn::*;
+
+use super::*;

+ 4 - 4
frameworks/Rust/hyperlane/src/route.rs → frameworks/Rust/hyperlane/src/route/fn.rs

@@ -49,7 +49,7 @@ pub async fn db(ctx: Context) {
 pub async fn query(ctx: Context) {
     let run = || async {
         let queries: Queries = ctx
-            .get_request_query("q")
+            .try_get_request_query(QUERY_DB_QUERY_KEY)
             .await
             .and_then(|queries| queries.parse::<Queries>().ok())
             .unwrap_or_default()
@@ -104,7 +104,7 @@ pub async fn fortunes(ctx: Context) {
 pub async fn update(ctx: Context) {
     let run = || async {
         let queries: Queries = ctx
-            .get_request_query("q")
+            .try_get_request_query(UPDATE_DB_QUERY_KEY)
             .await
             .and_then(|queries| queries.parse::<Queries>().ok())
             .unwrap_or_default()
@@ -127,13 +127,13 @@ pub async fn update(ctx: Context) {
 pub async fn cached_query(ctx: Context) {
     let run = || async {
         let count: Queries = ctx
-            .get_request_query("c")
+            .try_get_request_query(CACHE_QUERY_KEY)
             .await
             .and_then(|queries| queries.parse::<Queries>().ok())
             .unwrap_or_default()
             .min(ROW_LIMIT as Queries)
             .max(1);
-        let res: Vec<QueryRow> = CACHE.iter().take(count as usize).cloned().collect();
+        let res: Vec<&QueryRow> = CACHE.iter().take(count as usize).collect();
         ctx.set_response_body(serde_json::to_string(&res).unwrap_or_default())
             .await
             .send()

+ 7 - 0
frameworks/Rust/hyperlane/src/route/mod.rs

@@ -0,0 +1,7 @@
+pub(crate) mod r#fn;
+
+pub use r#fn::*;
+
+use super::*;
+
+use sqlx::{Row, postgres::PgRow};

+ 3 - 0
frameworks/Rust/hyperlane/src/const.rs → frameworks/Rust/hyperlane/src/server/const.rs

@@ -16,3 +16,6 @@ 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;
+pub const QUERY_DB_QUERY_KEY: &str = "q";
+pub const UPDATE_DB_QUERY_KEY: &str = "q";
+pub const CACHE_QUERY_KEY: &str = "c";

+ 1 - 1
frameworks/Rust/hyperlane/src/server.rs → frameworks/Rust/hyperlane/src/server/fn.rs

@@ -21,7 +21,7 @@ async fn init_server() {
 
     let server: Server = Server::from(config).await;
 
-    server.request_middleware(request_middleware::request).await;
+    server.request_middleware(middleware::request).await;
 
     server
         .disable_http_hook("/plaintext")

+ 0 - 19
frameworks/Rust/hyperlane/src/type.rs → frameworks/Rust/hyperlane/src/server/impl.rs

@@ -1,15 +1,5 @@
 use super::*;
 
-pub type DbPoolConnection = Pool<Postgres>;
-pub type Queries = i32;
-
-#[allow(bad_style)]
-#[derive(Serialize, Default, Clone)]
-pub struct QueryRow {
-    pub id: Queries,
-    pub randomNumber: Queries,
-}
-
 impl QueryRow {
     pub fn new(id: Queries, random_number: Queries) -> Self {
         Self {
@@ -19,21 +9,12 @@ impl QueryRow {
     }
 }
 
-#[derive(Serialize)]
-pub struct Fortunes {
-    pub id: Queries,
-    pub message: String,
-}
-
 impl Fortunes {
     pub fn new(id: Queries, message: String) -> Self {
         Self { id, message }
     }
 }
 
-#[derive(Serialize)]
-pub struct FortunesTemplate(pub Vec<Fortunes>);
-
 impl FortunesTemplate {
     pub fn new(list: Vec<Fortunes>) -> Self {
         Self(list)

+ 12 - 0
frameworks/Rust/hyperlane/src/server/mod.rs

@@ -0,0 +1,12 @@
+pub(crate) mod r#const;
+pub(crate) mod r#fn;
+pub(crate) mod r#impl;
+pub(crate) mod r#struct;
+pub(crate) mod r#type;
+
+pub use r#const::*;
+pub use r#fn::*;
+pub use r#struct::*;
+pub use r#type::*;
+
+use super::*;

+ 17 - 0
frameworks/Rust/hyperlane/src/server/struct.rs

@@ -0,0 +1,17 @@
+use super::*;
+
+#[allow(bad_style)]
+#[derive(Serialize, Default, Clone)]
+pub struct QueryRow {
+    pub id: Queries,
+    pub randomNumber: Queries,
+}
+
+#[derive(Serialize)]
+pub struct Fortunes {
+    pub id: Queries,
+    pub message: String,
+}
+
+#[derive(Serialize)]
+pub struct FortunesTemplate(pub Vec<Fortunes>);

+ 1 - 0
frameworks/Rust/hyperlane/src/server/type.rs

@@ -0,0 +1 @@
+pub type Queries = i32;

+ 0 - 0
frameworks/Rust/hyperlane/src/utils.rs → frameworks/Rust/hyperlane/src/utils/fn.rs


+ 5 - 0
frameworks/Rust/hyperlane/src/utils/mod.rs

@@ -0,0 +1,5 @@
+pub(crate) mod r#fn;
+
+pub use r#fn::*;
+
+use super::*;