Skip to content

Commit 25ee1a8

Browse files
committed
exec_profile: define and 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 1d5af0d commit 25ee1a8

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
@@ -573,7 +573,7 @@ pub unsafe extern "C" fn cass_cluster_set_load_balance_rack_aware_n(
573573
)
574574
}
575575

576-
unsafe fn set_load_balance_rack_aware_n(
576+
pub(crate) unsafe fn set_load_balance_rack_aware_n(
577577
load_balancing_config: &mut LoadBalancingConfig,
578578
local_dc_raw: *const c_char,
579579
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, NodeLocationPreference};
20+
use crate::cluster::{
21+
set_load_balance_dc_aware_n, set_load_balance_rack_aware_n, LoadBalancingConfig,
22+
NodeLocationPreference,
23+
};
2124
use crate::retry_policy::CassRetryPolicy;
2225
use crate::retry_policy::RetryPolicy::{
2326
DefaultRetryPolicy, DowngradingConsistencyRetryPolicy, FallthroughRetryPolicy,
@@ -348,6 +351,40 @@ pub unsafe extern "C" fn cass_execution_profile_set_load_balance_dc_aware_n(
348351
)
349352
}
350353

354+
#[no_mangle]
355+
pub unsafe extern "C" fn cass_execution_profile_set_load_balance_rack_aware(
356+
profile: *mut CassExecProfile,
357+
local_dc_raw: *const c_char,
358+
local_rack_raw: *const c_char,
359+
) -> CassError {
360+
cass_execution_profile_set_load_balance_rack_aware_n(
361+
profile,
362+
local_dc_raw,
363+
strlen(local_dc_raw),
364+
local_rack_raw,
365+
strlen(local_rack_raw),
366+
)
367+
}
368+
369+
#[no_mangle]
370+
pub unsafe extern "C" fn cass_execution_profile_set_load_balance_rack_aware_n(
371+
profile: *mut CassExecProfile,
372+
local_dc_raw: *const c_char,
373+
local_dc_length: size_t,
374+
local_rack_raw: *const c_char,
375+
local_rack_length: size_t,
376+
) -> CassError {
377+
let profile_builder = ptr_to_ref_mut(profile);
378+
379+
set_load_balance_rack_aware_n(
380+
&mut profile_builder.load_balancing_config,
381+
local_dc_raw,
382+
local_dc_length,
383+
local_rack_raw,
384+
local_rack_length,
385+
)
386+
}
387+
351388
#[no_mangle]
352389
pub unsafe extern "C" fn cass_execution_profile_set_load_balance_round_robin(
353390
profile: *mut CassExecProfile,

0 commit comments

Comments
 (0)