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]

Reply via email to