diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-11-24 12:10:45 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-11-24 12:10:45 +0100 |
commit | 8e2abfc58e936bd6be3194f9e02a21a9b70b7692 (patch) | |
tree | 9918c66fc57647c0b1c831223f6b0f9c5d6b680d /container-search/src/test/java/com/yahoo/search/dispatch/MockDispatcher.java | |
parent | 90b260e83678edc36eb877ec235e0e6ce5892a48 (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.java | 58 |
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(); + } + +} |