diff --git a/src/meta-srv/src/bootstrap.rs b/src/meta-srv/src/bootstrap.rs index 211edbbd86..e00b65380a 100644 --- a/src/meta-srv/src/bootstrap.rs +++ b/src/meta-srv/src/bootstrap.rs @@ -291,7 +291,7 @@ pub async fn metasrv_builder( use common_meta::distributed_time_constants::POSTGRES_KEEP_ALIVE_SECS; use common_meta::kv_backend::rds::PgStore; - use deadpool_postgres::Config; + use deadpool_postgres::{Config, ManagerConfig, RecyclingMethod}; use crate::election::rds::postgres::{ElectionPgClient, PgElection}; use crate::utils::postgres::create_postgres_pool; @@ -305,9 +305,16 @@ pub async fn metasrv_builder( let mut cfg = Config::new(); cfg.keepalives = Some(true); cfg.keepalives_idle = Some(Duration::from_secs(POSTGRES_KEEP_ALIVE_SECS)); - // We use a separate pool for election since we need a different session keep-alive idle time. - let pool = create_postgres_pool(&opts.store_addrs, Some(cfg), opts.backend_tls.clone()) - .await?; + cfg.manager = Some(ManagerConfig { + recycling_method: RecyclingMethod::Verified, + }); + // Use a dedicated pool for the election client to allow customized session settings. + let pool = create_postgres_pool( + &opts.store_addrs, + Some(cfg.clone()), + opts.backend_tls.clone(), + ) + .await?; let election_client = ElectionPgClient::new( pool, @@ -327,8 +334,8 @@ pub async fn metasrv_builder( ) .await?; - let pool = - create_postgres_pool(&opts.store_addrs, None, opts.backend_tls.clone()).await?; + let pool = create_postgres_pool(&opts.store_addrs, Some(cfg), opts.backend_tls.clone()) + .await?; let kv_backend = PgStore::with_pg_pool( pool, opts.meta_schema_name.as_deref(),