summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2021-10-08 13:52:48 +0200
committerJon Bratseth <bratseth@gmail.com>2021-10-08 13:52:48 +0200
commit475f0c93523daa1c3c53786ee8a9a9aee6702204 (patch)
treed20932871aa4c917052f2e37dde77c5d4a880e39 /container-search
parent9d435e48c742b3efc94c68c02da835c5f5298255 (diff)
Use the executor from the context
Diffstat (limited to 'container-search')
-rw-r--r--container-search/abi-spec.json7
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java1
-rw-r--r--container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java21
-rw-r--r--container-search/src/main/java/com/yahoo/search/searchchain/AsyncExecution.java60
-rw-r--r--container-search/src/main/java/com/yahoo/search/searchchain/Execution.java5
-rw-r--r--container-search/src/main/java/com/yahoo/search/searchchain/ExecutionFactory.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/searchchain/FutureResult.java4
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/searcher/test/BlendingSearcherTestCase.java16
-rw-r--r--container-search/src/test/java/com/yahoo/search/federation/FederationSearcherTest.java30
-rw-r--r--container-search/src/test/java/com/yahoo/search/federation/FederationSearcherTestCase.java12
-rw-r--r--container-search/src/test/java/com/yahoo/search/federation/FederationTester.java7
-rw-r--r--container-search/src/test/java/com/yahoo/search/federation/HitCountTestCase.java22
-rw-r--r--container-search/src/test/java/com/yahoo/search/searchchain/AsyncExecutionOfOneChainTestCase.java4
-rw-r--r--container-search/src/test/java/com/yahoo/search/searchchain/AsyncExecutionTestCase.java58
-rw-r--r--container-search/src/test/java/com/yahoo/search/searchchain/VespaAsyncSearcherTest.java11
15 files changed, 67 insertions, 193 deletions
diff --git a/container-search/abi-spec.json b/container-search/abi-spec.json
index 36a321876aa..68d09e344c4 100644
--- a/container-search/abi-spec.json
+++ b/container-search/abi-spec.json
@@ -7803,13 +7803,9 @@
"public void <init>(com.yahoo.component.chain.Chain, com.yahoo.search.searchchain.Execution)",
"public void <init>(com.yahoo.component.chain.Chain, com.yahoo.search.searchchain.Execution$Context)",
"public void <init>(com.yahoo.search.searchchain.Execution)",
- "public com.yahoo.search.searchchain.FutureResult search(com.yahoo.search.Query, java.util.concurrent.Executor)",
"public com.yahoo.search.searchchain.FutureResult search(com.yahoo.search.Query)",
- "public com.yahoo.search.searchchain.FutureResult searchAndFill(com.yahoo.search.Query, java.util.concurrent.Executor)",
"public com.yahoo.search.searchchain.FutureResult searchAndFill(com.yahoo.search.Query)",
- "public com.yahoo.search.searchchain.FutureResult fill(com.yahoo.search.Result, java.lang.String, java.util.concurrent.Executor)",
"public com.yahoo.search.searchchain.FutureResult fill(com.yahoo.search.Result, java.lang.String)",
- "public static java.util.List waitForAll(java.util.Collection, long, java.util.concurrent.Executor)",
"public static java.util.List waitForAll(java.util.Collection, long)"
],
"fields": []
@@ -7845,7 +7841,7 @@
"public void setBreakdown(boolean)",
"public com.yahoo.language.Linguistics getLinguistics()",
"public void setLinguistics(com.yahoo.language.Linguistics)",
- "public java.util.concurrent.Executor getExecutor()"
+ "public java.util.concurrent.Executor executor()"
],
"fields": []
},
@@ -7937,6 +7933,7 @@
"public com.yahoo.search.Result get(long, java.util.concurrent.TimeUnit)",
"public java.util.Optional getIfAvailable(long, java.util.concurrent.TimeUnit)",
"public com.yahoo.search.Query getQuery()",
+ "public com.yahoo.search.searchchain.Execution getExecution()",
"public com.yahoo.search.result.ErrorMessage createTimeoutError()",
"public bridge synthetic java.lang.Object get(long, java.util.concurrent.TimeUnit)",
"public bridge synthetic java.lang.Object get()"
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java
index e541cc8b5c0..c28e18a37d5 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java
@@ -30,7 +30,6 @@ import java.util.Optional;
import java.util.logging.Level;
import java.util.logging.Logger;
-
/**
* Superclass for backend searchers.
*
diff --git a/container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java b/container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java
index 4b9d469d90d..98c3ac9e3ac 100644
--- a/container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java
+++ b/container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java
@@ -90,37 +90,28 @@ public class FederationSearcher extends ForkingSearcher {
private final boolean strictSearchchain;
private final TargetSelector<?> targetSelector;
private final Clock clock = Clock.systemUTC();
- private final Executor executor;
-
-
@Inject
public FederationSearcher(FederationConfig config, StrictContractsConfig strict,
- ComponentRegistry<TargetSelector> targetSelectors, Executor executor) {
+ ComponentRegistry<TargetSelector> targetSelectors) {
this(createResolver(config), strict.searchchains(), strict.propagateSourceProperties(),
- resolveSelector(config.targetSelector(), targetSelectors), executor);
+ resolveSelector(config.targetSelector(), targetSelectors));
}
// for testing
- FederationSearcher(ComponentId id, SearchChainResolver searchChainResolver, Executor executor) {
- this(searchChainResolver, false, PropagateSourceProperties.EVERY, null, executor);
- }
- // for testing
public FederationSearcher(ComponentId id, SearchChainResolver searchChainResolver) {
- this(id, searchChainResolver, new InThreadExecutorService());
+ this(searchChainResolver, false, PropagateSourceProperties.EVERY, null);
}
private FederationSearcher(SearchChainResolver searchChainResolver,
boolean strictSearchchain,
PropagateSourceProperties.Enum propagateSourceProperties,
- TargetSelector targetSelector,
- Executor executor) {
+ TargetSelector targetSelector) {
this.searchChainResolver = searchChainResolver;
sourceRefResolver = new SourceRefResolver(searchChainResolver);
this.strictSearchchain = strictSearchchain;
this.propagateSourceProperties = propagateSourceProperties;
this.targetSelector = targetSelector;
- this.executor = executor;
}
private static TargetSelector resolveSelector(String selectorId,
@@ -255,7 +246,7 @@ public class FederationSearcher extends ForkingSearcher {
if (timeout <= 0)
return new FutureResult(() -> new Result(query, ErrorMessage.createTimeout("Timed out before federation")), execution, query);
Query clonedQuery = cloneFederationQuery(query, window, timeout, target);
- return new AsyncExecution(target.getChain(), execution).search(clonedQuery, executor);
+ return new AsyncExecution(target.getChain(), execution).search(clonedQuery);
}
private Query cloneFederationQuery(Query query, Window window, long timeout, Target target) {
@@ -446,7 +437,7 @@ public class FederationSearcher extends ForkingSearcher {
propagateErrors(resultToFill, result);
} else {
AsyncExecution asyncFill = new AsyncExecution(chainExecution);
- futureFilledResults.add(new Pair<>(resultToFill, asyncFill.fill(resultToFill, summaryClass, executor)));
+ futureFilledResults.add(new Pair<>(resultToFill, asyncFill.fill(resultToFill, summaryClass)));
}
}
}
diff --git a/container-search/src/main/java/com/yahoo/search/searchchain/AsyncExecution.java b/container-search/src/main/java/com/yahoo/search/searchchain/AsyncExecution.java
index 1b2eeb5efe6..ac879183125 100644
--- a/container-search/src/main/java/com/yahoo/search/searchchain/AsyncExecution.java
+++ b/container-search/src/main/java/com/yahoo/search/searchchain/AsyncExecution.java
@@ -53,31 +53,6 @@ import java.util.concurrent.atomic.AtomicReference;
* @author Arne Bergene Fossaa
*/
public class AsyncExecution {
- private static final AtomicReference<Executor> deprecatedExecutor = new AtomicReference<>(null);
-
- private static Executor createDeprecatedExecutor() {
- int numCpus = Runtime.getRuntime().availableProcessors();
- ThreadPoolExecutor executor = new ThreadPoolExecutor(2*numCpus, numCpus*10, 1L, TimeUnit.SECONDS,
- new SynchronousQueue<>(false), ThreadFactoryFactory.getThreadFactory("search"));
- // Prestart needed, if not all threads will be created by the fist N tasks and hence they might also
- // get the dreaded thread locals initialized even if they will never run.
- // That counters what we we want to achieve with the Q that will prefer thread locality.
- executor.prestartAllCoreThreads();
- return executor;
- }
- private static Executor getDeprecatedExecutor() {
- Executor executor = deprecatedExecutor.get();
- if (executor == null) {
- synchronized (deprecatedExecutor) {
- executor = deprecatedExecutor.get();
- if (executor == null) {
- executor = createDeprecatedExecutor();
- deprecatedExecutor.set(executor);
- }
- }
- }
- return executor;
- }
/** The execution this executes */
private final Execution execution;
@@ -138,41 +113,29 @@ public class AsyncExecution {
*
* @see com.yahoo.search.searchchain.Execution
*/
- public FutureResult search(Query query, Executor executor) {
- return getFutureResult(executor, () -> execution.search(query), query);
- }
- @Deprecated
public FutureResult search(Query query) {
- return search(query, getDeprecatedExecutor());
+ return getFutureResult(execution.context().executor(), () -> execution.search(query), query);
}
- public FutureResult searchAndFill(Query query, Executor executor) {
- return getFutureResult(executor, () -> {
+ public FutureResult searchAndFill(Query query) {
+ return getFutureResult(execution.context().executor(), () -> {
Result result = execution.search(query);
execution.fill(result, query.getPresentation().getSummary());
return result;
}, query);
}
- @Deprecated
- public FutureResult searchAndFill(Query query) {
- return searchAndFill(query, getDeprecatedExecutor());
- }
/**
* The future of this functions returns the original Result
*
* @see com.yahoo.search.searchchain.Execution
*/
- public FutureResult fill(Result result, String summaryClass, Executor executor) {
- return getFutureResult(executor, () -> {
+ public FutureResult fill(Result result, String summaryClass) {
+ return getFutureResult(execution.context().executor(), () -> {
execution.fill(result, summaryClass);
return result;
}, result.getQuery());
}
- @Deprecated
- public FutureResult fill(Result result, String summaryClass) {
- return fill(result, summaryClass, getDeprecatedExecutor());
- }
private static <T> Future<T> getFuture(Executor executor, Callable<T> callable) {
FutureTask<T> future = new FutureTask<>(callable);
@@ -206,14 +169,15 @@ public class AsyncExecution {
* done when the timeout expires, it will be cancelled, and it will return a
* result. All unfinished Futures will be cancelled.
*
- * @return the list of results in the same order as returned from the task
- * collection
+ * @return the list of results in the same order as returned from the task collection
*/
- public static List<Result> waitForAll(Collection<FutureResult> tasks, long timeoutMs, Executor executor) {
+ public static List<Result> waitForAll(Collection<FutureResult> tasks, long timeoutMs) {
+ if (tasks.isEmpty()) return new ArrayList<>();
+
// Copy the list in case it is modified while we are waiting
List<FutureResult> workingTasks = new ArrayList<>(tasks);
try {
- runTask(executor, () -> {
+ runTask(tasks.stream().findAny().get().getExecution().context().executor(), () -> {
for (FutureResult task : workingTasks)
task.get(timeoutMs, TimeUnit.MILLISECONDS);
}).get(timeoutMs, TimeUnit.MILLISECONDS);
@@ -233,9 +197,5 @@ public class AsyncExecution {
}
return results;
}
- @Deprecated
- public static List<Result> waitForAll(Collection<FutureResult> tasks, long timeoutMs) {
- return waitForAll(tasks, timeoutMs, getDeprecatedExecutor());
- }
}
diff --git a/container-search/src/main/java/com/yahoo/search/searchchain/Execution.java b/container-search/src/main/java/com/yahoo/search/searchchain/Execution.java
index 86ba8664dee..fc2d44e01d9 100644
--- a/container-search/src/main/java/com/yahoo/search/searchchain/Execution.java
+++ b/container-search/src/main/java/com/yahoo/search/searchchain/Execution.java
@@ -18,6 +18,7 @@ import com.yahoo.search.rendering.RendererRegistry;
import com.yahoo.search.statistics.TimeTracker;
import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
/**
* <p>An execution of a search chain. This keeps track of the call state for an execution (in the calling thread)
@@ -122,7 +123,7 @@ public class Execution extends com.yahoo.processing.execution.Execution {
this.tokenRegistry = tokenRegistry;
this.rendererRegistry = rendererRegistry;
this.linguistics = linguistics;
- this.executor = executor != null ? executor : Runnable::run; // Run in same thread if no executor is provided
+ this.executor = executor != null ? executor : Executors.newSingleThreadExecutor();
}
/** @deprecated pass an executor */
@@ -362,7 +363,7 @@ public class Execution extends com.yahoo.processing.execution.Execution {
/**
* Returns the executor that should be used to execute tasks as part of this execution.
- * This is never null but will be an executor that runs in the same thread if none is passed to this.
+ * This is never null but will be an executor that runs a single thread if none is passed to this.
*/
public Executor executor() { return executor; }
diff --git a/container-search/src/main/java/com/yahoo/search/searchchain/ExecutionFactory.java b/container-search/src/main/java/com/yahoo/search/searchchain/ExecutionFactory.java
index 210a77ccf57..f6977849a02 100644
--- a/container-search/src/main/java/com/yahoo/search/searchchain/ExecutionFactory.java
+++ b/container-search/src/main/java/com/yahoo/search/searchchain/ExecutionFactory.java
@@ -66,7 +66,7 @@ public class ExecutionFactory extends AbstractComponent {
this.specialTokens = new SpecialTokenRegistry(specialTokens);
this.linguistics = linguistics;
this.rendererRegistry = new RendererRegistry(renderers.allComponents());
- this.executor = executor != null ? executor : Runnable::run;
+ this.executor = executor != null ? executor : Executors.newSingleThreadExecutor();
}
/** @deprecated pass the container threadpool */
diff --git a/container-search/src/main/java/com/yahoo/search/searchchain/FutureResult.java b/container-search/src/main/java/com/yahoo/search/searchchain/FutureResult.java
index 81d98f828fd..64bbcb4780c 100644
--- a/container-search/src/main/java/com/yahoo/search/searchchain/FutureResult.java
+++ b/container-search/src/main/java/com/yahoo/search/searchchain/FutureResult.java
@@ -24,7 +24,6 @@ public class FutureResult extends FutureTask<Result> {
private final Query query;
- /** Only used for generating messages */
private final Execution execution;
private final static Logger log = Logger.getLogger(FutureResult.class.getName());
@@ -90,6 +89,9 @@ public class FutureResult extends FutureTask<Result> {
return query;
}
+ /** Returns the execution which creates this */
+ public Execution getExecution() { return execution; }
+
private ErrorMessage createInterruptedError(Exception e) {
return ErrorMessage.createUnspecifiedError(execution + " was interrupted while executing: " +
Exceptions.toMessageString(e));
diff --git a/container-search/src/test/java/com/yahoo/prelude/searcher/test/BlendingSearcherTestCase.java b/container-search/src/test/java/com/yahoo/prelude/searcher/test/BlendingSearcherTestCase.java
index 69d66c6341f..50509300dd1 100644
--- a/container-search/src/test/java/com/yahoo/prelude/searcher/test/BlendingSearcherTestCase.java
+++ b/container-search/src/test/java/com/yahoo/prelude/searcher/test/BlendingSearcherTestCase.java
@@ -6,8 +6,6 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
import com.yahoo.component.ComponentId;
import com.yahoo.component.chain.Chain;
@@ -49,18 +47,6 @@ public class BlendingSearcherTestCase {
private static final double delta = 0.00000001;
- private ExecutorService executor;
-
- @Before
- public void setUp() throws Exception {
- executor = Executors.newFixedThreadPool(16);
- }
-
- @After
- public void tearDown() {
- assertEquals(0, executor.shutdownNow().size());
- }
-
public class BlendingSearcherWrapper extends Searcher {
private SearchChain blendingChain;
@@ -127,7 +113,7 @@ public class BlendingSearcherTestCase {
StrictContractsConfig contracts = new StrictContractsConfig.Builder().build();
FederationSearcher fedSearcher =
- new FederationSearcher(new FederationConfig(builder), contracts, new ComponentRegistry<>(), executor);
+ new FederationSearcher(new FederationConfig(builder), contracts, new ComponentRegistry<>());
BlendingSearcher blendingSearcher = new BlendingSearcher(blendingField);
blendingChain = new SearchChain(ComponentId.createAnonymousComponentId("blendingChain"), blendingSearcher, fedSearcher);
return true;
diff --git a/container-search/src/test/java/com/yahoo/search/federation/FederationSearcherTest.java b/container-search/src/test/java/com/yahoo/search/federation/FederationSearcherTest.java
index 7651849a519..ef9e0311e59 100644
--- a/container-search/src/test/java/com/yahoo/search/federation/FederationSearcherTest.java
+++ b/container-search/src/test/java/com/yahoo/search/federation/FederationSearcherTest.java
@@ -28,8 +28,6 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -43,18 +41,6 @@ public class FederationSearcherTest {
private static final String hasBeenFilled = "hasBeenFilled";
- private ExecutorService executor;
-
- @Before
- public void setUp() throws Exception {
- executor = Executors.newFixedThreadPool(16);
- }
-
- @After
- public void tearDown() {
- assertEquals(0, executor.shutdownNow().size());
- }
-
@Test
public void require_that_hits_are_not_automatically_filled() {
Result result = federationToSingleAddHitSearcher().search();
@@ -69,7 +55,7 @@ public class FederationSearcherTest {
@Test
public void require_that_hits_can_be_filled_when_moved() {
- FederationTester tester = new FederationTester(executor);
+ FederationTester tester = new FederationTester();
tester.addSearchChain("chain1", new AddHitSearcher());
tester.addSearchChain("chain2", new AddHitSearcher());
@@ -97,7 +83,7 @@ public class FederationSearcherTest {
@Test
public void require_that_hits_can_be_filled_for_multiple_chains_and_queries() {
- FederationTester tester = new FederationTester(executor);
+ FederationTester tester = new FederationTester();
tester.addSearchChain("chain1", new AddHitSearcher());
tester.addSearchChain("chain2", new ModifyQueryAndAddHitSearcher("modified1"));
tester.addSearchChain("chain3", new ModifyQueryAndAddHitSearcher("modified2"));
@@ -111,7 +97,7 @@ public class FederationSearcherTest {
@Test
public void require_that_hits_that_time_out_in_fill_are_removed() {
- FederationTester tester = new FederationTester(executor);
+ FederationTester tester = new FederationTester();
tester.addSearchChain("chain1", new AddHitSearcher());
tester.addSearchChain("chain2", new TimeoutInFillSearcher());
@@ -129,7 +115,7 @@ public class FederationSearcherTest {
public void require_that_optional_search_chains_does_not_delay_federation() {
BlockingSearcher blockingSearcher = new BlockingSearcher();
- FederationTester tester = new FederationTester(executor);
+ FederationTester tester = new FederationTester();
tester.addSearchChain("chain1", new AddHitSearcher());
tester.addOptionalSearchChain("chain2", blockingSearcher);
@@ -158,7 +144,7 @@ public class FederationSearcherTest {
@Test
public void require_that_calling_a_single_slow_source_with_long_timeout_does_not_delay_federation() {
- FederationTester tester = new FederationTester(executor);
+ FederationTester tester = new FederationTester();
tester.addSearchChain("chain1",
new FederationOptions().setUseByDefault(true).setRequestTimeoutInMilliseconds(3600 * 1000),
new BlockingSearcher() );
@@ -188,7 +174,7 @@ public class FederationSearcherTest {
FederationSearcher searcher = new FederationSearcher(
new FederationConfig(new FederationConfig.Builder().targetSelector(targetSelectorId.toString())),
new StrictContractsConfig(new StrictContractsConfig.Builder()),
- targetSelectors, executor);
+ targetSelectors);
Query query = new Query();
query.setTimeout(20000);
@@ -207,7 +193,7 @@ public class FederationSearcherTest {
FederationSearcher searcher = new FederationSearcher(
new FederationConfig(new FederationConfig.Builder().targetSelector(targetSelectorId.toString())),
new StrictContractsConfig(new StrictContractsConfig.Builder()),
- targetSelectors, executor);
+ targetSelectors);
Query query = new Query();
query.setTimeout(20000);
@@ -241,7 +227,7 @@ public class FederationSearcherTest {
}
private FederationTester federationToSingleAddHitSearcher() {
- FederationTester tester = new FederationTester(executor);
+ FederationTester tester = new FederationTester();
tester.addSearchChain("chain1", new AddHitSearcher());
return tester;
}
diff --git a/container-search/src/test/java/com/yahoo/search/federation/FederationSearcherTestCase.java b/container-search/src/test/java/com/yahoo/search/federation/FederationSearcherTestCase.java
index 65640cc94f0..d7c3217069c 100644
--- a/container-search/src/test/java/com/yahoo/search/federation/FederationSearcherTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/federation/FederationSearcherTestCase.java
@@ -25,8 +25,6 @@ import org.junit.Before;
import org.junit.Test;
import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
import static com.yahoo.search.federation.StrictContractsConfig.PropagateSourceProperties;
import static org.junit.Assert.assertEquals;
@@ -64,20 +62,17 @@ public class FederationSearcherTestCase {
private FederationConfig.Builder builder;
private SearchChainRegistry chainRegistry;
- private ExecutorService executor;
@Before
public void setUp() throws Exception {
builder = new FederationConfig.Builder();
chainRegistry = new SearchChainRegistry();
- executor = Executors.newFixedThreadPool(16);
}
@After
public void tearDown() {
builder = null;
chainRegistry = null;
- assertEquals(0, executor.shutdownNow().size());
}
private void addChained(Searcher searcher, String sourceName) {
@@ -107,7 +102,7 @@ public class FederationSearcherTestCase {
}
private Searcher buildFederation(StrictContractsConfig contracts) throws RuntimeException {
- return new FederationSearcher(new FederationConfig(builder), contracts, new ComponentRegistry<>(), executor);
+ return new FederationSearcher(new FederationConfig(builder), contracts, new ComponentRegistry<>());
}
private SearchChain createSearchChain(ComponentId chainId,Searcher searcher) {
@@ -169,8 +164,7 @@ public class FederationSearcherTestCase {
new FederationSearcher(new FederationConfig(builder),
new StrictContractsConfig(
new StrictContractsConfig.Builder().searchchains(strictContracts)),
- new ComponentRegistry<>(),
- executor));
+ new ComponentRegistry<>()));
}
@Test
@@ -356,7 +350,7 @@ public class FederationSearcherTestCase {
builder.addSourceForProvider(news, provider1, provider1, true, options, List.of());
builder.addSourceForProvider(news, provider2, provider2, false, options, List.of());
- return new FederationSearcher(new ComponentId("federation"), builder.build(), executor);
+ return new FederationSearcher(new ComponentId("federation"), builder.build());
}
private static class MockProvider extends Searcher {
diff --git a/container-search/src/test/java/com/yahoo/search/federation/FederationTester.java b/container-search/src/test/java/com/yahoo/search/federation/FederationTester.java
index 433fe557b24..7a9d5f3a4f0 100644
--- a/container-search/src/test/java/com/yahoo/search/federation/FederationTester.java
+++ b/container-search/src/test/java/com/yahoo/search/federation/FederationTester.java
@@ -12,7 +12,6 @@ import com.yahoo.search.searchchain.SearchChainRegistry;
import com.yahoo.search.searchchain.model.federation.FederationOptions;
import java.util.Collections;
-import java.util.concurrent.Executor;
/**
* @author Tony Vaagenes
@@ -23,11 +22,7 @@ class FederationTester {
private final SearchChainRegistry registry = new SearchChainRegistry();
private Execution execution;
- private final Executor executor;
- FederationTester(Executor executor) {
- this.executor = executor;
- }
void addSearchChain(String id, Searcher... searchers) {
addSearchChain(id, federationOptions(), searchers);
}
@@ -51,7 +46,7 @@ class FederationTester {
}
FederationSearcher buildFederationSearcher() {
- return new FederationSearcher(ComponentId.fromString("federation"), builder.build(), executor);
+ return new FederationSearcher(ComponentId.fromString("federation"), builder.build());
}
public Result search() {
diff --git a/container-search/src/test/java/com/yahoo/search/federation/HitCountTestCase.java b/container-search/src/test/java/com/yahoo/search/federation/HitCountTestCase.java
index 163263b7640..6f1570b702f 100644
--- a/container-search/src/test/java/com/yahoo/search/federation/HitCountTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/federation/HitCountTestCase.java
@@ -5,14 +5,10 @@ import com.yahoo.search.Query;
import com.yahoo.search.Result;
import com.yahoo.search.result.Hit;
import com.yahoo.search.result.HitGroup;
-import org.junit.After;
-import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -22,24 +18,12 @@ import static org.junit.Assert.assertTrue;
*/
public class HitCountTestCase {
- private ExecutorService executor;
-
- @Before
- public void setUp() throws Exception {
- executor = Executors.newFixedThreadPool(16);
- }
-
- @After
- public void tearDown() {
- assertEquals(0, executor.shutdownNow().size());
- }
-
@Test
public void require_that_offset_and_hits_are_adjusted_when_federating() {
final int chain1RelevanceMultiplier = 1;
final int chain2RelevanceMultiplier = 10;
- FederationTester tester = new FederationTester(executor);
+ FederationTester tester = new FederationTester();
tester.addSearchChain("chain1", new AddHitsWithRelevanceSearcher("chain1", chain1RelevanceMultiplier));
tester.addSearchChain("chain2", new AddHitsWithRelevanceSearcher("chain2", chain2RelevanceMultiplier));
@@ -61,7 +45,7 @@ public class HitCountTestCase {
final long chain2TotalHitCount = 7;
final long chain2DeepHitCount = 11;
- FederationTester tester = new FederationTester(executor);
+ FederationTester tester = new FederationTester();
tester.addSearchChain("chain1", new SetHitCountsSearcher(chain1TotalHitCount, chain1DeepHitCount));
tester.addSearchChain("chain2", new SetHitCountsSearcher(chain2TotalHitCount, chain2DeepHitCount));
@@ -79,7 +63,7 @@ public class HitCountTestCase {
final long chain2TotalHitCount = 11;
final long chain2DeepHitCount = 15;
- FederationTester tester = new FederationTester(executor);
+ FederationTester tester = new FederationTester();
tester.addSearchChain("chain1",
new SetHitCountsSearcher(chain1TotalHitCount, chain1DeepHitCount));
diff --git a/container-search/src/test/java/com/yahoo/search/searchchain/AsyncExecutionOfOneChainTestCase.java b/container-search/src/test/java/com/yahoo/search/searchchain/AsyncExecutionOfOneChainTestCase.java
index 74d74e96b05..f0be6a25f92 100644
--- a/container-search/src/test/java/com/yahoo/search/searchchain/AsyncExecutionOfOneChainTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/searchchain/AsyncExecutionOfOneChainTestCase.java
@@ -58,12 +58,12 @@ public class AsyncExecutionOfOneChainTestCase {
public Result search(Query query, Execution execution) {
List<FutureResult> futureResults = new ArrayList<>(parallelism);
for (int i = 0; i < parallelism; i++)
- futureResults.add(new AsyncExecution(execution).search(query.clone(), executor));
+ futureResults.add(new AsyncExecution(execution).search(query.clone()));
Result mainResult = execution.search(query);
// Add hits from other threads
- AsyncExecution.waitForAll(futureResults,query.getTimeLeft(), executor);
+ AsyncExecution.waitForAll(futureResults,query.getTimeLeft());
for (FutureResult futureResult : futureResults) {
Result result = futureResult.get();
mainResult.mergeWith(result);
diff --git a/container-search/src/test/java/com/yahoo/search/searchchain/AsyncExecutionTestCase.java b/container-search/src/test/java/com/yahoo/search/searchchain/AsyncExecutionTestCase.java
index ec1c78437b6..8f23c7eef83 100644
--- a/container-search/src/test/java/com/yahoo/search/searchchain/AsyncExecutionTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/searchchain/AsyncExecutionTestCase.java
@@ -7,15 +7,11 @@ import com.yahoo.search.Query;
import com.yahoo.search.Result;
import com.yahoo.search.Searcher;
import com.yahoo.search.result.Hit;
-import org.junit.After;
-import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertEquals;
@@ -30,29 +26,17 @@ import static org.junit.Assert.assertTrue;
*/
public class AsyncExecutionTestCase {
- private ExecutorService executor;
-
- @Before
- public void setUp() throws Exception {
- executor = Executors.newFixedThreadPool(16);
- }
-
- @After
- public void tearDown() {
- assertEquals(0, executor.shutdownNow().size());
- }
-
public static class WaitingSearcher extends Searcher {
int waittime;
- private WaitingSearcher(String id,int waittime) {
+ private WaitingSearcher(String id, int waittime) {
super(new ComponentId(id));
this.waittime = waittime;
}
@Override
- public Result search(Query query,Execution execution) {
- Result result=execution.search(query);
+ public Result search(Query query, Execution execution) {
+ Result result = execution.search(query);
if(waittime != 0)
try {
Thread.sleep(waittime);
@@ -64,7 +48,7 @@ public class AsyncExecutionTestCase {
public static class SimpleSearcher extends Searcher {
- public Result search(Query query,Execution execution) {
+ public Result search(Query query, Execution execution) {
return execution.search(query);
}
@@ -79,7 +63,7 @@ public class AsyncExecutionTestCase {
Chain<Searcher> searchChain = new Chain<>(new ComponentId("chain"), searchList);
AsyncExecution asyncExecution = new AsyncExecution(searchChain, Execution.Context.createContextStub());
- FutureResult future = asyncExecution.search(new Query("?hits=0"), executor);
+ FutureResult future = asyncExecution.search(new Query("?hits=0"));
Result result = future.get(0, TimeUnit.MILLISECONDS);
assertNotNull(result.hits().getError());
@@ -98,11 +82,11 @@ public class AsyncExecutionTestCase {
Arrays.asList(new Searcher[]{new SimpleSearcher()})
);
- FutureResult slowFuture = new AsyncExecution(slowChain, Execution.Context.createContextStub()).search(new Query("?hits=0"), executor);
- FutureResult fastFuture = new AsyncExecution(fastChain, Execution.Context.createContextStub()).search(new Query("?hits=0"), executor);
+ FutureResult slowFuture = new AsyncExecution(slowChain, Execution.Context.createContextStub()).search(new Query("?hits=0"));
+ FutureResult fastFuture = new AsyncExecution(fastChain, Execution.Context.createContextStub()).search(new Query("?hits=0"));
fastFuture.get();
FutureResult [] reslist = new FutureResult[]{slowFuture,fastFuture};
- List<Result> results = AsyncExecution.waitForAll(Arrays.asList(reslist),0, executor);
+ List<Result> results = AsyncExecution.waitForAll(Arrays.asList(reslist),0);
//assertTrue(slowFuture.isCancelled());
assertTrue(fastFuture.isDone() && !fastFuture.isCancelled());
@@ -133,26 +117,26 @@ public class AsyncExecutionTestCase {
@Test
public void testAsyncThroughSync() {
- Query query=new Query("?query=test");
- Searcher searcher=new ResultProducingSearcher();
- FutureResult futureResult=new AsyncExecution(new Execution(searcher, Execution.Context.createContextStub())).search(query, executor);
+ Query query = new Query("?query=test");
+ Searcher searcher = new ResultProducingSearcher();
+ FutureResult futureResult = new AsyncExecution(new Execution(searcher, Execution.Context.createContextStub())).search(query);
- List<FutureResult> futureResultList=new ArrayList<>();
+ List<FutureResult> futureResultList = new ArrayList<>();
futureResultList.add(futureResult);
- AsyncExecution.waitForAll(futureResultList,1000, executor);
- Result result=futureResult.get();
+ AsyncExecution.waitForAll(futureResultList, 1000);
+ Result result = futureResult.get();
- assertEquals(1,result.hits().size());
- assertEquals("hello",result.hits().get(0).getField("test"));
+ assertEquals(1, result.hits().size());
+ assertEquals("hello", result.hits().get(0).getField("test"));
}
private static class ResultProducingSearcher extends Searcher {
@Override
- public Result search(Query query,Execution execution) {
- Result result=new Result(query);
- Hit hit=new Hit("test");
- hit.setField("test","hello");
+ public Result search(Query query, Execution execution) {
+ Result result = new Result(query);
+ Hit hit = new Hit("test");
+ hit.setField("test", "hello");
result.hits().add(hit);
return result;
}
@@ -174,7 +158,7 @@ public class AsyncExecutionTestCase {
});
Execution execution = new Execution(chain, Execution.Context.createContextStub());
AsyncExecution async = new AsyncExecution(execution);
- FutureResult future = async.searchAndFill(new Query(), executor);
+ FutureResult future = async.searchAndFill(new Query());
future.get(1, TimeUnit.MILLISECONDS);
}
diff --git a/container-search/src/test/java/com/yahoo/search/searchchain/VespaAsyncSearcherTest.java b/container-search/src/test/java/com/yahoo/search/searchchain/VespaAsyncSearcherTest.java
index 0b893020a16..7ac6ded7877 100644
--- a/container-search/src/test/java/com/yahoo/search/searchchain/VespaAsyncSearcherTest.java
+++ b/container-search/src/test/java/com/yahoo/search/searchchain/VespaAsyncSearcherTest.java
@@ -2,7 +2,6 @@
package com.yahoo.search.searchchain;
import com.yahoo.component.chain.Chain;
-import com.yahoo.concurrent.InThreadExecutorService;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
import com.yahoo.search.Searcher;
@@ -12,7 +11,6 @@ import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
-import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -40,19 +38,16 @@ public class VespaAsyncSearcherTest {
private static class FirstSearcher extends Searcher {
- private final Executor executor;
- FirstSearcher(Executor executor) { this.executor = executor;}
-
@Override
public Result search(Query query, Execution execution) {
int count = 10;
List<FutureResult> futures = new ArrayList<>(count);
for (int i = 0; i < count; i++) {
Query subQuery = query.clone();
- FutureResult future = new AsyncExecution(execution).search(subQuery, executor);
+ FutureResult future = new AsyncExecution(execution).search(subQuery);
futures.add(future);
}
- AsyncExecution.waitForAll(futures, 10 * 60 * 1000, new InThreadExecutorService());
+ AsyncExecution.waitForAll(futures, 10 * 60 * 1000);
Result combinedResult = new Result(query);
for (FutureResult resultFuture : futures) {
Result result = resultFuture.get();
@@ -75,7 +70,7 @@ public class VespaAsyncSearcherTest {
@Test
public void testAsyncExecution() {
- Chain<Searcher> chain = new Chain<>(new FirstSearcher(executor), new SecondSearcher());
+ Chain<Searcher> chain = new Chain<>(new FirstSearcher(), new SecondSearcher());
Execution execution = new Execution(chain, Execution.Context.createContextStub(null));
Query query = new Query();
execution.search(query);