diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2019-10-25 13:33:09 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2019-10-25 13:33:09 +0200 |
commit | cc7153b5c502bfdfa9603182cfe6848f955075de (patch) | |
tree | 2da646cad6d24c5c4c35ef26d6ac1a1940897169 /container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java | |
parent | 0087412bb6e46c06ba66705a11121f522f0bfc02 (diff) |
Create one Dispatcher component per search cluster
This avoids creating an excessive number of connections
to search clusters when the application (incorrectly) creates
many local provider chains to the same search cluster.
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java | 43 |
1 files changed, 31 insertions, 12 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java b/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java index ddd319b7bcb..73e5af50788 100644 --- a/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java +++ b/container-search/src/main/java/com/yahoo/search/dispatch/Dispatcher.java @@ -1,7 +1,10 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.search.dispatch; +import com.google.inject.Inject; +import com.yahoo.cloud.config.ClusterInfoConfig; import com.yahoo.component.AbstractComponent; +import com.yahoo.component.ComponentId; import com.yahoo.container.handler.VipStatus; import com.yahoo.jdisc.Metric; import com.yahoo.prelude.fastsearch.VespaBackEndSearcher; @@ -78,22 +81,38 @@ public class Dispatcher extends AbstractComponent { public static QueryProfileType getArgumentType() { return argumentType; } - public static Dispatcher create(String clusterId, - DispatchConfig dispatchConfig, - int containerClusterSize, - VipStatus vipStatus, - Metric metric) { - var searchCluster = new SearchCluster(clusterId, dispatchConfig, containerClusterSize, vipStatus); - var rpcFactory = new RpcInvokerFactory(new RpcResourcePool(dispatchConfig), searchCluster); - - return new Dispatcher(searchCluster, dispatchConfig, rpcFactory, rpcFactory, metric); + @Inject + public Dispatcher(ComponentId clusterId, + DispatchConfig dispatchConfig, + ClusterInfoConfig clusterInfoConfig, + VipStatus vipStatus, + Metric metric) { + this(new SearchCluster(clusterId.stringValue(), dispatchConfig, clusterInfoConfig.nodeCount(), vipStatus), + dispatchConfig, + metric); } - public Dispatcher(SearchCluster searchCluster, + private Dispatcher(SearchCluster searchCluster, DispatchConfig dispatchConfig, - InvokerFactory invokerFactory, - PingFactory pingFactory, Metric metric) { + this(searchCluster, + dispatchConfig, + new RpcInvokerFactory(new RpcResourcePool(dispatchConfig), searchCluster), + metric); + } + + protected Dispatcher(SearchCluster searchCluster, + DispatchConfig dispatchConfig, + RpcInvokerFactory rcpInvokerFactory, + Metric metric) { + this(searchCluster, dispatchConfig, rcpInvokerFactory, rcpInvokerFactory, metric); + } + + protected Dispatcher(SearchCluster searchCluster, + DispatchConfig dispatchConfig, + InvokerFactory invokerFactory, + PingFactory pingFactory, + Metric metric) { this.searchCluster = searchCluster; this.loadBalancer = new LoadBalancer(searchCluster, dispatchConfig.distributionPolicy() == DispatchConfig.DistributionPolicy.ROUNDROBIN); |