@@ -40,6 +40,7 @@ const DRIVER_VERSION: &str = env!("CARGO_PKG_VERSION");
4040#[ derive( Clone , Debug ) ]
4141pub ( 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]
623642pub unsafe extern "C" fn cass_cluster_set_retry_policy (
624643 cluster_raw : * mut CassCluster ,
0 commit comments