diff --git a/Cargo.lock b/Cargo.lock index 59f9f8b3a..8c82ffb25 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6501,6 +6501,7 @@ dependencies = [ "openmls_basic_credential", "openmls_rust_crypto", "openmls_traits", + "parking_lot", "prost 0.12.6", "rand", "reqwest 0.12.4", diff --git a/xmtp_mls/Cargo.toml b/xmtp_mls/Cargo.toml index e7e0b103a..e7d33fbf5 100644 --- a/xmtp_mls/Cargo.toml +++ b/xmtp_mls/Cargo.toml @@ -31,6 +31,7 @@ ed25519-dalek = "2.1.1" ethers.workspace = true ethers-core.workspace = true futures.workspace = true +parking_lot = "0.12.3" hex.workspace = true libsqlite3-sys = { version = "0.28.0", optional = true } log.workspace = true diff --git a/xmtp_mls/src/storage/encrypted_store/mod.rs b/xmtp_mls/src/storage/encrypted_store/mod.rs index 22d3ab145..2b3eb7138 100644 --- a/xmtp_mls/src/storage/encrypted_store/mod.rs +++ b/xmtp_mls/src/storage/encrypted_store/mod.rs @@ -21,10 +21,7 @@ pub mod key_store_entry; pub mod refresh_state; pub mod schema; -use std::{ - borrow::Cow, - sync::{Arc, RwLock}, -}; +use std::{borrow::Cow, sync::Arc}; use diesel::{ connection::{AnsiTransactionManager, SimpleConnection, TransactionManager}, @@ -35,6 +32,7 @@ use diesel::{ }; use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness}; use log::{log_enabled, warn}; +use parking_lot::RwLock; use rand::RngCore; use xmtp_cryptography::utils as crypto_utils; @@ -180,12 +178,18 @@ impl EncryptedMessageStore { fn raw_conn( &self, ) -> Result>, StorageError> { - let pool_guard = self.pool.read()?; + let pool_guard = self.pool.read(); let pool = pool_guard .as_ref() .ok_or(StorageError::PoolNeedsConnection)?; + log::info!( + "Pulling connection from pool, idle_connections={}, total_connections={}", + pool.state().idle_connections, + pool.state().connections + ); + let mut conn = pool.get()?; if let Some(ref key) = self.enc_key { conn.batch_execute(&format!("PRAGMA key = \"x'{}'\";", hex::encode(key)))?; @@ -314,7 +318,7 @@ impl EncryptedMessageStore { } pub fn release_connection(&self) -> Result<(), StorageError> { - let mut pool_guard = self.pool.write()?; + let mut pool_guard = self.pool.write(); pool_guard.take(); Ok(()) } @@ -330,7 +334,7 @@ impl EncryptedMessageStore { .build(ConnectionManager::::new(path))?, }; - let mut pool_write = self.pool.write()?; + let mut pool_write = self.pool.write(); *pool_write = Some(pool); Ok(()) @@ -534,7 +538,7 @@ mod tests { assert_eq!(fetched_identity.inbox_id, inbox_id); store.release_connection().unwrap(); - assert!(store.pool.read().unwrap().is_none()); + assert!(store.pool.read().is_none()); store.reconnect().unwrap(); let fetched_identity2: StoredIdentity = conn.fetch(&()).unwrap().unwrap();