Browse Source

Rust axum mongodb fixes (#6928)

Dragos Varovici 3 years ago
parent
commit
3a7df2cbbe

+ 2 - 1
frameworks/Rust/axum/Cargo.lock

@@ -116,7 +116,7 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
 
 
 [[package]]
 [[package]]
 name = "axum"
 name = "axum"
-version = "0.1.0"
+version = "0.1.1"
 dependencies = [
 dependencies = [
  "async-stream",
  "async-stream",
  "async-trait",
  "async-trait",
@@ -128,6 +128,7 @@ dependencies = [
  "futures-util",
  "futures-util",
  "hyper",
  "hyper",
  "mongodb",
  "mongodb",
+ "num_cpus",
  "rand",
  "rand",
  "serde",
  "serde",
  "serde_derive",
  "serde_derive",

+ 2 - 1
frameworks/Rust/axum/Cargo.toml

@@ -1,6 +1,6 @@
 [package]
 [package]
 name = "axum"
 name = "axum"
-version = "0.1.0"
+version = "0.1.1"
 authors = ["Dragos Varovici <[email protected]>"]
 authors = ["Dragos Varovici <[email protected]>"]
 edition = "2018"
 edition = "2018"
 
 
@@ -21,6 +21,7 @@ name = "axum-mongo"
 path = "src/main_mongo.rs"
 path = "src/main_mongo.rs"
 
 
 [dependencies]
 [dependencies]
+num_cpus = { version = "^1.13" }
 rand = { version = "^0.8", features = ["small_rng"]}
 rand = { version = "^0.8", features = ["small_rng"]}
 yarte = { version = "^0.15" }
 yarte = { version = "^0.15" }
 async-stream = { version = "^0.3" }
 async-stream = { version = "^0.3" }

+ 2 - 3
frameworks/Rust/axum/src/database_mongo.rs

@@ -1,7 +1,7 @@
 use axum::extract::{Extension, FromRequest, RequestParts};
 use axum::extract::{Extension, FromRequest, RequestParts};
 use axum::http::StatusCode;
 use axum::http::StatusCode;
 
 
-use mongodb::{Client, Database, options::ClientOptions};
+use mongodb::{Client, Database};
 use crate::utils::internal_error;
 use crate::utils::internal_error;
 
 
 pub struct DatabaseConnection(pub Database);
 pub struct DatabaseConnection(pub Database);
@@ -14,11 +14,10 @@ impl<B> FromRequest<B> for DatabaseConnection
     type Rejection = (StatusCode, String);
     type Rejection = (StatusCode, String);
 
 
     async fn from_request(req: &mut RequestParts<B>) -> Result<Self, Self::Rejection> {
     async fn from_request(req: &mut RequestParts<B>) -> Result<Self, Self::Rejection> {
-        let Extension(client_options) = Extension::<ClientOptions>::from_request(req)
+        let Extension(client) = Extension::<Client>::from_request(req)
             .await
             .await
             .map_err(internal_error)?;
             .map_err(internal_error)?;
 
 
-        let client = Client::with_options(client_options).unwrap();
         let database = client.database("hello_world");
         let database = client.database("hello_world");
 
 
         Ok(Self(database))
         Ok(Self(database))

+ 4 - 3
frameworks/Rust/axum/src/main_mongo.rs

@@ -26,7 +26,7 @@ use hyper::Body;
 use rand::rngs::SmallRng;
 use rand::rngs::SmallRng;
 use rand::{SeedableRng};
 use rand::{SeedableRng};
 use yarte::Template;
 use yarte::Template;
-use mongodb::{bson::doc, Database};
+use mongodb::{bson::doc, Client, Database};
 use mongodb::options::ClientOptions;
 use mongodb::options::ClientOptions;
 
 
 use models_mongo::{World, Fortune};
 use models_mongo::{World, Fortune};
@@ -111,8 +111,9 @@ async fn main() {
 
 
     // setup connection pool
     // setup connection pool
     let mut client_options = ClientOptions::parse(database_url).await.unwrap();
     let mut client_options = ClientOptions::parse(database_url).await.unwrap();
+    client_options.max_pool_size = Some(100);
 
 
-    client_options.max_pool_size = Some(500);
+    let client = Client::with_options(client_options).unwrap();
 
 
     let app = Router::new()
     let app = Router::new()
         .route("/plaintext", get(plaintext))
         .route("/plaintext", get(plaintext))
@@ -120,7 +121,7 @@ async fn main() {
         .route("/fortunes", get(fortunes))
         .route("/fortunes", get(fortunes))
         .route("/db", get(db))
         .route("/db", get(db))
         .route("/queries", get(queries))
         .route("/queries", get(queries))
-        .layer(AddExtensionLayer::new(client_options))
+        .layer(AddExtensionLayer::new(client))
         .layer(SetResponseHeaderLayer::<_, Body>::if_not_present(header::SERVER, HeaderValue::from_static("Axum")));
         .layer(SetResponseHeaderLayer::<_, Body>::if_not_present(header::SERVER, HeaderValue::from_static("Axum")));
 
 
     axum::Server::bind(&addr)
     axum::Server::bind(&addr)