From ee0100b9d505ab9238ea48d21be6326a26d90936 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Thu, 19 Sep 2019 23:37:34 +0200 Subject: Drive the ping ourselves to avoid waiting for the monitor thread. --- .../com/yahoo/search/cluster/ClusterMonitor.java | 2 +- .../dispatch/searchcluster/SearchCluster.java | 2 ++ .../dispatch/searchcluster/SearchClusterTest.java | 27 +++++++++++++++++++--- 3 files changed, 27 insertions(+), 4 deletions(-) (limited to 'container-search/src') 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 { - 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 { } } + ClusterMonitor clusterMonitor() { return clusterMonitor; } + private static Optional 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 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 list) { + static private int getMaxValue(List 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 list) { + private void waitAtLeast(int atLeast, List 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) {} } } -- cgit v1.2.3