mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-30 01:27:31 +08:00
fix(redis): fix recreation on redis connection pool (#1063)
This commit is contained in:
10
Cargo.lock
generated
10
Cargo.lock
generated
@ -2950,7 +2950,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "opentelemetry"
|
||||
version = "0.18.0"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
dependencies = [
|
||||
"opentelemetry_api",
|
||||
"opentelemetry_sdk",
|
||||
@ -2959,7 +2959,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "opentelemetry-otlp"
|
||||
version = "0.11.0"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"futures",
|
||||
@ -2976,7 +2976,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "opentelemetry-proto"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
dependencies = [
|
||||
"futures",
|
||||
"futures-util",
|
||||
@ -2988,7 +2988,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "opentelemetry_api"
|
||||
version = "0.18.0"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
dependencies = [
|
||||
"fnv",
|
||||
"futures-channel",
|
||||
@ -3003,7 +3003,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "opentelemetry_sdk"
|
||||
version = "0.18.0"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"crossbeam-channel",
|
||||
|
||||
@ -156,6 +156,7 @@ impl RedisConnectionPool {
|
||||
}
|
||||
|
||||
impl Drop for RedisConnectionPool {
|
||||
// safety: panics when invoked without a current tokio runtime
|
||||
fn drop(&mut self) {
|
||||
let rt = tokio::runtime::Handle::current();
|
||||
rt.block_on(self.close_connections())
|
||||
|
||||
@ -23,7 +23,6 @@ use storage_models::{enums as storage_enums, payment_method};
|
||||
use crate::scheduler::metrics as scheduler_metrics;
|
||||
use crate::{
|
||||
configs::settings,
|
||||
connection,
|
||||
core::{
|
||||
errors::{self, StorageErrorExt},
|
||||
payment_methods::{
|
||||
@ -1531,7 +1530,7 @@ pub async fn list_customer_payment_method(
|
||||
};
|
||||
customer_pms.push(pma.to_owned());
|
||||
|
||||
let redis_conn = connection::redis_connection(&state.conf).await;
|
||||
let redis_conn = state.store.get_redis_conn();
|
||||
let key_for_hyperswitch_token = format!(
|
||||
"pm_token_{}_{}_hyperswitch",
|
||||
parent_payment_method_token, pma.payment_method
|
||||
|
||||
@ -24,7 +24,6 @@ use self::{
|
||||
operations::{payment_complete_authorize, BoxedOperation, Operation},
|
||||
};
|
||||
use crate::{
|
||||
connection,
|
||||
core::{
|
||||
errors::{self, CustomResult, RouterResponse, RouterResult},
|
||||
payment_methods::vault,
|
||||
@ -672,7 +671,7 @@ async fn decide_payment_method_tokenize_action(
|
||||
}
|
||||
}
|
||||
Some(token) => {
|
||||
let redis_conn = connection::redis_connection(&state.conf).await;
|
||||
let redis_conn = state.store.get_redis_conn();
|
||||
let key = format!(
|
||||
"pm_token_{}_{}_{}",
|
||||
token.to_owned(),
|
||||
|
||||
@ -19,7 +19,7 @@ use super::{
|
||||
};
|
||||
use crate::{
|
||||
configs::settings::Server,
|
||||
connection, consts,
|
||||
consts,
|
||||
core::{
|
||||
errors::{self, CustomResult, RouterResult, StorageErrorExt},
|
||||
payment_methods::{cards, vault},
|
||||
@ -691,7 +691,7 @@ pub async fn make_pm_data<'a, F: Clone, R>(
|
||||
let request = &payment_data.payment_method_data;
|
||||
let token = payment_data.token.clone();
|
||||
let hyperswitch_token = if let Some(token) = token {
|
||||
let redis_conn = connection::redis_connection(&state.conf).await;
|
||||
let redis_conn = state.store.get_redis_conn();
|
||||
let key = format!(
|
||||
"pm_token_{}_{}_hyperswitch",
|
||||
token,
|
||||
|
||||
@ -25,7 +25,10 @@ use std::sync::Arc;
|
||||
|
||||
use futures::lock::Mutex;
|
||||
|
||||
use crate::{services::Store, types::storage};
|
||||
use crate::{
|
||||
services::{self, Store},
|
||||
types::storage,
|
||||
};
|
||||
|
||||
#[derive(PartialEq, Eq)]
|
||||
pub enum StorageImpl {
|
||||
@ -61,10 +64,10 @@ pub trait StorageInterface:
|
||||
+ refund::RefundInterface
|
||||
+ reverse_lookup::ReverseLookupInterface
|
||||
+ cards_info::CardsInfoInterface
|
||||
+ services::RedisConnInterface
|
||||
+ 'static
|
||||
{
|
||||
}
|
||||
|
||||
#[async_trait::async_trait]
|
||||
impl StorageInterface for Store {}
|
||||
|
||||
@ -117,4 +120,10 @@ where
|
||||
.change_context(redis_interface::errors::RedisError::JsonDeserializationFailed)
|
||||
}
|
||||
|
||||
impl services::RedisConnInterface for MockDb {
|
||||
fn get_redis_conn(&self) -> Arc<redis_interface::RedisConnectionPool> {
|
||||
self.redis.clone()
|
||||
}
|
||||
}
|
||||
|
||||
dyn_clone::clone_trait_object!(StorageInterface);
|
||||
|
||||
@ -78,6 +78,10 @@ impl PubSubInterface for redis_interface::RedisConnectionPool {
|
||||
}
|
||||
}
|
||||
|
||||
pub trait RedisConnInterface {
|
||||
fn get_redis_conn(&self) -> Arc<redis_interface::RedisConnectionPool>;
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct Store {
|
||||
pub master_pool: PgPool,
|
||||
@ -185,3 +189,9 @@ impl Store {
|
||||
.change_context(crate::core::errors::StorageError::KVError)
|
||||
}
|
||||
}
|
||||
|
||||
impl RedisConnInterface for Store {
|
||||
fn get_redis_conn(&self) -> Arc<redis_interface::RedisConnectionPool> {
|
||||
self.redis_conn.clone()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user