fix: upgrade to latest deadpool (#1631)

which includes a fix for its incorrect metrics:

https://github.com/bikeshedder/deadpool/issues/92

Closes SYNC-4522
This commit is contained in:
Philip Jenvey 2024-11-21 14:59:40 -08:00 committed by GitHub
parent 9b033edcb0
commit 9a97b6ce1a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 42 additions and 46 deletions

43
Cargo.lock generated
View File

@ -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",

View File

@ -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 = [

View File

@ -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" }

View File

@ -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"] }

View File

@ -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<SpannerSession, DbError>;
pub(crate) type Conn = deadpool::managed::Object<SpannerSessionManager>;
pub(crate) struct SpannerSessionManager {
settings: SpannerSessionSettings,
@ -45,8 +44,10 @@ impl SpannerSessionManager {
}
}
#[async_trait]
impl Manager<SpannerSession, DbError> for SpannerSessionManager {
impl Manager for SpannerSessionManager {
type Type = SpannerSession;
type Error = DbError;
async fn create(&self) -> Result<SpannerSession, DbError> {
let session = create_spanner_session(
&self.settings,
@ -58,7 +59,11 @@ impl Manager<SpannerSession, DbError> for SpannerSessionManager {
Ok(session)
}
async fn recycle(&self, conn: &mut SpannerSession) -> RecycleResult<DbError> {
async fn recycle(
&self,
conn: &mut SpannerSession,
_: &deadpool::managed::Metrics,
) -> RecycleResult<DbError> {
recycle_spanner_session(conn, &self.metrics)
.await
.map_err(RecycleError::Backend)

View File

@ -3,4 +3,3 @@ mod deadpool;
mod session;
pub(super) use self::deadpool::{Conn, SpannerSessionManager};
pub(super) use self::session::SpannerSession;

View File

@ -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<SpannerSession, DbError>,
pool: deadpool::managed::Pool<SpannerSessionManager>,
/// In-memory cache of collection_ids and their names
coll_cache: Arc<CollectionCache>,
@ -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,