diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-09-19 23:37:34 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2019-09-19 23:37:34 +0200 |
commit | ee0100b9d505ab9238ea48d21be6326a26d90936 (patch) | |
tree | 996530e80c4d6f6b07fe97b050f6456b6ae704cc /container-search | |
parent | 3da089f71cfc38431ef4508a99d9b075b955fbc0 (diff) |
Drive the ping ourselves to avoid waiting for the monitor thread.
Diffstat (limited to 'container-search')
3 files changed, 27 insertions, 4 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/cluster/ClusterMonitor.java b/container-search/src/main/java/com/yahoo/search/cluster/ClusterMonitor.java index 015adcf3490..22c7f59872c 100644 --- a/container-search/src/main/java/com/yahoo/search/cluster/ClusterMonitor.java +++ b/container-search/src/main/java/com/yahoo/search/cluster/ClusterMonitor.java @@ -22,7 +22,7 @@ import java.util.logging.Logger; */ public class ClusterMonitor<T> { - private MonitorConfiguration configuration = new MonitorConfiguration(); + private final MonitorConfiguration configuration = new MonitorConfiguration(); private static Logger log = Logger.getLogger(ClusterMonitor.class.getName()); diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/SearchCluster.java b/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/SearchCluster.java index 44df0656361..c17212b2481 100644 --- a/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/SearchCluster.java +++ b/container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/SearchCluster.java @@ -100,6 +100,8 @@ public class SearchCluster implements NodeManager<Node> { } } + ClusterMonitor<Node> clusterMonitor() { return clusterMonitor; } + private static Optional<Node> findLocalCorpusDispatchTarget(String selfHostname, int searchClusterSize, int containerClusterSize, diff --git a/container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterTest.java b/container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterTest.java index df1049f499d..bde0a3c6c02 100644 --- a/container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterTest.java +++ b/container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterTest.java @@ -8,12 +8,17 @@ import com.yahoo.prelude.Pong; import com.yahoo.search.cluster.ClusterMonitor; import com.yahoo.search.dispatch.MockSearchCluster; import com.yahoo.search.result.ErrorMessage; +import org.jetbrains.annotations.NotNull; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.Callable; +import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import static org.junit.Assert.assertFalse; @@ -25,6 +30,19 @@ import static org.junit.Assert.assertTrue; public class SearchClusterTest { static class State { + class MyExecutor implements Executor { + private final List<Runnable> list = new ArrayList<>(); + @Override + public void execute(@NotNull Runnable command) { + list.add(command); + } + void run() { + for (Runnable runnable : list) { + runnable.run(); + } + list.clear(); + } + } final String clusterId; final int nodesPerGroup; final VipStatus vipStatus; @@ -54,7 +72,7 @@ public class SearchClusterTest { void startMonitoring() { searchCluster.startClusterMonitoring(new Factory(nodesPerGroup, numDocsPerNode, pingCounts)); } - private static int getMaxValue(List<AtomicInteger> list) { + static private int getMaxValue(List<AtomicInteger> list) { int max = list.get(0).get(); for (AtomicInteger v : list) { if (v.get() > max) { @@ -72,10 +90,13 @@ public class SearchClusterTest { } return min; } - private static void waitAtLeast(int atLeast, List<AtomicInteger> list) { + private void waitAtLeast(int atLeast, List<AtomicInteger> list) { while (getMinValue(list) < atLeast) { + ExecutorService executor = Executors.newCachedThreadPool(); + searchCluster.clusterMonitor().ping(executor); + executor.shutdown(); try { - Thread.sleep(100); + executor.awaitTermination(60, TimeUnit.SECONDS); } catch (InterruptedException e) {} } } |