aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/test/java/com/yahoo/search/dispatch/MockDispatcher.java
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-11-24 12:10:45 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2022-11-24 12:10:45 +0100
commit8e2abfc58e936bd6be3194f9e02a21a9b70b7692 (patch)
tree9918c66fc57647c0b1c831223f6b0f9c5d6b680d /container-search/src/test/java/com/yahoo/search/dispatch/MockDispatcher.java
parent90b260e83678edc36eb877ec235e0e6ce5892a48 (diff)
Put loadbalancer and invokerfactory in a volatile object to ensure atomic switch when reconfiguring.
Diffstat (limited to 'container-search/src/test/java/com/yahoo/search/dispatch/MockDispatcher.java')
-rw-r--r--container-search/src/test/java/com/yahoo/search/dispatch/MockDispatcher.java58
1 files changed, 58 insertions, 0 deletions
diff --git a/container-search/src/test/java/com/yahoo/search/dispatch/MockDispatcher.java b/container-search/src/test/java/com/yahoo/search/dispatch/MockDispatcher.java
new file mode 100644
index 00000000000..86b3d90f5ca
--- /dev/null
+++ b/container-search/src/test/java/com/yahoo/search/dispatch/MockDispatcher.java
@@ -0,0 +1,58 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.search.dispatch;
+
+import com.yahoo.container.handler.VipStatus;
+import com.yahoo.search.cluster.ClusterMonitor;
+import com.yahoo.search.dispatch.rpc.RpcInvokerFactory;
+import com.yahoo.search.dispatch.rpc.RpcPingFactory;
+import com.yahoo.search.dispatch.rpc.RpcResourcePool;
+import com.yahoo.search.dispatch.searchcluster.Node;
+import com.yahoo.search.dispatch.searchcluster.SearchCluster;
+import com.yahoo.vespa.config.search.DispatchConfig;
+import com.yahoo.vespa.config.search.DispatchNodesConfig;
+
+import java.util.List;
+
+public class MockDispatcher extends Dispatcher {
+
+ public final ClusterMonitor clusterMonitor;
+
+ public static MockDispatcher create(List<Node> nodes) {
+ var rpcResourcePool = new RpcResourcePool(toDispatchConfig(), toNodesConfig(nodes));
+
+ return create(nodes, rpcResourcePool, new VipStatus());
+ }
+
+ public static MockDispatcher create(List<Node> nodes, RpcResourcePool rpcResourcePool, VipStatus vipStatus) {
+ var dispatchConfig = toDispatchConfig();
+ var searchCluster = new SearchCluster("a", dispatchConfig.minActivedocsPercentage(), nodes, vipStatus, new RpcPingFactory(rpcResourcePool));
+ return new MockDispatcher(new ClusterMonitor<>(searchCluster, true), searchCluster, dispatchConfig, rpcResourcePool);
+ }
+
+ private MockDispatcher(ClusterMonitor clusterMonitor, SearchCluster searchCluster, DispatchConfig dispatchConfig, RpcResourcePool rpcResourcePool) {
+ this(clusterMonitor, searchCluster, dispatchConfig, new RpcInvokerFactory(rpcResourcePool, searchCluster.groupList(), dispatchConfig));
+ }
+
+ private MockDispatcher(ClusterMonitor clusterMonitor, SearchCluster searchCluster, DispatchConfig dispatchConfig, RpcInvokerFactory invokerFactory) {
+ super(clusterMonitor, searchCluster, dispatchConfig, invokerFactory);
+ this.clusterMonitor = clusterMonitor;
+ }
+
+ public static DispatchConfig toDispatchConfig() {
+ return new DispatchConfig.Builder().build();
+ }
+ public static DispatchNodesConfig toNodesConfig(List<Node> nodes) {
+ DispatchNodesConfig.Builder dispatchConfigBuilder = new DispatchNodesConfig.Builder();
+ int key = 0;
+ for (Node node : nodes) {
+ DispatchNodesConfig.Node.Builder dispatchConfigNodeBuilder = new DispatchNodesConfig.Node.Builder();
+ dispatchConfigNodeBuilder.host(node.hostname());
+ dispatchConfigNodeBuilder.port(0); // Mandatory, but currently not used here
+ dispatchConfigNodeBuilder.group(node.group());
+ dispatchConfigNodeBuilder.key(key++); // not used
+ dispatchConfigBuilder.node(dispatchConfigNodeBuilder);
+ }
+ return dispatchConfigBuilder.build();
+ }
+
+}