From 1345e8a392a73999c1cdc99ad7a6d25b52f4aad5 Mon Sep 17 00:00:00 2001 From: leventov Date: Tue, 17 Oct 2017 16:41:36 -0500 Subject: [PATCH 1/2] Fix CachingCostBalancerStrategyFactory's constructor --- .../coordinator/CachingCostBalancerStrategyFactory.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/io/druid/server/coordinator/CachingCostBalancerStrategyFactory.java b/server/src/main/java/io/druid/server/coordinator/CachingCostBalancerStrategyFactory.java index 9594f9ba4c65..a4be229b2979 100644 --- a/server/src/main/java/io/druid/server/coordinator/CachingCostBalancerStrategyFactory.java +++ b/server/src/main/java/io/druid/server/coordinator/CachingCostBalancerStrategyFactory.java @@ -19,9 +19,10 @@ package io.druid.server.coordinator; +import com.fasterxml.jackson.annotation.JacksonInject; +import com.fasterxml.jackson.annotation.JsonCreator; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.inject.Inject; import com.metamx.emitter.EmittingLogger; import io.druid.client.ServerInventoryView; import io.druid.client.ServerView; @@ -55,8 +56,8 @@ public class CachingCostBalancerStrategyFactory implements BalancerStrategyFacto private final ClusterCostCache.Builder clusterCostCacheBuilder = ClusterCostCache.builder(); private volatile boolean initialized = false; - @Inject - public CachingCostBalancerStrategyFactory(ServerInventoryView serverInventoryView) + @JsonCreator + public CachingCostBalancerStrategyFactory(@JacksonInject ServerInventoryView serverInventoryView) { this.serverInventoryView = Preconditions.checkNotNull(serverInventoryView); } From c9e13ab8fffaa1601a421db0422ec09260956776 Mon Sep 17 00:00:00 2001 From: leventov Date: Wed, 18 Oct 2017 12:56:08 -0500 Subject: [PATCH 2/2] Fix CachingCostBalancerStrategyFactory not registered in Lifecycle --- .../CachingCostBalancerStrategyFactory.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/io/druid/server/coordinator/CachingCostBalancerStrategyFactory.java b/server/src/main/java/io/druid/server/coordinator/CachingCostBalancerStrategyFactory.java index a4be229b2979..999c503723ad 100644 --- a/server/src/main/java/io/druid/server/coordinator/CachingCostBalancerStrategyFactory.java +++ b/server/src/main/java/io/druid/server/coordinator/CachingCostBalancerStrategyFactory.java @@ -28,8 +28,8 @@ import io.druid.client.ServerView; import io.druid.java.util.common.concurrent.Execs; import io.druid.concurrent.LifecycleLock; -import io.druid.guice.ManageLifecycle; import io.druid.java.util.common.ISE; +import io.druid.java.util.common.lifecycle.Lifecycle; import io.druid.java.util.common.lifecycle.LifecycleStart; import io.druid.java.util.common.lifecycle.LifecycleStop; import io.druid.server.coordination.DruidServerMetadata; @@ -44,7 +44,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -@ManageLifecycle public class CachingCostBalancerStrategyFactory implements BalancerStrategyFactory { private static final EmittingLogger LOG = new EmittingLogger(CachingCostBalancerStrategyFactory.class); @@ -57,9 +56,15 @@ public class CachingCostBalancerStrategyFactory implements BalancerStrategyFacto private volatile boolean initialized = false; @JsonCreator - public CachingCostBalancerStrategyFactory(@JacksonInject ServerInventoryView serverInventoryView) + public CachingCostBalancerStrategyFactory( + @JacksonInject ServerInventoryView serverInventoryView, + @JacksonInject Lifecycle lifecycle + ) throws Exception { this.serverInventoryView = Preconditions.checkNotNull(serverInventoryView); + // Adding to lifecycle dynamically because couldn't use @ManageLifecycle on the class, + // see https://github.com/druid-io/druid/issues/4980 + lifecycle.addMaybeStartManagedInstance(this); } @LifecycleStart @@ -124,7 +129,7 @@ public void stop() @Override public BalancerStrategy createBalancerStrategy(final ListeningExecutorService exec) { - if (!lifecycleLock.awaitStarted()) { + if (!lifecycleLock.awaitStarted(1, TimeUnit.MINUTES)) { throw new ISE("CachingCostBalancerStrategyFactory is not started"); } if (initialized) {