Skip to content

Commit 922b1a3

Browse files
committed
lbp_config: remove DcAwareness and introduce LoadBalancingKind enum
Introduced for multiple reasons: - rack awareness will be introduced soon - preparation for another refactor in next commit.
1 parent 8bd5c84 commit 922b1a3

File tree

2 files changed

+33
-18
lines changed

2 files changed

+33
-18
lines changed

scylla-rust-wrapper/src/cluster.rs

+20-13
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ const DRIVER_VERSION: &str = env!("CARGO_PKG_VERSION");
5151
pub(crate) struct LoadBalancingConfig {
5252
pub(crate) token_awareness_enabled: bool,
5353
pub(crate) token_aware_shuffling_replicas_enabled: bool,
54-
pub(crate) dc_awareness: Option<DcAwareness>,
54+
pub(crate) load_balancing_kind: LoadBalancingKind,
5555
pub(crate) latency_awareness_enabled: bool,
5656
pub(crate) latency_awareness_builder: LatencyAwarenessBuilder,
5757
}
@@ -65,10 +65,8 @@ impl LoadBalancingConfig {
6565
builder =
6666
builder.enable_shuffling_replicas(self.token_aware_shuffling_replicas_enabled);
6767
}
68-
if let Some(dc_awareness) = self.dc_awareness {
69-
builder = builder
70-
.prefer_datacenter(dc_awareness.local_dc)
71-
.permit_dc_failover(true)
68+
if let LoadBalancingKind::DcAware { local_dc } = self.load_balancing_kind {
69+
builder = builder.prefer_datacenter(local_dc).permit_dc_failover(true)
7270
}
7371
if self.latency_awareness_enabled {
7472
builder = builder.latency_awareness(self.latency_awareness_builder);
@@ -81,16 +79,17 @@ impl Default for LoadBalancingConfig {
8179
Self {
8280
token_awareness_enabled: true,
8381
token_aware_shuffling_replicas_enabled: true,
84-
dc_awareness: None,
82+
load_balancing_kind: LoadBalancingKind::RoundRobin,
8583
latency_awareness_enabled: false,
8684
latency_awareness_builder: Default::default(),
8785
}
8886
}
8987
}
9088

9189
#[derive(Clone, Debug)]
92-
pub(crate) struct DcAwareness {
93-
pub(crate) local_dc: String,
90+
pub(crate) enum LoadBalancingKind {
91+
RoundRobin,
92+
DcAware { local_dc: String },
9493
}
9594

9695
#[derive(Clone)]
@@ -457,7 +456,7 @@ pub unsafe extern "C" fn cass_cluster_set_credentials_n(
457456
#[no_mangle]
458457
pub unsafe extern "C" fn cass_cluster_set_load_balance_round_robin(cluster_raw: *mut CassCluster) {
459458
let cluster = ptr_to_ref_mut(cluster_raw);
460-
cluster.load_balancing_config.dc_awareness = None;
459+
cluster.load_balancing_config.load_balancing_kind = LoadBalancingKind::RoundRobin;
461460
}
462461

463462
#[no_mangle]
@@ -496,7 +495,7 @@ pub(crate) unsafe fn set_load_balance_dc_aware_n(
496495
.unwrap()
497496
.to_string();
498497

499-
load_balancing_config.dc_awareness = Some(DcAwareness { local_dc });
498+
load_balancing_config.load_balancing_kind = LoadBalancingKind::DcAware { local_dc };
500499

501500
CassError::CASS_OK
502501
}
@@ -851,7 +850,10 @@ mod tests {
851850
/* Test valid configurations */
852851
let cluster = ptr_to_ref(cluster_raw);
853852
{
854-
assert_matches!(cluster.load_balancing_config.dc_awareness, None);
853+
assert_matches!(
854+
cluster.load_balancing_config.load_balancing_kind,
855+
LoadBalancingKind::RoundRobin
856+
);
855857
assert!(cluster.load_balancing_config.token_awareness_enabled);
856858
assert!(!cluster.load_balancing_config.latency_awareness_enabled);
857859
}
@@ -878,8 +880,13 @@ mod tests {
878880
40,
879881
);
880882

881-
let dc_awareness = cluster.load_balancing_config.dc_awareness.as_ref().unwrap();
882-
assert_eq!(dc_awareness.local_dc, "eu");
883+
let load_balancing_kind = &cluster.load_balancing_config.load_balancing_kind;
884+
match load_balancing_kind {
885+
LoadBalancingKind::DcAware { local_dc } => {
886+
assert_eq!(local_dc, "eu")
887+
}
888+
_ => panic!("Expected preferred dc"),
889+
}
883890
assert!(!cluster.load_balancing_config.token_awareness_enabled);
884891
assert!(cluster.load_balancing_config.latency_awareness_enabled);
885892
}

scylla-rust-wrapper/src/exec_profile.rs

+13-5
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use crate::argconv::{free_boxed, ptr_to_cstr_n, ptr_to_ref, ptr_to_ref_mut, strl
1717
use crate::batch::CassBatch;
1818
use crate::cass_error::CassError;
1919
use crate::cass_types::CassConsistency;
20-
use crate::cluster::{set_load_balance_dc_aware_n, LoadBalancingConfig};
20+
use crate::cluster::{set_load_balance_dc_aware_n, LoadBalancingConfig, LoadBalancingKind};
2121
use crate::retry_policy::CassRetryPolicy;
2222
use crate::retry_policy::RetryPolicy::{
2323
DefaultRetryPolicy, DowngradingConsistencyRetryPolicy, FallthroughRetryPolicy,
@@ -353,7 +353,7 @@ pub unsafe extern "C" fn cass_execution_profile_set_load_balance_round_robin(
353353
profile: *mut CassExecProfile,
354354
) -> CassError {
355355
let profile_builder = ptr_to_ref_mut(profile);
356-
profile_builder.load_balancing_config.dc_awareness = None;
356+
profile_builder.load_balancing_config.load_balancing_kind = LoadBalancingKind::RoundRobin;
357357

358358
CassError::CASS_OK
359359
}
@@ -473,7 +473,10 @@ mod tests {
473473
/* Test valid configurations */
474474
let profile = ptr_to_ref(profile_raw);
475475
{
476-
assert_matches!(profile.load_balancing_config.dc_awareness, None);
476+
assert_matches!(
477+
profile.load_balancing_config.load_balancing_kind,
478+
LoadBalancingKind::RoundRobin
479+
);
477480
assert!(profile.load_balancing_config.token_awareness_enabled);
478481
assert!(!profile.load_balancing_config.latency_awareness_enabled);
479482
}
@@ -500,8 +503,13 @@ mod tests {
500503
40,
501504
);
502505

503-
let dc_awareness = profile.load_balancing_config.dc_awareness.as_ref().unwrap();
504-
assert_eq!(dc_awareness.local_dc, "eu");
506+
let load_balancing_kind = &profile.load_balancing_config.load_balancing_kind;
507+
match load_balancing_kind {
508+
LoadBalancingKind::DcAware { local_dc } => {
509+
assert_eq!(local_dc, "eu")
510+
}
511+
_ => panic!("Expected preferred dc"),
512+
}
505513
assert!(!profile.load_balancing_config.token_awareness_enabled);
506514
assert!(profile.load_balancing_config.latency_awareness_enabled);
507515
}

0 commit comments

Comments
 (0)