Skip to content

Commit 8a54dbc

Browse files
author
Gor Stepanyan
committed
transport: load_balancing: Add preferred_rack field to Default LBP
Updated documentation in the docs book.
1 parent 5899fdf commit 8a54dbc

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

docs/source/load-balancing/default-policy.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ for queries with non-local consistency mode is also supported.
1111
`DefaultPolicyBuilder` with the following default values:
1212

1313
- `preferred_datacenter`: `None`
14+
- `preferred_rack`: `None`
1415
- `is_token_aware`: `true`
1516
- `permit_dc_failover`: `false`
1617
- `latency_awareness`: `None`
@@ -25,6 +26,7 @@ use scylla::load_balancing::DefaultPolicy;
2526

2627
let default_policy = DefaultPolicy::builder()
2728
.prefer_datacenter("dc1".to_string())
29+
.prefer_rack("rack1".to_string())
2830
.token_aware(true)
2931
.permit_dc_failover(true)
3032
.build();
@@ -48,6 +50,14 @@ false), the default policy will only include local nodes in load balancing
4850
plans. Remote nodes will be excluded, even if they are alive and available to
4951
serve requests.
5052

53+
#### Preferred Rack
54+
55+
The `preferred_rack` field in `DefaultPolicy` allows the load balancing policy to
56+
prioritize nodes based on their availability zones in the preferred datacenter.
57+
When a preferred rack is set, the policy will first return replicas in the local rack
58+
in the preferred datacenter, and then the other replicas in the datacenter.
59+
When a preferred datacenter is not set, setting preferred rack will not have any effect.
60+
5161
#### Datacenter Failover
5262

5363
In the event of a datacenter outage or network failure, the nodes in that

scylla/src/transport/load_balancing/default.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ use tracing::warn;
2121
/// Latency awareness is available, although not recommended.
2222
pub struct DefaultPolicy {
2323
preferred_datacenter: Option<String>,
24+
preferred_rack: Option<String>,
2425
is_token_aware: bool,
2526
permit_dc_failover: bool,
2627
pick_predicate: Box<dyn Fn(&NodeRef) -> bool + Send + Sync>,
@@ -32,6 +33,7 @@ impl fmt::Debug for DefaultPolicy {
3233
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
3334
f.debug_struct("DefaultPolicy")
3435
.field("preferred_datacenter", &self.preferred_datacenter)
36+
.field("preferred_rack", &self.preferred_rack)
3537
.field("is_token_aware", &self.is_token_aware)
3638
.field("permit_dc_failover", &self.permit_dc_failover)
3739
.field("latency_awareness", &self.latency_awareness)
@@ -364,6 +366,7 @@ impl Default for DefaultPolicy {
364366
fn default() -> Self {
365367
Self {
366368
preferred_datacenter: None,
369+
preferred_rack: None,
367370
is_token_aware: true,
368371
permit_dc_failover: false,
369372
pick_predicate: Box::new(Self::is_alive),
@@ -390,6 +393,7 @@ impl Default for DefaultPolicy {
390393
#[derive(Clone, Debug)]
391394
pub struct DefaultPolicyBuilder {
392395
preferred_datacenter: Option<String>,
396+
preferred_rack: Option<String>,
393397
is_token_aware: bool,
394398
permit_dc_failover: bool,
395399
latency_awareness: Option<LatencyAwarenessBuilder>,
@@ -401,6 +405,7 @@ impl DefaultPolicyBuilder {
401405
pub fn new() -> Self {
402406
Self {
403407
preferred_datacenter: None,
408+
preferred_rack: None,
404409
is_token_aware: true,
405410
permit_dc_failover: false,
406411
latency_awareness: None,
@@ -421,6 +426,7 @@ impl DefaultPolicyBuilder {
421426

422427
Arc::new(DefaultPolicy {
423428
preferred_datacenter: self.preferred_datacenter,
429+
preferred_rack: self.preferred_rack,
424430
is_token_aware: self.is_token_aware,
425431
permit_dc_failover: self.permit_dc_failover,
426432
pick_predicate,
@@ -429,6 +435,19 @@ impl DefaultPolicyBuilder {
429435
})
430436
}
431437

438+
/// Sets the rack to be preferred by this policy
439+
///
440+
/// Allows the load balancing policy to prioritize nodes based on their availability zones
441+
/// in the preferred datacenter.
442+
/// When a preferred rack is set, the policy will first return replicas in the local rack
443+
/// in the preferred datacenter, and then the other replicas in the datacenter.
444+
///
445+
/// When a preferred datacenter is not set, setting preferred rack will not have any effect.
446+
pub fn prefer_rack(mut self, rack_name: String) -> Self {
447+
self.preferred_rack = Some(rack_name);
448+
self
449+
}
450+
432451
/// Sets the datacenter to be preferred by this policy.
433452
///
434453
/// Allows the load balancing policy to prioritize nodes based on their location.
@@ -1786,6 +1805,7 @@ mod latency_awareness {
17861805

17871806
DefaultPolicy {
17881807
preferred_datacenter: Some("eu".to_owned()),
1808+
preferred_rack: None,
17891809
permit_dc_failover: true,
17901810
is_token_aware: true,
17911811
pick_predicate,

0 commit comments

Comments
 (0)