mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-11-01 19:42:27 +08:00
refactor(dynamic_routing): make the dynamo configs optional (#8589)
This commit is contained in:
@ -35,7 +35,7 @@ pub type Client = hyper_util::client::legacy::Client<HttpConnector, Body>;
|
||||
pub struct GrpcClients {
|
||||
/// The routing client
|
||||
#[cfg(feature = "dynamic_routing")]
|
||||
pub dynamic_routing: RoutingStrategy,
|
||||
pub dynamic_routing: Option<RoutingStrategy>,
|
||||
/// Health Check client for all gRPC services
|
||||
#[cfg(feature = "dynamic_routing")]
|
||||
pub health_client: HealthCheckClient,
|
||||
@ -47,7 +47,7 @@ pub struct GrpcClients {
|
||||
pub struct GrpcClientSettings {
|
||||
#[cfg(feature = "dynamic_routing")]
|
||||
/// Configs for Dynamic Routing Client
|
||||
pub dynamic_routing_client: DynamicRoutingClientConfig,
|
||||
pub dynamic_routing_client: Option<DynamicRoutingClientConfig>,
|
||||
/// Configs for Unified Connector Service client
|
||||
pub unified_connector_service: Option<UnifiedConnectorServiceClientConfig>,
|
||||
}
|
||||
@ -69,9 +69,10 @@ impl GrpcClientSettings {
|
||||
let dynamic_routing_connection = self
|
||||
.dynamic_routing_client
|
||||
.clone()
|
||||
.get_dynamic_routing_connection(client.clone())
|
||||
.await
|
||||
.expect("Failed to establish a connection with the Dynamic Routing Server");
|
||||
.map(|config| config.get_dynamic_routing_connection(client.clone()))
|
||||
.transpose()
|
||||
.expect("Failed to establish a connection with the Dynamic Routing Server")
|
||||
.flatten();
|
||||
|
||||
#[cfg(feature = "dynamic_routing")]
|
||||
let health_client = HealthCheckClient::build_connections(self, client)
|
||||
|
||||
@ -47,11 +47,11 @@ pub enum DynamicRoutingError {
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct RoutingStrategy {
|
||||
/// success rate service for Dynamic Routing
|
||||
pub success_rate_client: Option<SuccessRateCalculatorClient<Client>>,
|
||||
pub success_rate_client: SuccessRateCalculatorClient<Client>,
|
||||
/// contract based routing service for Dynamic Routing
|
||||
pub contract_based_client: Option<ContractScoreCalculatorClient<Client>>,
|
||||
pub contract_based_client: ContractScoreCalculatorClient<Client>,
|
||||
/// elimination service for Dynamic Routing
|
||||
pub elimination_based_client: Option<EliminationAnalyserClient<Client>>,
|
||||
pub elimination_based_client: EliminationAnalyserClient<Client>,
|
||||
}
|
||||
|
||||
/// Contains the Dynamic Routing Client Config
|
||||
@ -74,32 +74,28 @@ pub enum DynamicRoutingClientConfig {
|
||||
|
||||
impl DynamicRoutingClientConfig {
|
||||
/// establish connection with the server
|
||||
pub async fn get_dynamic_routing_connection(
|
||||
pub fn get_dynamic_routing_connection(
|
||||
self,
|
||||
client: Client,
|
||||
) -> Result<RoutingStrategy, Box<dyn std::error::Error>> {
|
||||
let (success_rate_client, contract_based_client, elimination_based_client) = match self {
|
||||
) -> Result<Option<RoutingStrategy>, Box<dyn std::error::Error>> {
|
||||
match self {
|
||||
Self::Enabled { host, port, .. } => {
|
||||
let uri = format!("http://{host}:{port}").parse::<tonic::transport::Uri>()?;
|
||||
logger::info!("Connection established with dynamic routing gRPC Server");
|
||||
(
|
||||
Some(SuccessRateCalculatorClient::with_origin(
|
||||
client.clone(),
|
||||
uri.clone(),
|
||||
)),
|
||||
Some(ContractScoreCalculatorClient::with_origin(
|
||||
client.clone(),
|
||||
uri.clone(),
|
||||
)),
|
||||
Some(EliminationAnalyserClient::with_origin(client, uri)),
|
||||
)
|
||||
|
||||
let (success_rate_client, contract_based_client, elimination_based_client) = (
|
||||
SuccessRateCalculatorClient::with_origin(client.clone(), uri.clone()),
|
||||
ContractScoreCalculatorClient::with_origin(client.clone(), uri.clone()),
|
||||
EliminationAnalyserClient::with_origin(client, uri),
|
||||
);
|
||||
|
||||
Ok(Some(RoutingStrategy {
|
||||
success_rate_client,
|
||||
contract_based_client,
|
||||
elimination_based_client,
|
||||
}))
|
||||
}
|
||||
Self::Disabled => (None, None, None),
|
||||
};
|
||||
Ok(RoutingStrategy {
|
||||
success_rate_client,
|
||||
contract_based_client,
|
||||
elimination_based_client,
|
||||
})
|
||||
Self::Disabled => Ok(None),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -53,11 +53,11 @@ impl HealthCheckClient {
|
||||
) -> Result<Self, Box<dyn std::error::Error>> {
|
||||
let dynamic_routing_config = &config.dynamic_routing_client;
|
||||
let connection = match dynamic_routing_config {
|
||||
DynamicRoutingClientConfig::Enabled {
|
||||
Some(DynamicRoutingClientConfig::Enabled {
|
||||
host,
|
||||
port,
|
||||
service,
|
||||
} => Some((host.clone(), *port, service.clone())),
|
||||
}) => Some((host.clone(), *port, service.clone())),
|
||||
_ => None,
|
||||
};
|
||||
|
||||
@ -81,11 +81,11 @@ impl HealthCheckClient {
|
||||
) -> HealthCheckResult<HealthCheckMap> {
|
||||
let dynamic_routing_config = &config.dynamic_routing_client;
|
||||
let connection = match dynamic_routing_config {
|
||||
DynamicRoutingClientConfig::Enabled {
|
||||
Some(DynamicRoutingClientConfig::Enabled {
|
||||
host,
|
||||
port,
|
||||
service,
|
||||
} => Some((host.clone(), *port, service.clone())),
|
||||
}) => Some((host.clone(), *port, service.clone())),
|
||||
_ => None,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user