Skip to content

Commit 78bbc93

Browse files
authored
Merge pull request #1330 from wprzytula/latency-awareness-no-wheel-reinvention
Latency awareness: don't reinvent the wheel (use existing `Iterator` methods instead)
2 parents 5f3b5bf + c7c8ce9 commit 78bbc93

File tree

1 file changed

+6
-13
lines changed

1 file changed

+6
-13
lines changed

scylla/src/policies/load_balancing/default.rs

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2786,10 +2786,7 @@ mod latency_awareness {
27862786
let average_latencies = self.node_avgs.read().unwrap();
27872787
let targets = fallback;
27882788

2789-
let mut fast_targets = vec![];
2790-
let mut penalised_targets = vec![];
2791-
2792-
for node_and_shard @ (node, _shard) in targets {
2789+
let (fast_targets, penalised_targets): (Vec<_>, Vec<_>) = targets.partition(|(node, _shard)|{
27932790
match fast_enough(
27942791
average_latencies.deref(),
27952792
node.host_id,
@@ -2798,22 +2795,18 @@ mod latency_awareness {
27982795
self.minimum_measurements,
27992796
min_avg_latency,
28002797
) {
2801-
FastEnough::Yes => fast_targets.push(node_and_shard),
2798+
FastEnough::Yes => true,
28022799
FastEnough::No { average } => {
28032800
trace!("Latency awareness: Penalising node {{address={}, datacenter={:?}, rack={:?}}} for being on average at least {} times slower (latency: {}ms) than the fastest ({}ms).",
28042801
node.address, node.datacenter, node.rack, self.exclusion_threshold, average.as_millis(), min_avg_latency.as_millis());
2805-
penalised_targets.push(node_and_shard);
2802+
false
28062803
}
28072804
}
2808-
}
2809-
2810-
let mut fast_targets = fast_targets.into_iter();
2811-
let mut penalised_targets = penalised_targets.into_iter();
2812-
2813-
let skipping_penalised_targets_iterator = std::iter::from_fn(move || {
2814-
fast_targets.next().or_else(|| penalised_targets.next())
28152805
});
28162806

2807+
let skipping_penalised_targets_iterator =
2808+
fast_targets.into_iter().chain(penalised_targets);
2809+
28172810
Either::Right(skipping_penalised_targets_iterator)
28182811
}
28192812

0 commit comments

Comments
 (0)