This is an automated email from the ASF dual-hosted git repository.
kfaraz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new a7349442e4e Fix computed value of maxSegmentsToMove when coordinator
period is very low (#16984)
a7349442e4e is described below
commit a7349442e4e778792465f7af0444332ca5beecf1
Author: Kashif Faraz <[email protected]>
AuthorDate: Mon Sep 2 02:05:29 2024 -0700
Fix computed value of maxSegmentsToMove when coordinator period is very low
(#16984)
Bug: When coordinator period is less than 30s, `maxSegmentsToMove` is
always computed as 0
irrespective of number of available threads.
Changes:
- Fix lower bound condition and set minimum value to 100.
- Add new test which fails without this fix
---
.../druid/server/coordinator/balancer/SegmentToMoveCalculator.java | 4 ++--
.../server/coordinator/balancer/SegmentToMoveCalculatorTest.java | 4 ++++
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git
a/server/src/main/java/org/apache/druid/server/coordinator/balancer/SegmentToMoveCalculator.java
b/server/src/main/java/org/apache/druid/server/coordinator/balancer/SegmentToMoveCalculator.java
index d8846740a73..01c7da44c11 100644
---
a/server/src/main/java/org/apache/druid/server/coordinator/balancer/SegmentToMoveCalculator.java
+++
b/server/src/main/java/org/apache/druid/server/coordinator/balancer/SegmentToMoveCalculator.java
@@ -42,7 +42,7 @@ public class SegmentToMoveCalculator
{
/**
* At least this number of segments must be picked for moving in every cycle
- * to keep the cluster well balanced.
+ * to keep the cluster well-balanced.
*/
private static final int MIN_SEGMENTS_TO_MOVE = 100;
@@ -150,7 +150,7 @@ public class SegmentToMoveCalculator
int maxComputationsInThousands = (numBalancerThreads * num30sPeriods) <<
20;
int maxSegmentsToMove = (maxComputationsInThousands / totalSegments) *
1000;
- if (upperBound < lowerBound) {
+ if (upperBound < lowerBound || maxSegmentsToMove < lowerBound) {
return Math.min(lowerBound, totalSegments);
} else {
return Math.min(maxSegmentsToMove, upperBound);
diff --git
a/server/src/test/java/org/apache/druid/server/coordinator/balancer/SegmentToMoveCalculatorTest.java
b/server/src/test/java/org/apache/druid/server/coordinator/balancer/SegmentToMoveCalculatorTest.java
index b5b06afa709..249e9638d89 100644
---
a/server/src/test/java/org/apache/druid/server/coordinator/balancer/SegmentToMoveCalculatorTest.java
+++
b/server/src/test/java/org/apache/druid/server/coordinator/balancer/SegmentToMoveCalculatorTest.java
@@ -83,6 +83,10 @@ public class SegmentToMoveCalculatorTest
@Test
public void testMaxSegmentsToMoveIncreasesWithCoordinatorPeriod()
{
+ Assert.assertEquals(100, computeMaxSegmentsToMoveInPeriod(200_000,
Duration.millis(0)));
+ Assert.assertEquals(100, computeMaxSegmentsToMoveInPeriod(200_000,
Duration.millis(10_000)));
+ Assert.assertEquals(100, computeMaxSegmentsToMoveInPeriod(200_000,
Duration.millis(20_000)));
+
Assert.assertEquals(5_000, computeMaxSegmentsToMoveInPeriod(200_000,
Duration.millis(30_000)));
Assert.assertEquals(10_000, computeMaxSegmentsToMoveInPeriod(200_000,
Duration.millis(60_000)));
Assert.assertEquals(15_000, computeMaxSegmentsToMoveInPeriod(200_000,
Duration.millis(90_000)));
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]