summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-09-19 23:37:34 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2019-09-19 23:37:34 +0200
commitee0100b9d505ab9238ea48d21be6326a26d90936 (patch)
tree996530e80c4d6f6b07fe97b050f6456b6ae704cc /container-search
parent3da089f71cfc38431ef4508a99d9b075b955fbc0 (diff)
Drive the ping ourselves to avoid waiting for the monitor thread.
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/cluster/ClusterMonitor.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/SearchCluster.java2
-rw-r--r--container-search/src/test/java/com/yahoo/search/dispatch/searchcluster/SearchClusterTest.java27
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) {}
}
}