From 4d677b7f36380101131658937bc4ac416227496b Mon Sep 17 00:00:00 2001 From: Clint Wylie Date: Tue, 3 Jul 2018 03:44:01 -0700 Subject: [PATCH 1/3] fix move to try to move max segments instead of "up to" max segments --- .../helper/DruidCoordinatorBalancer.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/server/src/main/java/io/druid/server/coordinator/helper/DruidCoordinatorBalancer.java b/server/src/main/java/io/druid/server/coordinator/helper/DruidCoordinatorBalancer.java index 15f13438163c..8d9be249a3a3 100644 --- a/server/src/main/java/io/druid/server/coordinator/helper/DruidCoordinatorBalancer.java +++ b/server/src/main/java/io/druid/server/coordinator/helper/DruidCoordinatorBalancer.java @@ -40,6 +40,7 @@ import java.util.NavigableSet; import java.util.SortedSet; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; /** */ @@ -123,22 +124,27 @@ private void balanceTier( final int maxToLoad = params.getCoordinatorDynamicConfig().getMaxSegmentsInNodeLoadingQueue(); long unmoved = 0L; - for (int iter = 0; iter < maxSegmentsToMove; iter++) { - if (maxToLoad > 0) { - toMoveTo.removeIf(s -> s.getNumberOfSegmentsInQueue() >= maxToLoad); - } + for (int moved = 0; moved < maxSegmentsToMove;) { final BalancerSegmentHolder segmentToMove = strategy.pickSegmentToMove(toMoveFrom); if (segmentToMove != null && params.getAvailableSegments().contains(segmentToMove.getSegment())) { - final ServerHolder destinationHolder = strategy.findNewSegmentHomeBalancer(segmentToMove.getSegment(), toMoveTo); + final List toMoveToWithLoadQueueCapacity = + toMoveTo.stream() + .filter(s -> s.getNumberOfSegmentsInQueue() < maxToLoad) + .collect(Collectors.toList()); + final ServerHolder destinationHolder = + strategy.findNewSegmentHomeBalancer(segmentToMove.getSegment(), toMoveToWithLoadQueueCapacity); if (destinationHolder != null) { moveSegment(segmentToMove, destinationHolder.getServer(), params); + moved++; } else { - ++unmoved; + log.info("Segment [%s] is 'optimally' placed.", segmentToMove.getSegment().getIdentifier()); + unmoved++; } } } + if (unmoved == maxSegmentsToMove) { // Cluster should be alive and constantly adjusting log.info("No good moves found in tier [%s]", tier); From 8393609342276d53cdfbed58c811149154dcc62f Mon Sep 17 00:00:00 2001 From: Clint Wylie Date: Tue, 3 Jul 2018 13:24:34 -0700 Subject: [PATCH 2/3] fix --- .../server/coordinator/helper/DruidCoordinatorBalancer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/io/druid/server/coordinator/helper/DruidCoordinatorBalancer.java b/server/src/main/java/io/druid/server/coordinator/helper/DruidCoordinatorBalancer.java index 8d9be249a3a3..535267bfc5cc 100644 --- a/server/src/main/java/io/druid/server/coordinator/helper/DruidCoordinatorBalancer.java +++ b/server/src/main/java/io/druid/server/coordinator/helper/DruidCoordinatorBalancer.java @@ -130,8 +130,9 @@ private void balanceTier( if (segmentToMove != null && params.getAvailableSegments().contains(segmentToMove.getSegment())) { final List toMoveToWithLoadQueueCapacity = toMoveTo.stream() - .filter(s -> s.getNumberOfSegmentsInQueue() < maxToLoad) + .filter(s -> maxToLoad <= 0 || s.getNumberOfSegmentsInQueue() < maxToLoad) .collect(Collectors.toList()); + final ServerHolder destinationHolder = strategy.findNewSegmentHomeBalancer(segmentToMove.getSegment(), toMoveToWithLoadQueueCapacity); From 165af88d893f6a8ebfd9aed443cac6ff1f0cb34a Mon Sep 17 00:00:00 2001 From: Clint Wylie Date: Tue, 3 Jul 2018 13:38:38 -0700 Subject: [PATCH 3/3] fix oops --- .../server/coordinator/helper/DruidCoordinatorBalancer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/io/druid/server/coordinator/helper/DruidCoordinatorBalancer.java b/server/src/main/java/io/druid/server/coordinator/helper/DruidCoordinatorBalancer.java index 535267bfc5cc..10612d7eb7ee 100644 --- a/server/src/main/java/io/druid/server/coordinator/helper/DruidCoordinatorBalancer.java +++ b/server/src/main/java/io/druid/server/coordinator/helper/DruidCoordinatorBalancer.java @@ -124,7 +124,7 @@ private void balanceTier( final int maxToLoad = params.getCoordinatorDynamicConfig().getMaxSegmentsInNodeLoadingQueue(); long unmoved = 0L; - for (int moved = 0; moved < maxSegmentsToMove;) { + for (int moved = 0; (moved + unmoved) < maxSegmentsToMove;) { final BalancerSegmentHolder segmentToMove = strategy.pickSegmentToMove(toMoveFrom); if (segmentToMove != null && params.getAvailableSegments().contains(segmentToMove.getSegment())) {