mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-11-01 02:57:02 +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
	 Abhishek
					Abhishek