aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/federation/sourceref/SourceRefResolver.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/federation/sourceref/SourceRefResolver.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/federation/sourceref/SourceRefResolver.java43
1 files changed, 20 insertions, 23 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/federation/sourceref/SourceRefResolver.java b/container-search/src/main/java/com/yahoo/search/federation/sourceref/SourceRefResolver.java
index 2e7849dd85a..b5c40db01f8 100644
--- a/container-search/src/main/java/com/yahoo/search/federation/sourceref/SourceRefResolver.java
+++ b/container-search/src/main/java/com/yahoo/search/federation/sourceref/SourceRefResolver.java
@@ -4,10 +4,9 @@ package com.yahoo.search.federation.sourceref;
import com.yahoo.component.ComponentSpecification;
import com.yahoo.processing.request.Properties;
-import java.util.LinkedHashSet;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import java.util.Set;
/**
* Maps a source reference to search chain invocation specs.
@@ -24,21 +23,18 @@ public class SourceRefResolver {
this.schema2Clusters = schema2Clusters;
}
- public Set<SearchChainInvocationSpec> resolve(ComponentSpecification sourceRef,
- Properties sourceToProviderMap) throws UnresolvedSearchChainException {
- try {
- return Set.of(searchChainResolver.resolve(sourceRef, sourceToProviderMap));
- } catch (UnresolvedSourceRefException e) {
+ public List<ResolveResult> resolve(ComponentSpecification sourceRef, Properties sourceToProviderMap) {
+ ResolveResult searchChainResolveResult = searchChainResolver.resolve(sourceRef, sourceToProviderMap);
+ if (searchChainResolveResult.invocationSpec() == null) {
return resolveClustersWithDocument(sourceRef, sourceToProviderMap);
}
+ return List.of(searchChainResolveResult);
}
- private Set<SearchChainInvocationSpec> resolveClustersWithDocument(ComponentSpecification sourceRef,
- Properties sourceToProviderMap)
- throws UnresolvedSearchChainException {
+ private List<ResolveResult> resolveClustersWithDocument(ComponentSpecification sourceRef, Properties sourceToProviderMap) {
if (hasOnlyName(sourceRef)) {
- Set<SearchChainInvocationSpec> clusterSearchChains = new LinkedHashSet<>();
+ List<ResolveResult> clusterSearchChains = new ArrayList<>();
List<String> clusters = schema2Clusters.getOrDefault(sourceRef.getName(), List.of());
for (String cluster : clusters) {
@@ -48,21 +44,22 @@ public class SourceRefResolver {
if ( ! clusterSearchChains.isEmpty())
return clusterSearchChains;
}
- throw UnresolvedSourceRefException.createForMissingSourceRef(sourceRef);
+ return List.of(new ResolveResult(createForMissingSourceRef(sourceRef)));
}
- private SearchChainInvocationSpec resolveClusterSearchChain(String cluster,
- ComponentSpecification sourceRef,
- Properties sourceToProviderMap)
- throws UnresolvedSearchChainException {
- try {
- return searchChainResolver.resolve(new ComponentSpecification(cluster), sourceToProviderMap);
- }
- catch (UnresolvedSearchChainException e) {
- throw new UnresolvedSearchChainException("Failed to resolve cluster search chain '" + cluster +
- "' when using source ref '" + sourceRef +
- "' as a document name.");
+ static String createForMissingSourceRef(ComponentSpecification source) {
+ return "Could not resolve source ref '" + source + "'.";
+ }
+
+ private ResolveResult resolveClusterSearchChain(String cluster,
+ ComponentSpecification sourceRef,
+ Properties sourceToProviderMap) {
+ var resolveResult = searchChainResolver.resolve(new ComponentSpecification(cluster), sourceToProviderMap);
+ if (resolveResult.invocationSpec() == null) {
+ return new ResolveResult("Failed to resolve cluster search chain '" + cluster +
+ "' when using source ref '" + sourceRef + "' as a document name.");
}
+ return resolveResult;
}
private boolean hasOnlyName(ComponentSpecification sourceSpec) {