Skip to content

Commit 6ad9df2

Browse files
committed
exec_profile: implement cass_execution_profile_set_load_balance_rack_aware[_n]
This is an extension to the extension. cpp-driver does not implement it for some reason.
1 parent a411584 commit 6ad9df2

File tree

3 files changed

+83
-2
lines changed

3 files changed

+83
-2
lines changed

include/cassandra.h

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,6 +1087,50 @@ cass_execution_profile_set_load_balance_dc_aware_n(CassExecProfile* profile,
10871087
unsigned used_hosts_per_remote_dc,
10881088
cass_bool_t allow_remote_dcs_for_local_cl);
10891089

1090+
1091+
/**
1092+
* Configures the execution profile to use Rack-aware load balancing.
1093+
* For each query, all live nodes in a primary 'local' rack are tried first,
1094+
* followed by nodes from local DC and then nodes from other DCs.
1095+
*
1096+
* <b>Note:</b> Profile-based load balancing policy is disabled by default.
1097+
* cluster load balancing policy is used when profile does not contain a policy.
1098+
*
1099+
* @public @memberof CassExecProfile
1100+
*
1101+
* @param[in] profile
1102+
* @param[in] local_dc The primary data center to try first
1103+
* @param[in] local_rack The primary rack to try first
1104+
* @return CASS_OK if successful, otherwise an error occurred
1105+
*/
1106+
CASS_EXPORT CassError
1107+
cass_execution_profile_set_load_balance_rack_aware(CassExecProfile* profile,
1108+
const char* local_dc,
1109+
const char* local_rack);
1110+
1111+
1112+
/**
1113+
* Same as cass_execution_profile_set_load_balance_rack_aware(), but with lengths for string
1114+
* parameters.
1115+
*
1116+
* @public @memberof CassExecProfile
1117+
*
1118+
* @param[in] profile
1119+
* @param[in] local_dc
1120+
* @param[in] local_dc_length
1121+
* @return same cass_execution_profile_set_load_balance_rack_aware()
1122+
*
1123+
* @see cass_execution_profile_set_load_balance_rack_aware()
1124+
* @see cass_cluster_set_load_balance_rack_aware_n()
1125+
*/
1126+
CASS_EXPORT CassError
1127+
cass_execution_profile_set_load_balance_rack_aware_n(CassExecProfile* profile,
1128+
const char* local_dc,
1129+
size_t local_dc_length,
1130+
const char* local_rack,
1131+
size_t local_rack_length);
1132+
1133+
10901134
/**
10911135
* Configures the execution profile to use token-aware request routing or not.
10921136
*

scylla-rust-wrapper/src/cluster.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -606,7 +606,7 @@ pub unsafe extern "C" fn cass_cluster_set_load_balance_rack_aware_n(
606606
)
607607
}
608608

609-
unsafe fn set_load_balance_rack_aware_n(
609+
pub(crate) unsafe fn set_load_balance_rack_aware_n(
610610
load_balancing_config: &mut LoadBalancingConfig,
611611
local_dc_raw: *const c_char,
612612
local_dc_length: size_t,

scylla-rust-wrapper/src/exec_profile.rs

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ 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, LoadBalancingKind};
20+
use crate::cluster::{
21+
set_load_balance_dc_aware_n, set_load_balance_rack_aware_n, LoadBalancingConfig,
22+
LoadBalancingKind,
23+
};
2124
use crate::retry_policy::CassRetryPolicy;
2225
use crate::retry_policy::RetryPolicy::{
2326
DefaultRetryPolicy, DowngradingConsistencyRetryPolicy, FallthroughRetryPolicy,
@@ -357,6 +360,40 @@ pub unsafe extern "C" fn cass_execution_profile_set_load_balance_dc_aware_n(
357360
)
358361
}
359362

363+
#[no_mangle]
364+
pub unsafe extern "C" fn cass_execution_profile_set_load_balance_rack_aware(
365+
profile: *mut CassExecProfile,
366+
local_dc_raw: *const c_char,
367+
local_rack_raw: *const c_char,
368+
) -> CassError {
369+
cass_execution_profile_set_load_balance_rack_aware_n(
370+
profile,
371+
local_dc_raw,
372+
strlen(local_dc_raw),
373+
local_rack_raw,
374+
strlen(local_rack_raw),
375+
)
376+
}
377+
378+
#[no_mangle]
379+
pub unsafe extern "C" fn cass_execution_profile_set_load_balance_rack_aware_n(
380+
profile: *mut CassExecProfile,
381+
local_dc_raw: *const c_char,
382+
local_dc_length: size_t,
383+
local_rack_raw: *const c_char,
384+
local_rack_length: size_t,
385+
) -> CassError {
386+
let profile_builder = ptr_to_ref_mut(profile);
387+
388+
set_load_balance_rack_aware_n(
389+
&mut profile_builder.load_balancing_config,
390+
local_dc_raw,
391+
local_dc_length,
392+
local_rack_raw,
393+
local_rack_length,
394+
)
395+
}
396+
360397
#[no_mangle]
361398
pub unsafe extern "C" fn cass_execution_profile_set_load_balance_round_robin(
362399
profile: *mut CassExecProfile,

0 commit comments

Comments
 (0)