Skip to content

Commit 982c27f

Browse files
fix(redis): fix recreation on redis connection pool (#1063)
1 parent 3131bc8 commit 982c27f

File tree

7 files changed

+31
-13
lines changed

7 files changed

+31
-13
lines changed

Cargo.lock

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/redis_interface/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ impl RedisConnectionPool {
156156
}
157157

158158
impl Drop for RedisConnectionPool {
159+
// safety: panics when invoked without a current tokio runtime
159160
fn drop(&mut self) {
160161
let rt = tokio::runtime::Handle::current();
161162
rt.block_on(self.close_connections())

crates/router/src/core/payment_methods/cards.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ use storage_models::{enums as storage_enums, payment_method};
2323
use crate::scheduler::metrics as scheduler_metrics;
2424
use crate::{
2525
configs::settings,
26-
connection,
2726
core::{
2827
errors::{self, StorageErrorExt},
2928
payment_methods::{
@@ -1531,7 +1530,7 @@ pub async fn list_customer_payment_method(
15311530
};
15321531
customer_pms.push(pma.to_owned());
15331532

1534-
let redis_conn = connection::redis_connection(&state.conf).await;
1533+
let redis_conn = state.store.get_redis_conn();
15351534
let key_for_hyperswitch_token = format!(
15361535
"pm_token_{}_{}_hyperswitch",
15371536
parent_payment_method_token, pma.payment_method

crates/router/src/core/payments.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ use self::{
2424
operations::{payment_complete_authorize, BoxedOperation, Operation},
2525
};
2626
use crate::{
27-
connection,
2827
core::{
2928
errors::{self, CustomResult, RouterResponse, RouterResult},
3029
payment_methods::vault,
@@ -672,7 +671,7 @@ async fn decide_payment_method_tokenize_action(
672671
}
673672
}
674673
Some(token) => {
675-
let redis_conn = connection::redis_connection(&state.conf).await;
674+
let redis_conn = state.store.get_redis_conn();
676675
let key = format!(
677676
"pm_token_{}_{}_{}",
678677
token.to_owned(),

crates/router/src/core/payments/helpers.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use super::{
1919
};
2020
use crate::{
2121
configs::settings::Server,
22-
connection, consts,
22+
consts,
2323
core::{
2424
errors::{self, CustomResult, RouterResult, StorageErrorExt},
2525
payment_methods::{cards, vault},
@@ -691,7 +691,7 @@ pub async fn make_pm_data<'a, F: Clone, R>(
691691
let request = &payment_data.payment_method_data;
692692
let token = payment_data.token.clone();
693693
let hyperswitch_token = if let Some(token) = token {
694-
let redis_conn = connection::redis_connection(&state.conf).await;
694+
let redis_conn = state.store.get_redis_conn();
695695
let key = format!(
696696
"pm_token_{}_{}_hyperswitch",
697697
token,

crates/router/src/db.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ use std::sync::Arc;
2525

2626
use futures::lock::Mutex;
2727

28-
use crate::{services::Store, types::storage};
28+
use crate::{
29+
services::{self, Store},
30+
types::storage,
31+
};
2932

3033
#[derive(PartialEq, Eq)]
3134
pub enum StorageImpl {
@@ -61,10 +64,10 @@ pub trait StorageInterface:
6164
+ refund::RefundInterface
6265
+ reverse_lookup::ReverseLookupInterface
6366
+ cards_info::CardsInfoInterface
67+
+ services::RedisConnInterface
6468
+ 'static
6569
{
6670
}
67-
6871
#[async_trait::async_trait]
6972
impl StorageInterface for Store {}
7073

@@ -117,4 +120,10 @@ where
117120
.change_context(redis_interface::errors::RedisError::JsonDeserializationFailed)
118121
}
119122

123+
impl services::RedisConnInterface for MockDb {
124+
fn get_redis_conn(&self) -> Arc<redis_interface::RedisConnectionPool> {
125+
self.redis.clone()
126+
}
127+
}
128+
120129
dyn_clone::clone_trait_object!(StorageInterface);

crates/router/src/services.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ impl PubSubInterface for redis_interface::RedisConnectionPool {
7878
}
7979
}
8080

81+
pub trait RedisConnInterface {
82+
fn get_redis_conn(&self) -> Arc<redis_interface::RedisConnectionPool>;
83+
}
84+
8185
#[derive(Clone)]
8286
pub struct Store {
8387
pub master_pool: PgPool,
@@ -185,3 +189,9 @@ impl Store {
185189
.change_context(crate::core::errors::StorageError::KVError)
186190
}
187191
}
192+
193+
impl RedisConnInterface for Store {
194+
fn get_redis_conn(&self) -> Arc<redis_interface::RedisConnectionPool> {
195+
self.redis_conn.clone()
196+
}
197+
}

0 commit comments

Comments
 (0)