diff --git a/Cargo.lock b/Cargo.lock index 4f364aac..d2257f84 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -609,17 +609,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "config" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b076e143e1d9538dde65da30f8481c2a6c44040edb8e02b9bf1351edb92ce3" -dependencies = [ - "lazy_static", - "nom 5.1.3", - "serde 1.0.203", -] - [[package]] name = "config" version = "0.11.0" @@ -686,15 +675,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "crossbeam-queue" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.20" @@ -778,14 +758,21 @@ dependencies = [ [[package]] name = "deadpool" -version = "0.7.0" -source = "git+https://github.com/mozilla-services/deadpool?tag=deadpool-v0.7.0#4e041037f758186e62021021e130926d5302ebe8" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6541a3916932fe57768d4be0b1ffb5ec7cbf74ca8c903fdfd5c0fe8aa958f0ed" dependencies = [ - "async-trait", - "config 0.10.1", - "crossbeam-queue", + "deadpool-runtime", "num_cpus", - "serde 1.0.203", + "tokio", +] + +[[package]] +name = "deadpool-runtime" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" +dependencies = [ "tokio", ] @@ -1630,7 +1617,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.52.5", ] [[package]] @@ -2911,7 +2898,7 @@ dependencies = [ name = "syncserver-settings" version = "0.17.12" dependencies = [ - "config 0.11.0", + "config", "num_cpus", "serde 1.0.203", "slog-scope", diff --git a/Cargo.toml b/Cargo.toml index de5dc7e9..d7745cfc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,6 +43,7 @@ diesel_logger = "0.1" cadence = "1.3" backtrace = "0.3" chrono = "0.4" +deadpool = { version = "0.12", features = ["rt_tokio_1"] } env_logger = "0.11" futures = { version = "0.3", features = ["compat"] } futures-util = { version = "0.3", features = [ diff --git a/syncserver-db-common/Cargo.toml b/syncserver-db-common/Cargo.toml index 7102d96a..499aa274 100644 --- a/syncserver-db-common/Cargo.toml +++ b/syncserver-db-common/Cargo.toml @@ -7,11 +7,11 @@ edition.workspace = true [dependencies] backtrace.workspace = true +deadpool.workspace = true futures.workspace = true http.workspace = true thiserror.workspace = true diesel = { workspace = true, features = ["mysql", "r2d2"] } -deadpool = { git = "https://github.com/mozilla-services/deadpool", tag = "deadpool-v0.7.0" } diesel_migrations = { workspace = true, features = ["mysql"] } syncserver-common = { path = "../syncserver-common" } diff --git a/syncstorage-spanner/Cargo.toml b/syncstorage-spanner/Cargo.toml index 212efcbe..6bde3064 100644 --- a/syncstorage-spanner/Cargo.toml +++ b/syncstorage-spanner/Cargo.toml @@ -8,6 +8,7 @@ edition.workspace = true [dependencies] backtrace.workspace = true cadence.workspace = true +deadpool.workspace = true env_logger.workspace = true futures.workspace = true http.workspace = true @@ -16,7 +17,6 @@ thiserror.workspace = true async-trait = "0.1.40" google-cloud-rust-raw = { version = "0.16.1", features = ["spanner"] } -deadpool = { git = "https://github.com/mozilla-services/deadpool", tag = "deadpool-v0.7.0" } form_urlencoded = "1.2" # Some versions of OpenSSL 1.1.1 conflict with grpcio's built-in boringssl which can cause # syncserver to either fail to either compile, or start. In those cases, try @@ -34,7 +34,7 @@ syncstorage-settings = { path = "../syncstorage-settings" } tokio = { workspace = true, features = [ "macros", "sync", -] } # pinning to 0.2.4 due to high number of dependencies (actix, bb8, deadpool, etc.) +] } url = "2.1" uuid = { version = "1.6", features = ["serde", "v4"] } diff --git a/syncstorage-spanner/src/manager/deadpool.rs b/syncstorage-spanner/src/manager/deadpool.rs index 80652f82..721d305e 100644 --- a/syncstorage-spanner/src/manager/deadpool.rs +++ b/syncstorage-spanner/src/manager/deadpool.rs @@ -1,6 +1,5 @@ use std::{fmt, sync::Arc}; -use async_trait::async_trait; use deadpool::managed::{Manager, RecycleError, RecycleResult}; use grpcio::{EnvBuilder, Environment}; use syncserver_common::{BlockingThreadpool, Metrics}; @@ -11,7 +10,7 @@ use super::session::{ }; use crate::error::DbError; -pub(crate) type Conn = deadpool::managed::Object; +pub(crate) type Conn = deadpool::managed::Object; pub(crate) struct SpannerSessionManager { settings: SpannerSessionSettings, @@ -45,8 +44,10 @@ impl SpannerSessionManager { } } -#[async_trait] -impl Manager for SpannerSessionManager { +impl Manager for SpannerSessionManager { + type Type = SpannerSession; + type Error = DbError; + async fn create(&self) -> Result { let session = create_spanner_session( &self.settings, @@ -58,7 +59,11 @@ impl Manager for SpannerSessionManager { Ok(session) } - async fn recycle(&self, conn: &mut SpannerSession) -> RecycleResult { + async fn recycle( + &self, + conn: &mut SpannerSession, + _: &deadpool::managed::Metrics, + ) -> RecycleResult { recycle_spanner_session(conn, &self.metrics) .await .map_err(RecycleError::Backend) diff --git a/syncstorage-spanner/src/manager/mod.rs b/syncstorage-spanner/src/manager/mod.rs index b1e20c53..55de7974 100644 --- a/syncstorage-spanner/src/manager/mod.rs +++ b/syncstorage-spanner/src/manager/mod.rs @@ -3,4 +3,3 @@ mod deadpool; mod session; pub(super) use self::deadpool::{Conn, SpannerSessionManager}; -pub(super) use self::session::SpannerSession; diff --git a/syncstorage-spanner/src/pool.rs b/syncstorage-spanner/src/pool.rs index 35de15dd..4035b52c 100644 --- a/syncstorage-spanner/src/pool.rs +++ b/syncstorage-spanner/src/pool.rs @@ -8,17 +8,12 @@ use syncstorage_settings::{Quota, Settings}; use tokio::sync::RwLock; pub(super) use super::manager::Conn; -use super::{ - error::DbError, - manager::{SpannerSession, SpannerSessionManager}, - models::SpannerDb, - DbResult, -}; +use super::{error::DbError, manager::SpannerSessionManager, models::SpannerDb, DbResult}; #[derive(Clone)] pub struct SpannerDbPool { /// Pool of db connections - pool: deadpool::managed::Pool, + pool: deadpool::managed::Pool, /// In-memory cache of collection_ids and their names coll_cache: Arc, @@ -51,8 +46,16 @@ impl SpannerDbPool { wait, ..Default::default() }; - let config = deadpool::managed::PoolConfig { max_size, timeouts }; - let pool = deadpool::managed::Pool::from_config(manager, config); + let config = deadpool::managed::PoolConfig { + max_size, + timeouts, + ..Default::default() + }; + let pool = deadpool::managed::Pool::builder(manager) + .config(config) + .runtime(deadpool::Runtime::Tokio1) + .build() + .map_err(|e| DbError::internal(format!("Couldn't build Db Pool: {}", e)))?; Ok(Self { pool, @@ -72,6 +75,7 @@ impl SpannerDbPool { deadpool::managed::PoolError::Timeout(timeout_type) => { DbError::internal(format!("deadpool Timeout: {:?}", timeout_type)) } + _ => DbError::internal(format!("deadpool PoolError: {}", e)), })?; Ok(SpannerDb::new( conn,