summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java33
1 files changed, 12 insertions, 21 deletions
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 b32eec876cc..499cb634295 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
@@ -206,12 +206,8 @@ public class FederationSearcher extends ForkingSearcher {
}
private void search(Query query, Execution execution, Target target, Result mergedResults) {
- Optional<Result> result = search(query, execution, target);
- if (result.isPresent()) {
- mergeResult(query, target, mergedResults, result.get());
- } else {
- addSearchChainTimedOutError(query, target.getId());
- }
+ mergeResult(query, target, mergedResults, search(query, execution, target).orElse(createSearchChainTimedOutResult(query, target)));
+
}
private void search(Query query, Execution execution, Collection<Target> targets, Result mergedResults) {
@@ -220,22 +216,16 @@ public class FederationSearcher extends ForkingSearcher {
HitOrderer s = null;
for (FederationResult.TargetResult targetResult : results.all()) {
- if ( ! targetResult.successfullyCompleted()) {
- addSearchChainTimedOutError(query, targetResult.target.getId());
- } else {
- if (s == null) {
- s = dirtyCopyIfModifiedOrderer(mergedResults.hits(), targetResult.getOrTimeoutError().hits().getOrderer());
- }
- mergeResult(query, targetResult.target, mergedResults, targetResult.getOrTimeoutError());
- }
+ if (s == null)
+ s = dirtyCopyIfModifiedOrderer(mergedResults.hits(), targetResult.getOrTimeoutError().hits().getOrderer());
+ mergeResult(query, targetResult.target, mergedResults, targetResult.getOrTimeoutError());
}
}
private Optional<Result> search(Query query, Execution execution, Target target) {
long timeout = target.federationOptions().getSearchChainExecutionTimeoutInMilliseconds(query.getTimeLeft());
- if (timeout <= 0) {
- return Optional.empty();
- }
+ if (timeout <= 0) return Optional.empty();
+
Execution newExecution = new Execution(target.getChain(), execution.context());
if (strictSearchchain) {
query.resetTimeout();
@@ -559,10 +549,11 @@ public class FederationSearcher extends ForkingSearcher {
return target.federationOptions().getRequestTimeoutInMilliseconds() > query.getTimeout();
}
- private static void addSearchChainTimedOutError(Query query, ComponentId searchChainId) {
- ErrorMessage timeoutMessage = ErrorMessage.createTimeout("The search chain '" + searchChainId + "' timed out.");
- timeoutMessage.setSource(searchChainId.stringValue());
- query.errors().add(timeoutMessage);
+ private static Result createSearchChainTimedOutResult(Query query, Target target) {
+ ErrorMessage timeoutMessage = ErrorMessage.createTimeout("Error in execution of chain '" + target.getId() +
+ "': " + "Chain timed out.");
+ timeoutMessage.setSource(target.getId().stringValue());
+ return new Result(query, timeoutMessage);
}
private void mergeResult(Query query, Target target, Result mergedResults, Result result) {