diff options
author | Bjørn Christian Seime <bjorncs@yahoo-inc.com> | 2017-03-16 12:53:02 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahoo-inc.com> | 2017-03-16 12:53:02 +0100 |
commit | 61b6b41616694191ff54953e7b4c6ad0249c1805 (patch) | |
tree | a47525641210c19bdba45b890d29a4d62ee16091 /container-search | |
parent | 671c4e06f8232cb68fbf690cc9198f02b836e522 (diff) |
Don't call Query.setTimeout() with negative value
Diffstat (limited to 'container-search')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java | 44 |
1 files changed, 30 insertions, 14 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 67898dc0289..6de2ce4998b 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 @@ -10,6 +10,7 @@ import com.yahoo.component.chain.dependencies.After; import com.yahoo.component.chain.dependencies.Provides; import com.yahoo.component.provider.ComponentRegistry; import com.yahoo.concurrent.CopyOnWriteHashMap; +import com.yahoo.errorhandling.Results; import com.yahoo.errorhandling.Results.Builder; import com.yahoo.prelude.IndexFacts; import com.yahoo.processing.request.CompoundName; @@ -37,21 +38,29 @@ import com.yahoo.search.searchchain.ForkingSearcher; import com.yahoo.search.searchchain.FutureResult; import com.yahoo.search.searchchain.SearchChainRegistry; import com.yahoo.search.searchchain.model.federation.FederationOptions; -import com.yahoo.errorhandling.Results; - import org.apache.commons.lang.StringUtils; -import static com.google.common.base.Preconditions.checkNotNull; -import static com.yahoo.collections.CollectionUtil.first; -import static com.yahoo.container.util.Util.quote; -import static com.yahoo.search.federation.StrictContractsConfig.PropagateSourceProperties; - import java.time.Clock; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.IdentityHashMap; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; import java.util.Map.Entry; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.logging.Logger; +import static com.google.common.base.Preconditions.checkNotNull; +import static com.yahoo.collections.CollectionUtil.first; +import static com.yahoo.container.util.Util.quote; +import static com.yahoo.search.federation.StrictContractsConfig.PropagateSourceProperties; + /** * This searcher takes a set of sources, looks them up in config and fire off the correct searchchains. * @@ -194,8 +203,12 @@ public class FederationSearcher extends ForkingSearcher { } private void search(Query query, Execution execution, Target target, Result mergedResults) { - Result result = search(query, execution, target); - mergeResult(query, target, mergedResults, result); + Optional<Result> result = search(query, execution, target); + if (result.isPresent()) { + mergeResult(query, target, mergedResults, result.get()); + } else { + addSearchChainTimedOutError(query, target.getId()); + } } private void search(Query query, Execution execution, Collection<Target> targets, Result mergedResults) { @@ -215,14 +228,17 @@ public class FederationSearcher extends ForkingSearcher { } } - private Result search(Query query, Execution execution, Target target) { + private Optional<Result> search(Query query, Execution execution, Target target) { long timeout = target.federationOptions().getSearchChainExecutionTimeoutInMilliseconds(query.getTimeLeft()); + if (timeout <= 0) { + return Optional.empty(); + } Execution newExecution = new Execution(target.getChain(), execution.context()); if (strictSearchchain) { query.resetTimeout(); - return newExecution.search(createFederationQuery(query, query, Window.from(query), timeout, target)); + return Optional.of(newExecution.search(createFederationQuery(query, query, Window.from(query), timeout, target))); } else { - return newExecution.search(cloneFederationQuery(query, Window.from(query), timeout, target)); + return Optional.of(newExecution.search(cloneFederationQuery(query, Window.from(query), timeout, target))); } } @@ -537,7 +553,7 @@ public class FederationSearcher extends ForkingSearcher { return target.federationOptions().getRequestTimeoutInMilliseconds() > query.getTimeout(); } - private void addSearchChainTimedOutError(Query query, ComponentId searchChainId) { + 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); |