Skip to content

Commit 6a60e10

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 a4f9ecd commit 6a60e10

File tree

4 files changed

+125
-2
lines changed

4 files changed

+125
-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/extern/cassandra.h

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,6 +1088,49 @@ cass_execution_profile_set_load_balance_dc_aware_n(CassExecProfile* profile,
10881088
cass_bool_t allow_remote_dcs_for_local_cl);
10891089

10901090

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+
10911134
/**
10921135
* Configures the execution profile to use token-aware request routing or not.
10931136
*

scylla-rust-wrapper/src/cluster.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,7 @@ pub unsafe extern "C" fn cass_cluster_set_load_balance_rack_aware_n(
526526
)
527527
}
528528

529-
unsafe fn set_load_balance_rack_aware_n(
529+
pub(crate) unsafe fn set_load_balance_rack_aware_n(
530530
load_balancing_config: &mut LoadBalancingConfig,
531531
local_dc_raw: *const c_char,
532532
local_dc_length: size_t,

scylla-rust-wrapper/src/exec_profile.rs

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ 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::{
21+
set_load_balance_dc_aware_n, set_load_balance_rack_aware_n, LoadBalancingConfig,
22+
};
2123
use crate::retry_policy::CassRetryPolicy;
2224
use crate::retry_policy::RetryPolicy::{
2325
DefaultRetryPolicy, DowngradingConsistencyRetryPolicy, FallthroughRetryPolicy,
@@ -348,6 +350,40 @@ pub unsafe extern "C" fn cass_execution_profile_set_load_balance_dc_aware_n(
348350
)
349351
}
350352

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

0 commit comments

Comments
 (0)