Эх сурвалжийг харах

Upgrade hyperlane (#10057)

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

* 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

---------

Co-authored-by: 尤雨东 <[email protected]>
尤雨东 3 долоо хоног өмнө
parent
commit
0ca8dd3cb2

+ 43 - 32
frameworks/Rust/hyperlane/Cargo.lock

@@ -91,9 +91,9 @@ checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba"
 
 [[package]]
 name = "bitflags"
-version = "2.9.1"
+version = "2.9.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
+checksum = "6a65b545ab31d687cff52899d4890855fec459eb6afe0da6417b8a18da87aa29"
 dependencies = [
  "serde",
 ]
@@ -109,9 +109,9 @@ dependencies = [
 
 [[package]]
 name = "brotli"
-version = "8.0.1"
+version = "8.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9991eea70ea4f293524138648e41ee89b0b2b12ddef3b255effa43c8056e0e0d"
+checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560"
 dependencies = [
  "alloc-no-stdlib",
  "alloc-stdlib",
@@ -473,9 +473,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
 
 [[package]]
 name = "hashbrown"
-version = "0.15.4"
+version = "0.15.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
+checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
 dependencies = [
  "allocator-api2",
  "equivalent",
@@ -549,15 +549,15 @@ dependencies = [
 
 [[package]]
 name = "http-constant"
-version = "1.59.5"
+version = "1.63.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d68fc1cd9b672083471b783a0f17f4df5eb470f79a2685b6f55e631618bcd2b"
+checksum = "c10a92fc539f5fc3b2c5c3de4255e4f62f2768c9cd5a0e7879edf3d3b3189186"
 
 [[package]]
 name = "http-type"
-version = "4.55.6"
+version = "4.58.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06966dd52009ec38901b439b9060dd9ed0ead6d1204f214fa9a933ae3cb85328"
+checksum = "abed1c209d167f814d402413f3de1ea85b9d200ddf7724d5cf487531580beafb"
 dependencies = [
  "hex",
  "http-compress",
@@ -573,9 +573,9 @@ dependencies = [
 
 [[package]]
 name = "hyperlane"
-version = "6.6.0"
+version = "7.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b7977949b728631efd15f05ac20930c3d4881cab8ec1ad7d723a99431a21443"
+checksum = "0f9d7945668a0db60ff3ed6b139d6a5d3e59bb171a3b065745066f74e01eaab7"
 dependencies = [
  "http-type",
  "lombok-macros",
@@ -750,9 +750,9 @@ dependencies = [
 
 [[package]]
 name = "libc"
-version = "0.2.174"
+version = "0.2.175"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
+checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
 
 [[package]]
 name = "libm"
@@ -760,6 +760,17 @@ version = "0.2.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
 
+[[package]]
+name = "libredox"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3"
+dependencies = [
+ "bitflags",
+ "libc",
+ "redox_syscall",
+]
+
 [[package]]
 name = "libsqlite3-sys"
 version = "0.30.1"
@@ -1014,9 +1025,9 @@ dependencies = [
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.95"
+version = "1.0.101"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
+checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
 dependencies = [
  "unicode-ident",
 ]
@@ -1270,9 +1281,9 @@ dependencies = [
 
 [[package]]
 name = "slab"
-version = "0.4.10"
+version = "0.4.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d"
+checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
 
 [[package]]
 name = "smallvec"
@@ -1352,7 +1363,7 @@ dependencies = [
  "serde_json",
  "sha2",
  "smallvec",
- "thiserror 2.0.12",
+ "thiserror 2.0.15",
  "tokio",
  "tokio-stream",
  "tracing",
@@ -1434,7 +1445,7 @@ dependencies = [
  "smallvec",
  "sqlx-core",
  "stringprep",
- "thiserror 2.0.12",
+ "thiserror 2.0.15",
  "tracing",
  "whoami",
 ]
@@ -1471,7 +1482,7 @@ dependencies = [
  "smallvec",
  "sqlx-core",
  "stringprep",
- "thiserror 2.0.12",
+ "thiserror 2.0.15",
  "tracing",
  "whoami",
 ]
@@ -1495,7 +1506,7 @@ dependencies = [
  "serde",
  "serde_urlencoded",
  "sqlx-core",
- "thiserror 2.0.12",
+ "thiserror 2.0.15",
  "tracing",
  "url",
 ]
@@ -1525,9 +1536,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
 
 [[package]]
 name = "syn"
-version = "2.0.104"
+version = "2.0.106"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
+checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1556,11 +1567,11 @@ dependencies = [
 
 [[package]]
 name = "thiserror"
-version = "2.0.12"
+version = "2.0.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
+checksum = "80d76d3f064b981389ecb4b6b7f45a0bf9fdac1d5b9204c7bd6714fecc302850"
 dependencies = [
- "thiserror-impl 2.0.12",
+ "thiserror-impl 2.0.15",
 ]
 
 [[package]]
@@ -1576,9 +1587,9 @@ dependencies = [
 
 [[package]]
 name = "thiserror-impl"
-version = "2.0.12"
+version = "2.0.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
+checksum = "44d29feb33e986b6ea906bd9c3559a856983f92371b3eaa5e83782a351623de0"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1778,11 +1789,11 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
 
 [[package]]
 name = "whoami"
-version = "1.6.0"
+version = "1.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7"
+checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d"
 dependencies = [
- "redox_syscall",
+ "libredox",
  "wasite",
 ]
 

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

@@ -20,7 +20,7 @@ exclude = [
 
 [dependencies]
 futures = "0.3.31"
-hyperlane = "6.6.0"
+hyperlane = "7.6.1"
 hyperlane-time = "0.7.7"
 num_cpus = "1.17.0"
 once_cell = "1.21.3"

+ 18 - 38
frameworks/Rust/hyperlane/src/db.rs

@@ -113,37 +113,19 @@ pub async fn connection_db() -> DbPoolConnection {
     pool
 }
 
-pub async fn get_update_data(
-    limit: Queries,
-) -> (String, Vec<QueryRow>, Vec<Queries>, Vec<Queries>) {
+pub async fn get_update_data(limit: Queries) -> (Vec<QueryRow>, Vec<i32>, Vec<i32>) {
     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 = 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());
     let mut random_numbers: Vec<i32> = Vec::with_capacity(rows.len());
-    for (i, row) in rows.iter().enumerate() {
+    for row in rows.iter() {
         let new_random_number: i32 = get_random_id() as i32;
         id_list.push(row.id);
         random_numbers.push(new_random_number);
-        value_list.push(format!("WHEN ${} THEN ${}", i * 2 + 1, i * 2 + 2));
         query_res_list.push(QueryRow::new(row.id, new_random_number));
     }
-    sql.push_str(&value_list.join(" "));
-    let id_params: String = (0..rows.len())
-        .map(|i| format!("${}", (rows.len() * 2 + 1) + i))
-        .collect::<Vec<_>>()
-        .join(",");
-    sql.push_str(&format!(
-        " ELSE randomNumber END WHERE id IN ({})",
-        id_params
-    ));
-    (sql, query_res_list, id_list, random_numbers)
+    (query_res_list, id_list, random_numbers)
 }
 
 pub async fn init_db() {
@@ -163,11 +145,8 @@ pub async fn random_world_row(db_pool: &DbPoolConnection) -> QueryRow {
 }
 
 pub async fn query_world_row(db_pool: &DbPoolConnection, id: Queries) -> QueryRow {
-    let sql: String = format!(
-        "SELECT id, randomNumber FROM {} WHERE id = {}",
-        TABLE_NAME_WORLD, id
-    );
-    if let Ok(rows) = query(&sql).fetch_one(db_pool).await {
+    let sql: &str = "SELECT id, randomNumber FROM World WHERE id = $1";
+    if let Ok(rows) = 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);
     }
@@ -176,15 +155,20 @@ 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(&sql);
-    for (id, random_number) in id_list.iter().zip(random_numbers.iter()) {
-        query_builder = query_builder.bind(id).bind(random_number);
-    }
-    for id in &id_list {
-        query_builder = query_builder.bind(id);
+    let (data, id_list, random_numbers) = get_update_data(limit).await;
+    let sql: &str = "UPDATE World SET randomNumber = $1 WHERE id = $2";
+    let mut tasks: Vec<JoinHandle<_>> = Vec::with_capacity(limit as usize);
+    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)
+                .bind(random_number)
+                .bind(id)
+                .execute(&db_pool)
+                .await
+        }));
     }
-    let _ = query_builder.execute(db_pool).await;
+    join_all(tasks).await;
     data
 }
 
@@ -196,14 +180,10 @@ 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 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();
                 query_world_row(&db_pool, id).await
             })

+ 4 - 4
frameworks/Rust/hyperlane/src/request_middleware.rs

@@ -3,14 +3,14 @@ use super::*;
 pub async fn request(ctx: Context) {
     ctx.set_response_version(HttpVersion::HTTP1_1)
         .await
-        .replace_response_header(CONNECTION, KEEP_ALIVE)
+        .set_response_header(CONNECTION, KEEP_ALIVE)
         .await
-        .replace_response_header(SERVER, HYPERLANE)
+        .set_response_header(SERVER, HYPERLANE)
         .await
-        .replace_response_header(DATE, gmt())
+        .set_response_header(DATE, gmt())
         .await
         .set_response_status_code(200)
         .await
-        .replace_response_header(CONTENT_TYPE, APPLICATION_JSON)
+        .set_response_header(CONTENT_TYPE, APPLICATION_JSON)
         .await;
 }

+ 2 - 2
frameworks/Rust/hyperlane/src/route.rs

@@ -17,7 +17,7 @@ pub async fn json(ctx: Context) {
 }
 
 pub async fn plaintext(ctx: Context) {
-    ctx.replace_response_header(CONTENT_TYPE, TEXT_PLAIN).await;
+    ctx.set_response_header(CONTENT_TYPE, TEXT_PLAIN).await;
     ctx.set_response_body(RESPONSEDATA_BIN).await;
     let run = || async {
         ctx.send().await.unwrap();
@@ -71,7 +71,7 @@ pub async fn query(ctx: Context) {
 }
 
 pub async fn fortunes(ctx: Context) {
-    ctx.replace_response_header(
+    ctx.set_response_header(
         CONTENT_TYPE,
         ContentType::format_content_type_with_charset(TEXT_HTML, UTF8),
     )

+ 8 - 7
frameworks/Rust/hyperlane/src/server.rs

@@ -12,13 +12,14 @@ fn runtime() -> Runtime {
 }
 
 async fn init_server() {
-    let server: Server = Server::new();
-    server.host("0.0.0.0").await;
-    server.port(8080).await;
-    server.disable_linger().await;
-    server.disable_nodelay().await;
-    server.http_buffer(256).await;
-    server.ws_buffer(256).await;
+    let config: ServerConfig = ServerConfig::new().await;
+    config.host("0.0.0.0").await;
+    config.port(8080).await;
+    config.disable_nodelay().await;
+    config.http_buffer(256).await;
+    config.ws_buffer(256).await;
+
+    let server: Server = Server::from(config).await;
 
     server.request_middleware(request_middleware::request).await;