mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-29 09:07:09 +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]]
|
[[package]]
|
||||||
name = "opentelemetry"
|
name = "opentelemetry"
|
||||||
version = "0.18.0"
|
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 = [
|
dependencies = [
|
||||||
"opentelemetry_api",
|
"opentelemetry_api",
|
||||||
"opentelemetry_sdk",
|
"opentelemetry_sdk",
|
||||||
@ -2959,7 +2959,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "opentelemetry-otlp"
|
name = "opentelemetry-otlp"
|
||||||
version = "0.11.0"
|
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 = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"futures",
|
"futures",
|
||||||
@ -2976,7 +2976,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "opentelemetry-proto"
|
name = "opentelemetry-proto"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"futures",
|
"futures",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
@ -2988,7 +2988,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "opentelemetry_api"
|
name = "opentelemetry_api"
|
||||||
version = "0.18.0"
|
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 = [
|
dependencies = [
|
||||||
"fnv",
|
"fnv",
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
@ -3003,7 +3003,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "opentelemetry_sdk"
|
name = "opentelemetry_sdk"
|
||||||
version = "0.18.0"
|
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 = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
|
|||||||
@ -156,6 +156,7 @@ impl RedisConnectionPool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Drop for RedisConnectionPool {
|
impl Drop for RedisConnectionPool {
|
||||||
|
// safety: panics when invoked without a current tokio runtime
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
let rt = tokio::runtime::Handle::current();
|
let rt = tokio::runtime::Handle::current();
|
||||||
rt.block_on(self.close_connections())
|
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::scheduler::metrics as scheduler_metrics;
|
||||||
use crate::{
|
use crate::{
|
||||||
configs::settings,
|
configs::settings,
|
||||||
connection,
|
|
||||||
core::{
|
core::{
|
||||||
errors::{self, StorageErrorExt},
|
errors::{self, StorageErrorExt},
|
||||||
payment_methods::{
|
payment_methods::{
|
||||||
@ -1531,7 +1530,7 @@ pub async fn list_customer_payment_method(
|
|||||||
};
|
};
|
||||||
customer_pms.push(pma.to_owned());
|
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!(
|
let key_for_hyperswitch_token = format!(
|
||||||
"pm_token_{}_{}_hyperswitch",
|
"pm_token_{}_{}_hyperswitch",
|
||||||
parent_payment_method_token, pma.payment_method
|
parent_payment_method_token, pma.payment_method
|
||||||
|
|||||||
@ -24,7 +24,6 @@ use self::{
|
|||||||
operations::{payment_complete_authorize, BoxedOperation, Operation},
|
operations::{payment_complete_authorize, BoxedOperation, Operation},
|
||||||
};
|
};
|
||||||
use crate::{
|
use crate::{
|
||||||
connection,
|
|
||||||
core::{
|
core::{
|
||||||
errors::{self, CustomResult, RouterResponse, RouterResult},
|
errors::{self, CustomResult, RouterResponse, RouterResult},
|
||||||
payment_methods::vault,
|
payment_methods::vault,
|
||||||
@ -672,7 +671,7 @@ async fn decide_payment_method_tokenize_action(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(token) => {
|
Some(token) => {
|
||||||
let redis_conn = connection::redis_connection(&state.conf).await;
|
let redis_conn = state.store.get_redis_conn();
|
||||||
let key = format!(
|
let key = format!(
|
||||||
"pm_token_{}_{}_{}",
|
"pm_token_{}_{}_{}",
|
||||||
token.to_owned(),
|
token.to_owned(),
|
||||||
|
|||||||
@ -19,7 +19,7 @@ use super::{
|
|||||||
};
|
};
|
||||||
use crate::{
|
use crate::{
|
||||||
configs::settings::Server,
|
configs::settings::Server,
|
||||||
connection, consts,
|
consts,
|
||||||
core::{
|
core::{
|
||||||
errors::{self, CustomResult, RouterResult, StorageErrorExt},
|
errors::{self, CustomResult, RouterResult, StorageErrorExt},
|
||||||
payment_methods::{cards, vault},
|
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 request = &payment_data.payment_method_data;
|
||||||
let token = payment_data.token.clone();
|
let token = payment_data.token.clone();
|
||||||
let hyperswitch_token = if let Some(token) = token {
|
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!(
|
let key = format!(
|
||||||
"pm_token_{}_{}_hyperswitch",
|
"pm_token_{}_{}_hyperswitch",
|
||||||
token,
|
token,
|
||||||
|
|||||||
@ -25,7 +25,10 @@ use std::sync::Arc;
|
|||||||
|
|
||||||
use futures::lock::Mutex;
|
use futures::lock::Mutex;
|
||||||
|
|
||||||
use crate::{services::Store, types::storage};
|
use crate::{
|
||||||
|
services::{self, Store},
|
||||||
|
types::storage,
|
||||||
|
};
|
||||||
|
|
||||||
#[derive(PartialEq, Eq)]
|
#[derive(PartialEq, Eq)]
|
||||||
pub enum StorageImpl {
|
pub enum StorageImpl {
|
||||||
@ -61,10 +64,10 @@ pub trait StorageInterface:
|
|||||||
+ refund::RefundInterface
|
+ refund::RefundInterface
|
||||||
+ reverse_lookup::ReverseLookupInterface
|
+ reverse_lookup::ReverseLookupInterface
|
||||||
+ cards_info::CardsInfoInterface
|
+ cards_info::CardsInfoInterface
|
||||||
|
+ services::RedisConnInterface
|
||||||
+ 'static
|
+ 'static
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
impl StorageInterface for Store {}
|
impl StorageInterface for Store {}
|
||||||
|
|
||||||
@ -117,4 +120,10 @@ where
|
|||||||
.change_context(redis_interface::errors::RedisError::JsonDeserializationFailed)
|
.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);
|
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)]
|
#[derive(Clone)]
|
||||||
pub struct Store {
|
pub struct Store {
|
||||||
pub master_pool: PgPool,
|
pub master_pool: PgPool,
|
||||||
@ -185,3 +189,9 @@ impl Store {
|
|||||||
.change_context(crate::core::errors::StorageError::KVError)
|
.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