diff --git a/frameworks/Rust/hyperlane/Cargo.toml b/frameworks/Rust/hyperlane/Cargo.toml index 8b909a01df4..7ca0bbe6f4e 100644 --- a/frameworks/Rust/hyperlane/Cargo.toml +++ b/frameworks/Rust/hyperlane/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "hyperlane_techempower" version = "0.0.1" -edition = "2021" +edition = "2024" authors = ["ltpp-universe "] 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.""" @@ -18,7 +18,7 @@ exclude = [ ] [dependencies] -hyperlane = "4.36.1" +hyperlane = "4.42.1" rand = "0.9.0" serde = "1.0.219" sqlx = { version = "0.8.3", features = ["runtime-tokio", "postgres"] } diff --git a/frameworks/Rust/hyperlane/hyperlane.dockerfile b/frameworks/Rust/hyperlane/hyperlane.dockerfile index 480553c8c7a..d9bd815fd04 100644 --- a/frameworks/Rust/hyperlane/hyperlane.dockerfile +++ b/frameworks/Rust/hyperlane/hyperlane.dockerfile @@ -1,12 +1,14 @@ 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" cargo build --release +RUN RUSTFLAGS="-C target-cpu=native -C link-arg=-fuse-ld=lld" cargo build --release EXPOSE 8080 diff --git a/frameworks/Rust/hyperlane/src/db.rs b/frameworks/Rust/hyperlane/src/db.rs index d1d51e8ee11..9f4db9f0f5c 100644 --- a/frameworks/Rust/hyperlane/src/db.rs +++ b/frameworks/Rust/hyperlane/src/db.rs @@ -2,20 +2,18 @@ use crate::*; #[inline] pub async fn get_db_connection() -> DbPoolConnection { - if let Some(db_pool) = DB.read().await.clone() { - return db_pool; + if let Some(db_pool) = DB.get() { + return db_pool.clone(); }; let db_pool: DbPoolConnection = connection_db().await; - { - let mut db_pool_lock: RwLockWriteGuard<'_, Option> = DB.write().await; - *db_pool_lock = Some(db_pool.clone()); - } + DB.set(db_pool.clone()) + .expect("Failed to initialize DB_POOL"); db_pool } #[inline] #[cfg(feature = "dev")] -pub async fn create_batabase() { +pub async fn create_database() { let db_pool: DbPoolConnection = get_db_connection().await; let _ = query(&format!("CREATE DATABASE {};", DATABASE_NAME)) .execute(&db_pool) @@ -97,8 +95,7 @@ pub async fn init_cache() { res.push(QueryRow::new(id, random_number)); } } - let mut cache: RwLockWriteGuard<'_, Vec> = CACHE.write().await; - *cache = res; + let _ = CACHE.set(res); } #[inline] @@ -170,13 +167,10 @@ pub async fn get_update_data( #[inline] pub async fn init_db() { - { - let mut db_pool_lock: RwLockWriteGuard<'_, Option> = DB.write().await; - *db_pool_lock = Some(connection_db().await); - } + get_db_connection().await; #[cfg(feature = "dev")] { - create_batabase().await; + create_database().await; create_table().await; insert_records().await; } diff --git a/frameworks/Rust/hyperlane/src/lazy.rs b/frameworks/Rust/hyperlane/src/lazy.rs index 6826b018008..6e95d5019b0 100644 --- a/frameworks/Rust/hyperlane/src/lazy.rs +++ b/frameworks/Rust/hyperlane/src/lazy.rs @@ -1,5 +1,4 @@ use crate::*; -pub static DB: Lazy>> = - Lazy::new(|| Arc::new(RwLock::new(None))); -pub static CACHE: Lazy>> = Lazy::new(|| arc_rwlock(vec![])); +pub static DB: OnceCell = OnceCell::new(); +pub static CACHE: OnceCell> = OnceCell::new(); diff --git a/frameworks/Rust/hyperlane/src/main.rs b/frameworks/Rust/hyperlane/src/main.rs index ef4a7838faa..72253debec0 100644 --- a/frameworks/Rust/hyperlane/src/main.rs +++ b/frameworks/Rust/hyperlane/src/main.rs @@ -10,16 +10,9 @@ pub(crate) mod utils; pub(crate) use constant::*; pub(crate) use db::*; -pub(crate) use hyperlane::{ - once_cell::sync::Lazy, - serde::*, - serde_json::json, - tokio::sync::{RwLock, RwLockReadGuard, RwLockWriteGuard}, - *, -}; +pub(crate) use hyperlane::{once_cell::sync::OnceCell, serde::*, serde_json::json, *}; pub(crate) use lazy::*; -pub(crate) use r#type::*; -pub(crate) use rand::{rngs::SmallRng, Rng, SeedableRng}; +pub(crate) use rand::{Rng, SeedableRng, rng, rngs::SmallRng}; pub(crate) use request_middleware::*; pub(crate) use response_middleware::*; pub(crate) use route::*; @@ -28,7 +21,8 @@ pub(crate) use sqlx::{ postgres::{PgPoolOptions, PgRow}, *, }; -pub(crate) use std::{fmt, sync::Arc}; +pub(crate) use std::fmt; +pub(crate) use r#type::*; pub(crate) use utils::*; #[tokio::main] diff --git a/frameworks/Rust/hyperlane/src/route.rs b/frameworks/Rust/hyperlane/src/route.rs index e52db693195..c3c7cbcb855 100644 --- a/frameworks/Rust/hyperlane/src/route.rs +++ b/frameworks/Rust/hyperlane/src/route.rs @@ -97,7 +97,7 @@ pub async fn cached_queries(controller_data: ControllerData) { .min(ROW_LIMIT as Queries) .max(1); let mut res: Vec = Vec::with_capacity(count as usize); - let cache: RwLockReadGuard<'_, Vec> = CACHE.read().await; + let cache: Vec = CACHE.get().cloned().unwrap_or_default(); for i in 0..count { res.push(cache[i as usize].clone()); } diff --git a/frameworks/Rust/hyperlane/src/server.rs b/frameworks/Rust/hyperlane/src/server.rs index 91dc1aeea08..568fb066446 100644 --- a/frameworks/Rust/hyperlane/src/server.rs +++ b/frameworks/Rust/hyperlane/src/server.rs @@ -9,13 +9,13 @@ pub async fn run_server() { server.log_interval_millis(1_000_000_000).await; server.disable_inner_log().await; server.disable_inner_print().await; - server.route("/json", json).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.route("/cached-quer", cached_queries).await; server.request_middleware(request).await; server.response_middleware(response).await; server.listen().await; diff --git a/frameworks/Rust/hyperlane/src/type.rs b/frameworks/Rust/hyperlane/src/type.rs index 3fb320ba049..9ec11ff4342 100644 --- a/frameworks/Rust/hyperlane/src/type.rs +++ b/frameworks/Rust/hyperlane/src/type.rs @@ -44,9 +44,13 @@ impl FortunesTemplate { } impl fmt::Display for FortunesTemplate { + #[inline] fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let fortunes: &Vec = &self.0; - let _ = write!(f, "Fortunes"); + let _ = write!( + f, + "Fortunes
idmessage
" + ); for tem in fortunes.iter() { let row: String = format!( "", diff --git a/frameworks/Rust/hyperlane/src/utils.rs b/frameworks/Rust/hyperlane/src/utils.rs index 9552fe79074..16e8cdd8839 100644 --- a/frameworks/Rust/hyperlane/src/utils.rs +++ b/frameworks/Rust/hyperlane/src/utils.rs @@ -1,5 +1,3 @@ -use rand::rng; - use crate::*; #[inline] diff --git a/frameworks/Rust/hyperlane/templates/fortune.hbs b/frameworks/Rust/hyperlane/templates/fortune.hbs deleted file mode 100644 index b9e25a52a8e..00000000000 --- a/frameworks/Rust/hyperlane/templates/fortune.hbs +++ /dev/null @@ -1,5 +0,0 @@ -Fortunes
idmessage
{}{}
- {{~# each fortunes ~}} - - {{~/each ~}} -
idmessage
{{id}}{{message}}