Skip to content

Commit 0ca8dd3

Browse files
authored
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]>
1 parent df5fb41 commit 0ca8dd3

File tree

6 files changed

+76
-84
lines changed

6 files changed

+76
-84
lines changed

frameworks/Rust/hyperlane/Cargo.lock

Lines changed: 43 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frameworks/Rust/hyperlane/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ exclude = [
2020

2121
[dependencies]
2222
futures = "0.3.31"
23-
hyperlane = "6.6.0"
23+
hyperlane = "7.6.1"
2424
hyperlane-time = "0.7.7"
2525
num_cpus = "1.17.0"
2626
once_cell = "1.21.3"

frameworks/Rust/hyperlane/src/db.rs

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -113,37 +113,19 @@ pub async fn connection_db() -> DbPoolConnection {
113113
pool
114114
}
115115

116-
pub async fn get_update_data(
117-
limit: Queries,
118-
) -> (String, Vec<QueryRow>, Vec<Queries>, Vec<Queries>) {
116+
pub async fn get_update_data(limit: Queries) -> (Vec<QueryRow>, Vec<i32>, Vec<i32>) {
119117
let db_pool: &DbPoolConnection = get_db_connection();
120118
let mut query_res_list: Vec<QueryRow> = Vec::with_capacity(limit as usize);
121119
let rows: Vec<QueryRow> = get_some_row_id(limit, db_pool).await;
122-
let mut sql: String = String::with_capacity(rows.len() * 32);
123-
sql.push_str(&format!(
124-
"UPDATE {} SET randomNumber = CASE id ",
125-
TABLE_NAME_WORLD
126-
));
127120
let mut id_list: Vec<i32> = Vec::with_capacity(rows.len());
128-
let mut value_list: Vec<String> = Vec::with_capacity(rows.len());
129121
let mut random_numbers: Vec<i32> = Vec::with_capacity(rows.len());
130-
for (i, row) in rows.iter().enumerate() {
122+
for row in rows.iter() {
131123
let new_random_number: i32 = get_random_id() as i32;
132124
id_list.push(row.id);
133125
random_numbers.push(new_random_number);
134-
value_list.push(format!("WHEN ${} THEN ${}", i * 2 + 1, i * 2 + 2));
135126
query_res_list.push(QueryRow::new(row.id, new_random_number));
136127
}
137-
sql.push_str(&value_list.join(" "));
138-
let id_params: String = (0..rows.len())
139-
.map(|i| format!("${}", (rows.len() * 2 + 1) + i))
140-
.collect::<Vec<_>>()
141-
.join(",");
142-
sql.push_str(&format!(
143-
" ELSE randomNumber END WHERE id IN ({})",
144-
id_params
145-
));
146-
(sql, query_res_list, id_list, random_numbers)
128+
(query_res_list, id_list, random_numbers)
147129
}
148130

149131
pub async fn init_db() {
@@ -163,11 +145,8 @@ pub async fn random_world_row(db_pool: &DbPoolConnection) -> QueryRow {
163145
}
164146

165147
pub async fn query_world_row(db_pool: &DbPoolConnection, id: Queries) -> QueryRow {
166-
let sql: String = format!(
167-
"SELECT id, randomNumber FROM {} WHERE id = {}",
168-
TABLE_NAME_WORLD, id
169-
);
170-
if let Ok(rows) = query(&sql).fetch_one(db_pool).await {
148+
let sql: &str = "SELECT id, randomNumber FROM World WHERE id = $1";
149+
if let Ok(rows) = query(sql).bind(id).fetch_one(db_pool).await {
171150
let random_number: i32 = rows.get(KEY_RANDOM_NUMBER);
172151
return QueryRow::new(id as i32, random_number);
173152
}
@@ -176,15 +155,20 @@ pub async fn query_world_row(db_pool: &DbPoolConnection, id: Queries) -> QueryRo
176155

177156
pub async fn update_world_rows(limit: Queries) -> Vec<QueryRow> {
178157
let db_pool: &DbPoolConnection = get_db_connection();
179-
let (sql, data, id_list, random_numbers) = get_update_data(limit).await;
180-
let mut query_builder = query(&sql);
181-
for (id, random_number) in id_list.iter().zip(random_numbers.iter()) {
182-
query_builder = query_builder.bind(id).bind(random_number);
183-
}
184-
for id in &id_list {
185-
query_builder = query_builder.bind(id);
158+
let (data, id_list, random_numbers) = get_update_data(limit).await;
159+
let sql: &str = "UPDATE World SET randomNumber = $1 WHERE id = $2";
160+
let mut tasks: Vec<JoinHandle<_>> = Vec::with_capacity(limit as usize);
161+
for (id, random_number) in id_list.into_iter().zip(random_numbers.into_iter()) {
162+
let db_pool: Pool<Postgres> = db_pool.clone();
163+
tasks.push(spawn(async move {
164+
query(sql)
165+
.bind(random_number)
166+
.bind(id)
167+
.execute(&db_pool)
168+
.await
169+
}));
186170
}
187-
let _ = query_builder.execute(db_pool).await;
171+
join_all(tasks).await;
188172
data
189173
}
190174

@@ -196,14 +180,10 @@ pub async fn all_world_row() -> Vec<PgRow> {
196180
}
197181

198182
pub async fn get_some_row_id(limit: Queries, db_pool: &DbPoolConnection) -> Vec<QueryRow> {
199-
let semaphore: Arc<Semaphore> = Arc::new(Semaphore::new(32));
200183
let tasks: Vec<_> = (0..limit)
201184
.map(|_| {
202-
let semaphore: Arc<Semaphore> = semaphore.clone();
203185
let db_pool: Pool<Postgres> = db_pool.clone();
204186
spawn(async move {
205-
let _permit: Result<OwnedSemaphorePermit, AcquireError> =
206-
semaphore.acquire_owned().await;
207187
let id: i32 = get_random_id();
208188
query_world_row(&db_pool, id).await
209189
})

frameworks/Rust/hyperlane/src/request_middleware.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ use super::*;
33
pub async fn request(ctx: Context) {
44
ctx.set_response_version(HttpVersion::HTTP1_1)
55
.await
6-
.replace_response_header(CONNECTION, KEEP_ALIVE)
6+
.set_response_header(CONNECTION, KEEP_ALIVE)
77
.await
8-
.replace_response_header(SERVER, HYPERLANE)
8+
.set_response_header(SERVER, HYPERLANE)
99
.await
10-
.replace_response_header(DATE, gmt())
10+
.set_response_header(DATE, gmt())
1111
.await
1212
.set_response_status_code(200)
1313
.await
14-
.replace_response_header(CONTENT_TYPE, APPLICATION_JSON)
14+
.set_response_header(CONTENT_TYPE, APPLICATION_JSON)
1515
.await;
1616
}

frameworks/Rust/hyperlane/src/route.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub async fn json(ctx: Context) {
1717
}
1818

1919
pub async fn plaintext(ctx: Context) {
20-
ctx.replace_response_header(CONTENT_TYPE, TEXT_PLAIN).await;
20+
ctx.set_response_header(CONTENT_TYPE, TEXT_PLAIN).await;
2121
ctx.set_response_body(RESPONSEDATA_BIN).await;
2222
let run = || async {
2323
ctx.send().await.unwrap();
@@ -71,7 +71,7 @@ pub async fn query(ctx: Context) {
7171
}
7272

7373
pub async fn fortunes(ctx: Context) {
74-
ctx.replace_response_header(
74+
ctx.set_response_header(
7575
CONTENT_TYPE,
7676
ContentType::format_content_type_with_charset(TEXT_HTML, UTF8),
7777
)

frameworks/Rust/hyperlane/src/server.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@ fn runtime() -> Runtime {
1212
}
1313

1414
async fn init_server() {
15-
let server: Server = Server::new();
16-
server.host("0.0.0.0").await;
17-
server.port(8080).await;
18-
server.disable_linger().await;
19-
server.disable_nodelay().await;
20-
server.http_buffer(256).await;
21-
server.ws_buffer(256).await;
15+
let config: ServerConfig = ServerConfig::new().await;
16+
config.host("0.0.0.0").await;
17+
config.port(8080).await;
18+
config.disable_nodelay().await;
19+
config.http_buffer(256).await;
20+
config.ws_buffer(256).await;
21+
22+
let server: Server = Server::from(config).await;
2223

2324
server.request_middleware(request_middleware::request).await;
2425

0 commit comments

Comments
 (0)