mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-30 17:47:54 +08:00
refactor(drainer): removed fred dependency from drainer (#171)
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -1149,7 +1149,6 @@ name = "drainer"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"error-stack",
|
"error-stack",
|
||||||
"fred",
|
|
||||||
"redis_interface",
|
"redis_interface",
|
||||||
"router",
|
"router",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
|||||||
@ -9,11 +9,11 @@ license = "Apache-2.0"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
error-stack = "0.2.4"
|
error-stack = "0.2.4"
|
||||||
fred = { version = "5.2.0", features = ["metrics", "partial-tracing"] }
|
|
||||||
serde_json = "1.0.89"
|
serde_json = "1.0.89"
|
||||||
structopt = "0.3.26"
|
structopt = "0.3.26"
|
||||||
thiserror = "1.0.37"
|
thiserror = "1.0.37"
|
||||||
tokio = { version = "1.21.2", features = ["macros", "rt-multi-thread"] }
|
tokio = { version = "1.21.2", features = ["macros", "rt-multi-thread"] }
|
||||||
|
|
||||||
# First Party Crates
|
# First Party Crates
|
||||||
redis_interface = { version = "0.1.0", path = "../redis_interface" }
|
redis_interface = { version = "0.1.0", path = "../redis_interface" }
|
||||||
router = { version = "0.2.0", path = "../router", features = ["kv_store"] }
|
router = { version = "0.2.0", path = "../router", features = ["kv_store"] }
|
||||||
|
|||||||
@ -60,15 +60,18 @@ async fn drainer(
|
|||||||
};
|
};
|
||||||
|
|
||||||
let conn = pg_connection(&store.master_pool).await;
|
let conn = pg_connection(&store.master_pool).await;
|
||||||
|
let insert_op = "insert";
|
||||||
|
let update_op = "update";
|
||||||
|
let payment_intent = "payment_intent";
|
||||||
|
let payment_attempt = "payment_attempt";
|
||||||
match db_op {
|
match db_op {
|
||||||
// TODO: Handle errors
|
// TODO: Handle errors
|
||||||
kv::DBOperation::Insert { insertable } => match insertable {
|
kv::DBOperation::Insert { insertable } => match insertable {
|
||||||
kv::Insertable::PaymentIntent(a) => {
|
kv::Insertable::PaymentIntent(a) => {
|
||||||
macro_util::handle_resp!(a.insert(&conn).await, "ins", "pi")
|
macro_util::handle_resp!(a.insert(&conn).await, insert_op, payment_intent)
|
||||||
}
|
}
|
||||||
kv::Insertable::PaymentAttempt(a) => {
|
kv::Insertable::PaymentAttempt(a) => {
|
||||||
macro_util::handle_resp!(a.insert(&conn).await, "ins", "pa")
|
macro_util::handle_resp!(a.insert(&conn).await, insert_op, payment_attempt)
|
||||||
}
|
}
|
||||||
kv::Insertable::Refund(a) => {
|
kv::Insertable::Refund(a) => {
|
||||||
macro_util::handle_resp!(a.insert(&conn).await, "ins", "ref")
|
macro_util::handle_resp!(a.insert(&conn).await, "ins", "ref")
|
||||||
@ -76,10 +79,18 @@ async fn drainer(
|
|||||||
},
|
},
|
||||||
kv::DBOperation::Update { updatable } => match updatable {
|
kv::DBOperation::Update { updatable } => match updatable {
|
||||||
kv::Updateable::PaymentIntentUpdate(a) => {
|
kv::Updateable::PaymentIntentUpdate(a) => {
|
||||||
macro_util::handle_resp!(a.orig.update(&conn, a.update_data).await, "up", "pi")
|
macro_util::handle_resp!(
|
||||||
|
a.orig.update(&conn, a.update_data).await,
|
||||||
|
update_op,
|
||||||
|
payment_intent
|
||||||
|
)
|
||||||
}
|
}
|
||||||
kv::Updateable::PaymentAttemptUpdate(a) => {
|
kv::Updateable::PaymentAttemptUpdate(a) => {
|
||||||
macro_util::handle_resp!(a.orig.update(&conn, a.update_data).await, "up", "pa")
|
macro_util::handle_resp!(
|
||||||
|
a.orig.update(&conn, a.update_data).await,
|
||||||
|
update_op,
|
||||||
|
payment_attempt
|
||||||
|
)
|
||||||
}
|
}
|
||||||
kv::Updateable::RefundUpdate(a) => {
|
kv::Updateable::RefundUpdate(a) => {
|
||||||
macro_util::handle_resp!(a.orig.update(&conn, a.update_data).await, "up", "ref")
|
macro_util::handle_resp!(a.orig.update(&conn, a.update_data).await, "up", "ref")
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
use std::{collections::HashMap, sync::Arc};
|
use std::{collections::HashMap, sync::Arc};
|
||||||
|
|
||||||
use error_stack::{IntoReport, ResultExt};
|
use error_stack::{IntoReport, ResultExt};
|
||||||
use fred::types as fred;
|
|
||||||
use redis_interface as redis;
|
use redis_interface as redis;
|
||||||
use router::services::Store;
|
use router::services::Store;
|
||||||
|
|
||||||
@ -31,11 +30,10 @@ pub async fn read_from_stream(
|
|||||||
max_read_count: u64,
|
max_read_count: u64,
|
||||||
redis: &redis::RedisConnectionPool,
|
redis: &redis::RedisConnectionPool,
|
||||||
) -> errors::DrainerResult<StreamReadResult> {
|
) -> errors::DrainerResult<StreamReadResult> {
|
||||||
let stream_key = fred::MultipleKeys::from(stream_name);
|
|
||||||
// "0-0" id gives first entry
|
// "0-0" id gives first entry
|
||||||
let stream_id = "0-0";
|
let stream_id = "0-0";
|
||||||
let entries = redis
|
let entries = redis
|
||||||
.stream_read_entries(stream_key, stream_id, Some(max_read_count))
|
.stream_read_entries(stream_name, stream_id, Some(max_read_count))
|
||||||
.await
|
.await
|
||||||
.change_context(errors::DrainerError::StreamReadError(
|
.change_context(errors::DrainerError::StreamReadError(
|
||||||
stream_name.to_owned(),
|
stream_name.to_owned(),
|
||||||
@ -48,17 +46,11 @@ pub async fn trim_from_stream(
|
|||||||
minimum_entry_id: &str,
|
minimum_entry_id: &str,
|
||||||
redis: &redis::RedisConnectionPool,
|
redis: &redis::RedisConnectionPool,
|
||||||
) -> errors::DrainerResult<usize> {
|
) -> errors::DrainerResult<usize> {
|
||||||
let trim_kind = fred::XCapKind::MinID;
|
let trim_kind = redis::StreamCapKind::MinID;
|
||||||
let trim_type = fred::XCapTrim::Exact;
|
let trim_type = redis::StreamCapTrim::Exact;
|
||||||
let trim_id = fred::StringOrNumber::String(minimum_entry_id.into());
|
let trim_id = minimum_entry_id;
|
||||||
let xcap = fred::XCap::try_from((trim_kind, trim_type, trim_id))
|
|
||||||
.into_report()
|
|
||||||
.change_context(errors::DrainerError::StreamTrimFailed(
|
|
||||||
stream_name.to_owned(),
|
|
||||||
))?;
|
|
||||||
|
|
||||||
let trim_result = redis
|
let trim_result = redis
|
||||||
.stream_trim_entries(stream_name, xcap)
|
.stream_trim_entries(stream_name, (trim_kind, trim_type, trim_id))
|
||||||
.await
|
.await
|
||||||
.change_context(errors::DrainerError::StreamTrimFailed(
|
.change_context(errors::DrainerError::StreamTrimFailed(
|
||||||
stream_name.to_owned(),
|
stream_name.to_owned(),
|
||||||
|
|||||||
@ -142,3 +142,33 @@ impl fred::types::FromRedis for MsetnxReply {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum StreamCapKind {
|
||||||
|
MinID,
|
||||||
|
MaxLen,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<StreamCapKind> for fred::types::XCapKind {
|
||||||
|
fn from(item: StreamCapKind) -> Self {
|
||||||
|
match item {
|
||||||
|
StreamCapKind::MaxLen => Self::MaxLen,
|
||||||
|
StreamCapKind::MinID => Self::MinID,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum StreamCapTrim {
|
||||||
|
Exact,
|
||||||
|
AlmostExact,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<StreamCapTrim> for fred::types::XCapTrim {
|
||||||
|
fn from(item: StreamCapTrim) -> Self {
|
||||||
|
match item {
|
||||||
|
StreamCapTrim::Exact => Self::Exact,
|
||||||
|
StreamCapTrim::AlmostExact => Self::AlmostExact,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user