Skip to content

Commit e4396cd

Browse files
authored
Merge pull request #170 from muzarski/shuffled-replicas
exec_profile: token aware routing with shuffling setting
2 parents ada318b + 459ba5d commit e4396cd

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

scylla-rust-wrapper/src/cluster.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ const DRIVER_VERSION: &str = env!("CARGO_PKG_VERSION");
4040
#[derive(Clone, Debug)]
4141
pub(crate) struct LoadBalancingConfig {
4242
pub(crate) token_awareness_enabled: bool,
43+
pub(crate) token_aware_shuffling_replicas_enabled: bool,
4344
pub(crate) dc_awareness: Option<DcAwareness>,
4445
pub(crate) latency_awareness_enabled: bool,
4546
pub(crate) latency_awareness_builder: LatencyAwarenessBuilder,
@@ -49,6 +50,11 @@ impl LoadBalancingConfig {
4950
// as it results in panic due to DefaultPolicyBuilder::build() spawning a tokio task.
5051
pub(crate) async fn build(self) -> Arc<dyn LoadBalancingPolicy> {
5152
let mut builder = DefaultPolicyBuilder::new().token_aware(self.token_awareness_enabled);
53+
if self.token_awareness_enabled {
54+
// Cpp-driver enables shuffling replicas only if token aware routing is enabled.
55+
builder =
56+
builder.enable_shuffling_replicas(self.token_aware_shuffling_replicas_enabled);
57+
}
5258
if let Some(dc_awareness) = self.dc_awareness.as_ref() {
5359
builder = builder
5460
.prefer_datacenter(dc_awareness.local_dc.clone())
@@ -64,6 +70,7 @@ impl Default for LoadBalancingConfig {
6470
fn default() -> Self {
6571
Self {
6672
token_awareness_enabled: true,
73+
token_aware_shuffling_replicas_enabled: true,
6774
dc_awareness: None,
6875
latency_awareness_enabled: false,
6976
latency_awareness_builder: Default::default(),
@@ -619,6 +626,18 @@ pub unsafe extern "C" fn cass_cluster_set_token_aware_routing(
619626
cluster.load_balancing_config.token_awareness_enabled = enabled != 0;
620627
}
621628

629+
#[no_mangle]
630+
pub unsafe extern "C" fn cass_cluster_set_token_aware_routing_shuffle_replicas(
631+
cluster_raw: *mut CassCluster,
632+
enabled: cass_bool_t,
633+
) {
634+
let cluster = ptr_to_ref_mut(cluster_raw);
635+
636+
cluster
637+
.load_balancing_config
638+
.token_aware_shuffling_replicas_enabled = enabled != 0;
639+
}
640+
622641
#[no_mangle]
623642
pub unsafe extern "C" fn cass_cluster_set_retry_policy(
624643
cluster_raw: *mut CassCluster,

scylla-rust-wrapper/src/exec_profile.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,19 @@ pub unsafe extern "C" fn cass_execution_profile_set_token_aware_routing(
421421
CassError::CASS_OK
422422
}
423423

424+
#[no_mangle]
425+
pub unsafe extern "C" fn cass_execution_profile_set_token_aware_routing_shuffle_replicas(
426+
profile: *mut CassExecProfile,
427+
enabled: cass_bool_t,
428+
) -> CassError {
429+
let profile_builder = ptr_to_ref_mut(profile);
430+
profile_builder
431+
.load_balancing_config
432+
.token_aware_shuffling_replicas_enabled = enabled != 0;
433+
434+
CassError::CASS_OK
435+
}
436+
424437
#[cfg(test)]
425438
mod tests {
426439
use super::*;

0 commit comments

Comments
 (0)