summaryrefslogtreecommitdiffstats
path: root/container-search/src
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-09-20 12:06:30 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2019-09-20 12:06:30 +0200
commitf0475fac6d3c95212b88768b971ebc035d0c3d46 (patch)
treed34e0445ca7d9288cd1bf2d499231aea0f435f78 /container-search/src
parent0419474326ad85730a8f8d02caa7e027474ed018 (diff)
Take streaming search up and also add unit test for it.
Diffstat (limited to 'container-search/src')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java16
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/cluster/ClusterSearcherTestCase.java37
2 files changed, 32 insertions, 21 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java b/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java
index b0d9c2b0002..37d8e316302 100644
--- a/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java
@@ -86,8 +86,6 @@ public class ClusterSearcher extends Searcher {
VipStatus vipStatus) {
super(id);
- Dispatcher dispatcher = Dispatcher.create(id.stringValue(), dispatchConfig, clusterInfoConfig.nodeCount(), vipStatus, metric);
-
int searchClusterIndex = clusterConfig.clusterId();
clusterModelName = clusterConfig.clusterName();
QrSearchersConfig.Searchcluster searchClusterConfig = getSearchClusterConfigFromClusterName(qrsConfig, clusterModelName);
@@ -98,8 +96,7 @@ public class ClusterSearcher extends Searcher {
.setLogRaw(false).setLogMean(true));
maxQueryTimeout = ParameterParser.asMilliSeconds(clusterConfig.maxQueryTimeout(), DEFAULT_MAX_QUERY_TIMEOUT);
- maxQueryCacheTimeout = ParameterParser.asMilliSeconds(clusterConfig.maxQueryCacheTimeout(),
- DEFAULT_MAX_QUERY_CACHE_TIMEOUT);
+ maxQueryCacheTimeout = ParameterParser.asMilliSeconds(clusterConfig.maxQueryCacheTimeout(), DEFAULT_MAX_QUERY_CACHE_TIMEOUT);
SummaryParameters docSumParams = new SummaryParameters(qrsConfig
.com().yahoo().prelude().fastsearch().FastSearcher().docsum()
@@ -115,12 +112,12 @@ public class ClusterSearcher extends Searcher {
}
if (searchClusterConfig.indexingmode() == STREAMING) {
- VdsStreamingSearcher searcher = vdsCluster(fs4ResourcePool.getServerId(),
- searchClusterIndex,
- searchClusterConfig, docSumParams,
- documentDbConfig);
+ VdsStreamingSearcher searcher = vdsCluster(fs4ResourcePool.getServerId(), searchClusterIndex,
+ searchClusterConfig, docSumParams, documentDbConfig);
addBackendSearcher(searcher);
+ vipStatus.addToRotation(searcher.getName());
} else {
+ Dispatcher dispatcher = Dispatcher.create(id.stringValue(), dispatchConfig, clusterInfoConfig.nodeCount(), vipStatus, metric);
for (int dispatcherIndex = 0; dispatcherIndex < searchClusterConfig.dispatcher().size(); dispatcherIndex++) {
try {
if ( ! isRemote(searchClusterConfig.dispatcher(dispatcherIndex).host())) {
@@ -129,13 +126,12 @@ public class ClusterSearcher extends Searcher {
addBackendSearcher(searcher);
}
} catch (UnknownHostException e) {
- e.printStackTrace();
throw new RuntimeException(e);
}
}
}
if ( server == null ) {
- throw new IllegalStateException("ClusterSearcher should have a top level dispatch.");
+ throw new IllegalStateException("ClusterSearcher should have backend.");
}
}
diff --git a/container-search/src/test/java/com/yahoo/prelude/cluster/ClusterSearcherTestCase.java b/container-search/src/test/java/com/yahoo/prelude/cluster/ClusterSearcherTestCase.java
index 9ea7276583b..3e6e88c72c1 100644
--- a/container-search/src/test/java/com/yahoo/prelude/cluster/ClusterSearcherTestCase.java
+++ b/container-search/src/test/java/com/yahoo/prelude/cluster/ClusterSearcherTestCase.java
@@ -5,6 +5,7 @@ import com.yahoo.cloud.config.ClusterInfoConfig;
import com.yahoo.component.ComponentId;
import com.yahoo.container.QrConfig;
import com.yahoo.container.QrSearchersConfig;
+import com.yahoo.container.handler.ClustersStatus;
import com.yahoo.container.handler.VipStatus;
import com.yahoo.container.protect.Error;
import com.yahoo.prelude.IndexFacts;
@@ -264,8 +265,7 @@ public class ClusterSearcherTestCase {
Set<String> documentTypes = new LinkedHashSet<>(docTypesList);
ClusterSearcher cluster = new ClusterSearcher(documentTypes);
try {
- cluster.addBackendSearcher(new MyMockSearcher(
- expectAttributePrefetch));
+ cluster.addBackendSearcher(new MyMockSearcher(expectAttributePrefetch));
cluster.setValidRankProfile("default", documentTypes);
cluster.addValidRankProfile("testprofile", "type1");
return new Execution(cluster, Execution.Context.createContextStub());
@@ -513,19 +513,23 @@ public class ClusterSearcherTestCase {
assertEquals(3, result.getTotalHitCount());
}
- private static ClusterSearcher createSearcher(Double maxQueryTimeout,
- Double maxQueryCacheTimeout) {
+ private static ClusterSearcher createSearcher(String clusterName, Double maxQueryTimeout, Double maxQueryCacheTimeout,
+ boolean streamingMode, VipStatus vipStatus)
+ {
QrSearchersConfig.Builder qrSearchersConfig = new QrSearchersConfig.Builder();
- QrSearchersConfig.Searchcluster.Builder searchClusterConfig =
- new QrSearchersConfig.Searchcluster.Builder().name("test-cluster");
+ QrSearchersConfig.Searchcluster.Builder searchClusterConfig = new QrSearchersConfig.Searchcluster.Builder();
+ searchClusterConfig.name(clusterName);
+ if (streamingMode) {
+ searchClusterConfig.indexingmode(QrSearchersConfig.Searchcluster.Indexingmode.Enum.STREAMING);
+ searchClusterConfig.searchdef("streaming_sd");
+ }
qrSearchersConfig.searchcluster(searchClusterConfig);
- QrSearchersConfig.Searchcluster.Dispatcher.Builder dispatcherConfig =
- new QrSearchersConfig.Searchcluster.Dispatcher.Builder();
+ QrSearchersConfig.Searchcluster.Dispatcher.Builder dispatcherConfig = new QrSearchersConfig.Searchcluster.Dispatcher.Builder();
dispatcherConfig.host("localhost");
dispatcherConfig.port(0);
searchClusterConfig.dispatcher(dispatcherConfig);
- ClusterConfig.Builder clusterConfig = new ClusterConfig.Builder().clusterName("test-cluster");
+ ClusterConfig.Builder clusterConfig = new ClusterConfig.Builder().clusterName(clusterName);
if (maxQueryTimeout != null)
clusterConfig.maxQueryTimeout(maxQueryTimeout);
if (maxQueryCacheTimeout != null)
@@ -543,7 +547,7 @@ public class ClusterSearcherTestCase {
Statistics.nullImplementation,
new MockMetric(),
new FS4ResourcePool(new QrConfig.Builder().build()),
- new VipStatus());
+ vipStatus);
}
private static ClusterInfoConfig createClusterInfoConfig() {
@@ -558,7 +562,9 @@ public class ClusterSearcherTestCase {
Execution exec;
Query query;
QueryTimeoutFixture(Double maxQueryTimeout, Double maxQueryCacheTimeout) {
- searcher = createSearcher(maxQueryTimeout, maxQueryCacheTimeout);
+ String clusterName = "test-cluster";
+ VipStatus vipStatus = new VipStatus(new QrSearchersConfig.Builder().searchcluster(new QrSearchersConfig.Searchcluster.Builder().name(clusterName)).build(), new ClustersStatus());
+ searcher = createSearcher(clusterName, maxQueryTimeout, maxQueryCacheTimeout, false, vipStatus);
exec = new Execution(searcher, Execution.Context.createContextStub());
query = new Query("?query=hello&restrict=type1");
}
@@ -568,6 +574,15 @@ public class ClusterSearcherTestCase {
}
@Test
+ public void testThatVipStatusIsSetUpForStreamingSearch() {
+ String clusterName = "test-cluster";
+ VipStatus vipStatus = new VipStatus(new QrSearchersConfig.Builder().searchcluster(new QrSearchersConfig.Searchcluster.Builder().name(clusterName)).build(), new ClustersStatus());
+ assertFalse(vipStatus.isInRotation());
+ ClusterSearcher searcher = createSearcher(clusterName, 1.0, 10.0, true, vipStatus);
+ assertTrue(vipStatus.isInRotation());
+ }
+
+ @Test
public void testThatQueryTimeoutIsCappedWithDefaultMax() {
QueryTimeoutFixture f = new QueryTimeoutFixture(null, null);
f.query.setTimeout(600001);