Sfoglia il codice sorgente

[salvo] Update to version 0.68 (#9110)

* [salvo] Update to version 0.68

* cargo fmt

* ok
Chrislearn Young 1 anno fa
parent
commit
48316c28bb

+ 3 - 6
frameworks/Rust/salvo/Cargo.toml

@@ -40,8 +40,8 @@ anyhow = "1"
 async-trait = "0.1"
 bytes = "1"
 diesel = { version = "2", features = ["postgres", "r2d2"] }
-deadpool = { version = "0.11", features = ["rt_tokio_1", "serde", "managed"] }
-deadpool-postgres = "0.13"
+deadpool = { version = "0.12", features = ["rt_tokio_1", "serde", "managed"] }
+deadpool-postgres = "0.14"
 futures-util = "0.3"
 lru = "0.12.0"
 markup = "0.15"
@@ -49,7 +49,7 @@ markup = "0.15"
 mongodb = { version = "2.4.0", features = ["zstd-compression", "snappy-compression", "zlib-compression"] }
 once_cell = "1"
 rand = { version = "0.8", features = ["min_const_gen", "small_rng"] }
-salvo = { version = "0.67", default-features = false, features = ["anyhow", "server", "http1", "affix"] }
+salvo = { version = "0.68", default-features = false, features = ["anyhow", "server", "http1", "affix"] }
 serde = { version = "1", features = ["derive"] }
 serde_json = "1"
 # smallvec = "1"
@@ -64,7 +64,4 @@ dotenv = "0.15.0"
 
 [profile.release]
 lto = true
-opt-level = 3
 codegen-units = 1
-panic = "abort"
-

+ 1 - 1
frameworks/Rust/salvo/salvo-diesel.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.77
+FROM rust:1.78-buster
 
 ENV TECHEMPOWER_POSTGRES_URL=postgres://benchmarkdbuser:benchmarkdbpass@tfb-database/hello_world
 ENV TECHEMPOWER_MAX_POOL_SIZE=28

+ 1 - 1
frameworks/Rust/salvo/salvo-lru.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.77
+FROM rust:1.78-buster
 
 ENV TECHEMPOWER_POSTGRES_URL=postgres://benchmarkdbuser:benchmarkdbpass@tfb-database/hello_world
 

+ 1 - 1
frameworks/Rust/salvo/salvo-mongo-raw.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.77
+FROM rust:1.78-buster
 
 ENV TECHEMPOWER_MONGODB_URL=mongodb://tfb-database:27017
 ENV TECHEMPOWER_MAX_POOL_SIZE=28

+ 1 - 1
frameworks/Rust/salvo/salvo-mongo.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.77
+FROM rust:1.78-buster
 
 ENV TECHEMPOWER_MONGODB_URL=mongodb://tfb-database:27017
 ENV TECHEMPOWER_MAX_POOL_SIZE=28

+ 1 - 1
frameworks/Rust/salvo/salvo-pg-pool.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.77
+FROM rust:1.78-buster
 
 ENV TECHEMPOWER_POSTGRES_URL=postgres://benchmarkdbuser:benchmarkdbpass@tfb-database/hello_world
 ENV TECHEMPOWER_MAX_POOL_SIZE=28

+ 1 - 1
frameworks/Rust/salvo/salvo-pg.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.77
+FROM rust:1.78-buster
 
 ENV TECHEMPOWER_POSTGRES_URL=postgres://benchmarkdbuser:benchmarkdbpass@tfb-database/hello_world
 

+ 1 - 1
frameworks/Rust/salvo/salvo-sqlx.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.77
+FROM rust:1.78-buster
 
 ENV TECHEMPOWER_POSTGRES_URL=postgres://benchmarkdbuser:benchmarkdbpass@tfb-database/hello_world
 ENV TECHEMPOWER_MAX_POOL_SIZE=56

+ 1 - 1
frameworks/Rust/salvo/salvo.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.77
+FROM rust:1.78-buster
 
 ADD ./ /salvo
 WORKDIR /salvo

+ 1 - 2
frameworks/Rust/salvo/src/db_pg_pool.rs

@@ -1,10 +1,9 @@
 use deadpool_postgres::{Client, Manager, ManagerConfig, RecyclingMethod};
 use tokio_pg_mapper::FromTokioPostgresRow;
-use tokio_postgres::{NoTls, Row, Error, Statement};
+use tokio_postgres::{Error, NoTls, Row, Statement};
 
 use crate::{Fortune, World};
 
-
 pub async fn create_pool(database_url: String, max_pool_size: u32) -> deadpool_postgres::Pool {
     let pg_config: tokio_postgres::Config = database_url.parse().expect("invalid database url");
 

+ 1 - 1
frameworks/Rust/salvo/src/db_sqlx.rs

@@ -1,7 +1,7 @@
 use sqlx::{
     pool::PoolConnection,
     postgres::{PgArguments, PgPoolOptions},
-    Arguments, PgPool, Postgres, Error
+    Arguments, Error, PgPool, Postgres,
 };
 
 use crate::{Fortune, World};

+ 21 - 4
frameworks/Rust/salvo/src/main.rs

@@ -2,8 +2,10 @@
 // static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;
 
 use std::sync::Arc;
+use std::thread::available_parallelism;
 
 use bytes::Bytes;
+use salvo::conn::tcp::TcpAcceptor;
 use salvo::http::body::ResBody;
 use salvo::http::header::{self, HeaderValue};
 use salvo::prelude::*;
@@ -11,6 +13,7 @@ use serde::Serialize;
 
 mod utils;
 
+
 #[derive(Serialize)]
 pub struct Message {
     pub message: &'static str,
@@ -35,8 +38,7 @@ fn plaintext(res: &mut Response) {
     headers.insert(header::CONTENT_TYPE, HeaderValue::from_static("text/plain"));
     res.body(ResBody::Once(Bytes::from_static(b"Hello, world!")));
 }
-#[tokio::main]
-async 
+
 fn main() {
     let router = Arc::new(
         Router::new()
@@ -44,13 +46,28 @@ fn main() {
             .push(Router::with_path("json").get(json)),
     );
 
+    let thread_count = available_parallelism().map(|n| n.get()).unwrap_or(16);
+    let rt = tokio::runtime::Builder::new_current_thread()
+        .enable_all()
+        .build()
+        .unwrap();
+    for _ in 1..thread_count {
+        let router = router.clone();
+        std::thread::spawn(move || {
+            let rt = tokio::runtime::Builder::new_current_thread()
+                .enable_all()
+                .build()
+                .unwrap();
+            rt.block_on(serve(router));
+        });
+    }
     println!("Started http server: 127.0.0.1:8080");
-    serve(router).await;
+    rt.block_on(serve(router));
 }
 
 async fn serve(router: Arc<Router>) {
     // let acceptor: TcpAcceptor = utils::reuse_listener().unwrap().try_into().unwrap();
-    let acceptor = TcpListener::new("0.0.0.0:8080").bind().await;
+    let acceptor: TcpAcceptor = utils::reuse_listener().unwrap().try_into().unwrap();
     let mut server = Server::new(acceptor);
     let http1 = server.http1_mut();
     http1.pipeline_flush(true);

+ 7 - 7
frameworks/Rust/salvo/src/main_diesel.rs

@@ -15,6 +15,7 @@ use std::thread::available_parallelism;
 use anyhow::Error;
 use diesel::prelude::*;
 use diesel::r2d2::{ConnectionManager, Pool, PoolError, PooledConnection};
+use dotenv::dotenv;
 use once_cell::sync::OnceCell;
 use rand::rngs::SmallRng;
 use rand::{Rng, SeedableRng};
@@ -22,7 +23,6 @@ use salvo::conn::tcp::TcpAcceptor;
 use salvo::http::header::{self, HeaderValue};
 use salvo::http::ResBody;
 use salvo::prelude::*;
-use dotenv::dotenv;
 
 mod models_diesel;
 mod schema;
@@ -135,7 +135,10 @@ async fn fortunes(res: &mut Response) -> Result<(), Error> {
 
     let headers = res.headers_mut();
     headers.insert(header::SERVER, HeaderValue::from_static("salvo"));
-    headers.insert(header::CONTENT_TYPE, HeaderValue::from_static("text/html; charset=utf-8"));
+    headers.insert(
+        header::CONTENT_TYPE,
+        HeaderValue::from_static("text/html; charset=utf-8"),
+    );
     res.body(ResBody::Once(Bytes::from(data)));
     Ok(())
 }
@@ -164,14 +167,11 @@ markup::define! {
 
 fn main() {
     dotenv().ok();
-    
+
     let db_url: String = utils::get_env_var("TECHEMPOWER_POSTGRES_URL");
     let max_pool_size: u32 = utils::get_env_var("TECHEMPOWER_MAX_POOL_SIZE");
     DB_POOL
-        .set(
-            create_pool(&db_url, max_pool_size)
-                .unwrap_or_else(|_| panic!("Error connecting to {}", &db_url)),
-        )
+        .set(create_pool(&db_url, max_pool_size).unwrap_or_else(|_| panic!("Error connecting to {}", &db_url)))
         .ok();
 
     let router = Arc::new(

+ 4 - 1
frameworks/Rust/salvo/src/main_mongo.rs

@@ -102,7 +102,10 @@ async fn fortunes(res: &mut Response, depot: &mut Depot) -> Result<(), Error> {
 
     let headers = res.headers_mut();
     headers.insert(header::SERVER, HeaderValue::from_static("salvo"));
-    headers.insert(header::CONTENT_TYPE, HeaderValue::from_static("text/html; charset=utf-8"));
+    headers.insert(
+        header::CONTENT_TYPE,
+        HeaderValue::from_static("text/html; charset=utf-8"),
+    );
     res.body(ResBody::Once(Bytes::from(data)));
     Ok(())
 }

+ 8 - 29
frameworks/Rust/salvo/src/main_pg.rs

@@ -36,13 +36,7 @@ impl WorldHandler {
 }
 #[async_trait]
 impl Handler for WorldHandler {
-    async fn handle(
-        &self,
-        _req: &mut Request,
-        _depot: &mut Depot,
-        res: &mut Response,
-        _ctrl: &mut FlowCtrl,
-    ) {
+    async fn handle(&self, _req: &mut Request, _depot: &mut Depot, res: &mut Response, _ctrl: &mut FlowCtrl) {
         let world = self.conn.get_world().await.unwrap();
         let data = serde_json::to_vec(&world).unwrap();
         let headers = res.headers_mut();
@@ -66,13 +60,7 @@ impl WorldsHandler {
 }
 #[async_trait]
 impl Handler for WorldsHandler {
-    async fn handle(
-        &self,
-        req: &mut Request,
-        _depot: &mut Depot,
-        res: &mut Response,
-        _ctrl: &mut FlowCtrl,
-    ) {
+    async fn handle(&self, req: &mut Request, _depot: &mut Depot, res: &mut Response, _ctrl: &mut FlowCtrl) {
         let count = req.query::<u16>("q").unwrap_or(1);
         let count = cmp::min(500, cmp::max(1, count));
         let worlds = self.conn.get_worlds(count).await.unwrap();
@@ -99,13 +87,7 @@ impl UpdatesHandler {
 }
 #[async_trait]
 impl Handler for UpdatesHandler {
-    async fn handle(
-        &self,
-        req: &mut Request,
-        _depot: &mut Depot,
-        res: &mut Response,
-        _ctrl: &mut FlowCtrl,
-    ) {
+    async fn handle(&self, req: &mut Request, _depot: &mut Depot, res: &mut Response, _ctrl: &mut FlowCtrl) {
         let count = req.query::<u16>("q").unwrap_or(1);
         let count = cmp::min(500, cmp::max(1, count));
         let worlds = self.conn.update(count).await.unwrap();
@@ -132,19 +114,16 @@ impl FortunesHandler {
 }
 #[async_trait]
 impl Handler for FortunesHandler {
-    async fn handle(
-        &self,
-        _req: &mut Request,
-        _depot: &mut Depot,
-        res: &mut Response,
-        _ctrl: &mut FlowCtrl,
-    ) {
+    async fn handle(&self, _req: &mut Request, _depot: &mut Depot, res: &mut Response, _ctrl: &mut FlowCtrl) {
         let mut data = String::new();
         write!(&mut data, "{}", self.conn.tell_fortune().await.unwrap()).unwrap();
 
         let headers = res.headers_mut();
         headers.insert(header::SERVER, HeaderValue::from_static("salvo"));
-        headers.insert(header::CONTENT_TYPE, HeaderValue::from_static("text/html; charset=utf-8"));
+        headers.insert(
+            header::CONTENT_TYPE,
+            HeaderValue::from_static("text/html; charset=utf-8"),
+        );
         res.body(ResBody::Once(Bytes::from(data)));
     }
 }

+ 6 - 3
frameworks/Rust/salvo/src/main_pg_pool.rs

@@ -11,6 +11,7 @@ use std::thread::available_parallelism;
 use anyhow::Error;
 use bytes::Bytes;
 use deadpool_postgres::Pool;
+use dotenv::dotenv;
 use futures_util::{stream::FuturesUnordered, TryStreamExt};
 use once_cell::sync::OnceCell;
 use rand::rngs::SmallRng;
@@ -19,7 +20,6 @@ use salvo::conn::tcp::TcpAcceptor;
 use salvo::http::header::{self, HeaderValue};
 use salvo::http::ResBody;
 use salvo::prelude::*;
-use dotenv::dotenv;
 
 mod db_pg_pool;
 mod models_pg_pool;
@@ -129,7 +129,10 @@ async fn fortunes(res: &mut Response) -> Result<(), Error> {
 
     let headers = res.headers_mut();
     headers.insert(header::SERVER, HeaderValue::from_static("salvo"));
-    headers.insert(header::CONTENT_TYPE, HeaderValue::from_static("text/html; charset=utf-8"));
+    headers.insert(
+        header::CONTENT_TYPE,
+        HeaderValue::from_static("text/html; charset=utf-8"),
+    );
     res.body(ResBody::Once(Bytes::from(data)));
     Ok(())
 }
@@ -158,7 +161,7 @@ markup::define! {
 
 fn main() {
     dotenv().ok();
-    
+
     let db_url: String = utils::get_env_var("TECHEMPOWER_POSTGRES_URL");
     let max_pool_size: u32 = utils::get_env_var("TECHEMPOWER_MAX_POOL_SIZE");
     let rt = tokio::runtime::Builder::new_current_thread()

+ 5 - 2
frameworks/Rust/salvo/src/main_sqlx.rs

@@ -9,6 +9,7 @@ use std::thread::available_parallelism;
 
 use anyhow::Error;
 use bytes::Bytes;
+use dotenv::dotenv;
 use once_cell::sync::OnceCell;
 use rand::rngs::SmallRng;
 use rand::{Rng, SeedableRng};
@@ -17,7 +18,6 @@ use salvo::http::header::{self, HeaderValue};
 use salvo::http::ResBody;
 use salvo::prelude::*;
 use sqlx::PgPool;
-use dotenv::dotenv;
 
 mod db_sqlx;
 mod models_sqlx;
@@ -62,7 +62,10 @@ async fn fortunes(res: &mut Response) -> Result<(), Error> {
 
     let headers = res.headers_mut();
     headers.insert(header::SERVER, HeaderValue::from_static("salvo"));
-    headers.insert(header::CONTENT_TYPE, HeaderValue::from_static("text/html; charset=utf-8"));
+    headers.insert(
+        header::CONTENT_TYPE,
+        HeaderValue::from_static("text/html; charset=utf-8"),
+    );
     res.body(ResBody::Once(Bytes::from(data)));
     Ok(())
 }