bug fix for autoscaling termination
diff --git a/merger/src/main/java/com/metamx/druid/merger/coordinator/RemoteTaskRunner.java b/merger/src/main/java/com/metamx/druid/merger/coordinator/RemoteTaskRunner.java
index 5537a6b..a95f64c 100644
--- a/merger/src/main/java/com/metamx/druid/merger/coordinator/RemoteTaskRunner.java
+++ b/merger/src/main/java/com/metamx/druid/merger/coordinator/RemoteTaskRunner.java
@@ -177,22 +177,19 @@
return;
}
- List<WorkerWrapper> thoseLazyWorkers = Lists.newArrayList(
- FunctionalIterable
- .create(zkWorkers.values())
- .filter(
- new Predicate<WorkerWrapper>()
- {
- @Override
- public boolean apply(WorkerWrapper input)
- {
- return input.getRunningTasks().isEmpty()
- && System.currentTimeMillis() - input.getLastCompletedTaskTime().getMillis()
- > config.getMaxWorkerIdleTimeMillisBeforeDeletion();
- }
- }
- )
- );
+ int workerCount = 0;
+ List<WorkerWrapper> thoseLazyWorkers = Lists.newArrayList();
+ for (WorkerWrapper workerWrapper : zkWorkers.values()) {
+ workerCount++;
+
+ if (workerCount > workerSetupManager.getWorkerSetupData().getMinNumWorkers() &&
+ workerWrapper.getRunningTasks().isEmpty() &&
+ System.currentTimeMillis() - workerWrapper.getLastCompletedTaskTime().getMillis()
+ > config.getMaxWorkerIdleTimeMillisBeforeDeletion()
+ ) {
+ thoseLazyWorkers.add(workerWrapper);
+ }
+ }
AutoScalingData terminated = strategy.terminate(
Lists.transform(
diff --git a/merger/src/main/java/com/metamx/druid/merger/coordinator/config/RemoteTaskRunnerConfig.java b/merger/src/main/java/com/metamx/druid/merger/coordinator/config/RemoteTaskRunnerConfig.java
index c9badf7..44b3a1d 100644
--- a/merger/src/main/java/com/metamx/druid/merger/coordinator/config/RemoteTaskRunnerConfig.java
+++ b/merger/src/main/java/com/metamx/druid/merger/coordinator/config/RemoteTaskRunnerConfig.java
@@ -38,7 +38,7 @@
public abstract DateTime getTerminateResourcesOriginDateTime();
@Config("druid.indexer.maxWorkerIdleTimeMillisBeforeDeletion")
- @Default("10000")
+ @Default("600000")
public abstract int getMaxWorkerIdleTimeMillisBeforeDeletion();
@Config("druid.indexer.maxScalingDuration")