summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2022-08-13 09:29:24 +0200
committerGitHub <noreply@github.com>2022-08-13 09:29:24 +0200
commit629d25fec86c8ca0a1c0e61da58932e05b0b2802 (patch)
tree903b80a42005591ea0bfe63a8217bd195171d2ce
parent21075574babdb08347dc04b92fe2105d490b65db (diff)
parent43a7a44cc878fdc80b79b16ad7568b24d89c179c (diff)
Merge pull request #23653 from vespa-engine/balder/various-code-healt-and-some-extra-tests
Add some tests from an old branch and some code cleanup.
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/http/FilterChains.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/FederationSearcher.java8
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/defaultsearchchains/LocalClustersCreator.java9
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/defaultsearchchains/VespaSearchChainsCreator.java28
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/search/searchchain/FederationSearcherTest.java25
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/search/searchchain/SchemaChainsTest.java85
-rw-r--r--container-core/src/main/java/com/yahoo/component/chain/model/ChainSpecification.java14
-rw-r--r--container-search/src/test/java/com/yahoo/search/searchchain/test/SearchChainTestCase.java3
8 files changed, 136 insertions, 41 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/http/FilterChains.java b/config-model/src/main/java/com/yahoo/vespa/model/container/http/FilterChains.java
index bc9a45da08a..476c6249a1e 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/http/FilterChains.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/http/FilterChains.java
@@ -11,6 +11,7 @@ import com.yahoo.vespa.model.container.component.chain.Chain;
import com.yahoo.vespa.model.container.component.chain.Chains;
import java.util.Collections;
+import java.util.Set;
/**
* @author Tony Vaagenes
@@ -44,8 +45,8 @@ public class FilterChains extends Chains<Chain<Filter>> {
public static ChainSpecification emptyChainSpec(ComponentId chainId) {
return new ChainSpecification(chainId,
new ChainSpecification.Inheritance(null, null),
- Collections.<Phase>emptySet(),
- Collections.<ComponentSpecification>emptySet());
+ Set.of(),
+ Set.of());
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/FederationSearcher.java b/config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/FederationSearcher.java
index 1abb62fedab..799309b8ca1 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/FederationSearcher.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/FederationSearcher.java
@@ -45,7 +45,7 @@ public class FederationSearcher extends Searcher<FederationSearcherModel> implem
this.documentTypes = documentTypes;
}
- public FederationConfig.Target.SearchChain.Builder getSearchChainConfig() {
+ FederationConfig.Target.SearchChain.Builder getSearchChainConfig() {
FederationConfig.Target.SearchChain.Builder sB = new FederationConfig.Target.SearchChain.Builder();
FederationOptions resolvedOptions = targetOptions.inherit(searchChain.federationOptions());
sB.
@@ -70,12 +70,12 @@ public class FederationSearcher extends Searcher<FederationSearcherModel> implem
final ComponentId id;
final FederationOptions targetOptions;
- public Target(ComponentId id, FederationOptions targetOptions) {
+ Target(ComponentId id, FederationOptions targetOptions) {
this.id = id;
this.targetOptions = targetOptions;
}
- public FederationConfig.Target.Builder getTargetConfig() {
+ FederationConfig.Target.Builder getTargetConfig() {
FederationConfig.Target.Builder tb = new FederationConfig.Target.Builder();
tb.
id(id.stringValue()).
@@ -92,7 +92,7 @@ public class FederationSearcher extends Searcher<FederationSearcherModel> implem
private final SearchChainConfig searchChainConfig;
- public SearchChainTarget(SearchChain searchChain, FederationOptions targetOptions) {
+ SearchChainTarget(SearchChain searchChain, FederationOptions targetOptions) {
super(searchChain.getComponentId(), targetOptions);
searchChainConfig = new SearchChainConfig(searchChain, null, targetOptions, searchChain.getDocumentTypes());
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/defaultsearchchains/LocalClustersCreator.java b/config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/defaultsearchchains/LocalClustersCreator.java
index 229afd56360..0307d5d5774 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/defaultsearchchains/LocalClustersCreator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/defaultsearchchains/LocalClustersCreator.java
@@ -2,15 +2,12 @@
package com.yahoo.vespa.model.container.search.searchchain.defaultsearchchains;
import com.yahoo.component.ComponentId;
-import com.yahoo.component.ComponentSpecification;
-import com.yahoo.component.chain.Phase;
import com.yahoo.component.chain.model.ChainSpecification;
import com.yahoo.search.searchchain.model.federation.FederationOptions;
import com.yahoo.search.searchchain.model.federation.LocalProviderSpec;
import com.yahoo.vespa.model.container.search.searchchain.LocalProvider;
import com.yahoo.vespa.model.container.search.searchchain.SearchChains;
-import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@@ -21,20 +18,20 @@ import java.util.Set;
*/
public class LocalClustersCreator {
- static ChainSpecification emptySearchChainSpecification(String componentName) {
+ private static ChainSpecification emptySearchChainSpecification(String componentName) {
return new ChainSpecification(new ComponentId(componentName),
VespaSearchChainsCreator.inheritsVespaPhases(), //TODO: refactor
List.of(),
Set.of());
}
- static LocalProvider createDefaultLocalProvider(String clusterName) {
+ private static LocalProvider createDefaultLocalProvider(String clusterName) {
return new LocalProvider(emptySearchChainSpecification(clusterName),
new FederationOptions(),
new LocalProviderSpec(clusterName));
}
- static Set<String> presentClusters(SearchChains searchChains) {
+ private static Set<String> presentClusters(SearchChains searchChains) {
Set<String> presentClusters = new LinkedHashSet<>();
for (LocalProvider provider : searchChains.localProviders()) {
presentClusters.add(provider.getClusterName());
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/defaultsearchchains/VespaSearchChainsCreator.java b/config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/defaultsearchchains/VespaSearchChainsCreator.java
index eb396c52fca..d9c3beaaf0e 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/defaultsearchchains/VespaSearchChainsCreator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/search/searchchain/defaultsearchchains/VespaSearchChainsCreator.java
@@ -9,10 +9,18 @@ import com.yahoo.component.chain.model.ChainedComponentModel;
import com.yahoo.search.searchchain.PhaseNames;
import com.yahoo.search.searchchain.model.VespaSearchers;
import com.yahoo.search.searchchain.model.federation.FederationSearcherModel;
-import com.yahoo.vespa.model.container.component.Component;
-import com.yahoo.vespa.model.container.search.searchchain.*;
+import com.yahoo.vespa.model.container.search.searchchain.FederationSearcher;
+import com.yahoo.vespa.model.container.search.searchchain.SearchChain;
+import com.yahoo.vespa.model.container.search.searchchain.SearchChains;
+import com.yahoo.vespa.model.container.search.searchchain.Searcher;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.Optional;
-import java.util.*;
/**
* Creates the search chains vespaPhases, vespa and native.
@@ -36,17 +44,15 @@ public class VespaSearchChainsCreator {
return new Phase(phase, set(before), null);
}
- public static Collection<Phase> linearPhases(String... phases) {
+ static Collection<Phase> linearPhases(String... phases) {
List<Phase> result = new ArrayList<>();
for (int i=0; i < phases.length - 1; ++i) {
- result.add(
- createPhase(phases[i], phases[i+1]));
+ result.add(createPhase(phases[i], phases[i+1]));
}
if (phases.length > 0) {
- result.add(
- createPhase(lastElement(phases), null));
+ result.add(createPhase(lastElement(phases), null));
}
return result;
@@ -54,11 +60,11 @@ public class VespaSearchChainsCreator {
}
private static Set<ComponentSpecification> noSearcherReferences() {
- return Collections.emptySet();
+ return Set.of();
}
private static Collection<Phase> noPhases() {
- return Collections.emptySet();
+ return Set.of();
}
private static ChainSpecification.Inheritance inherits(ComponentId chainId) {
@@ -79,7 +85,7 @@ public class VespaSearchChainsCreator {
private static Searcher<? extends ChainedComponentModel> createSearcher(ChainedComponentModel searcherModel) {
if (searcherModel instanceof FederationSearcherModel) {
- return new FederationSearcher((FederationSearcherModel) searcherModel, Optional.<Component>empty());
+ return new FederationSearcher((FederationSearcherModel) searcherModel, Optional.empty());
} else {
return new Searcher<>(searcherModel);
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/search/searchchain/FederationSearcherTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/search/searchchain/FederationSearcherTest.java
index 89319877d03..98f5bdbcd52 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/container/search/searchchain/FederationSearcherTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/container/search/searchchain/FederationSearcherTest.java
@@ -19,12 +19,11 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
+import java.util.Set;
-import static java.util.Collections.emptyList;
-import static java.util.Collections.emptySet;
-import static java.util.Collections.singletonList;
-import static java.util.stream.Collectors.toList;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* @author Tony Vaagenes
@@ -33,9 +32,9 @@ import static org.junit.jupiter.api.Assertions.*;
public class FederationSearcherTest {
private static class FederationFixture {
- FederationSearcher federationSearchWithDefaultSources = newFederationSearcher(true, emptyList());
- private ComponentRegistry<SearchChain> searchChainRegistry = new ComponentRegistry<>();
- private SourceGroupRegistry sourceGroupRegistry = new SourceGroupRegistry();
+ FederationSearcher federationSearchWithDefaultSources = newFederationSearcher(true, List.of());
+ private final ComponentRegistry<SearchChain> searchChainRegistry = new ComponentRegistry<>();
+ private final SourceGroupRegistry sourceGroupRegistry = new SourceGroupRegistry();
void initializeFederationSearcher(FederationSearcher searcher) {
searcher.initialize(searchChainRegistry, sourceGroupRegistry);
@@ -96,14 +95,14 @@ public class FederationSearcherTest {
assertEquals(2, target.searchChain().size());
assertTrue(target.searchChain().stream()
.map(FederationConfig.Target.SearchChain::providerId)
- .collect(toList()).containsAll(List.of("provider1", "provider2")));
+ .toList().containsAll(List.of("provider1", "provider2")));
}
@Test
void source_groups_are_not_inherited_when_inheritDefaultSources_is_false() throws Exception {
FederationFixture f = new ProvidersWithSourceFixture();
- FederationSearcher federationSearcherWithoutDefaultSources = newFederationSearcher(false, emptyList());
+ FederationSearcher federationSearcherWithoutDefaultSources = newFederationSearcher(false, List.of());
f.initializeFederationSearcher(federationSearcherWithoutDefaultSources);
FederationConfig federationConfig = getConfig(federationSearcherWithoutDefaultSources);
@@ -127,7 +126,7 @@ public class FederationSearcherTest {
f.registerProviderWithSources(createProvider(ComponentId.fromString("provider1")));
FederationSearcher federation = newFederationSearcher(true,
- singletonList(new TargetSpec(ComponentSpecification.fromString("provider1"),
+ List.of(new TargetSpec(ComponentSpecification.fromString("provider1"),
new FederationOptions().setTimeoutInMilliseconds(12345))));
f.initializeFederationSearcher(federation);
@@ -147,7 +146,7 @@ public class FederationSearcherTest {
}
private static ChainSpecification searchChainSpecification(ComponentId id) {
- return new ChainSpecification(id, new ChainSpecification.Inheritance(null, null), emptyList(), emptySet());
+ return new ChainSpecification(id, new ChainSpecification.Inheritance(null, null), List.of(), Set.of());
}
private static Provider createProvider(ComponentId id) {
@@ -161,7 +160,7 @@ public class FederationSearcherTest {
private static FederationConfig getConfig(ConfigProducer configProducer) throws Exception {
Optional<Class<?>> builderClassOpt = Arrays.stream(FederationConfig.class.getDeclaredClasses())
.filter(c -> c.getSimpleName().equals("Builder")).findFirst();
- if (builderClassOpt.isPresent() == false) {
+ if ( builderClassOpt.isEmpty()) {
throw new RuntimeException("No Builder class in ConfigInstance.");
}
Class<?> builderClass = builderClassOpt.get();
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/search/searchchain/SchemaChainsTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/search/searchchain/SchemaChainsTest.java
index 21223974be1..5588787119c 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/container/search/searchchain/SchemaChainsTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/container/search/searchchain/SchemaChainsTest.java
@@ -5,12 +5,17 @@ import com.yahoo.component.ComponentId;
import com.yahoo.container.core.ChainsConfig;
import com.yahoo.prelude.cluster.ClusterSearcher;
import com.yahoo.search.config.ClusterConfig;
+import com.yahoo.search.searchchain.PhaseNames;
import com.yahoo.vespa.defaults.Defaults;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.w3c.dom.Element;
+import java.util.Collection;
+
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
/**
@@ -21,10 +26,15 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
*/
public class SchemaChainsTest extends SchemaChainsTestBase {
+ private ChainsConfig chainsConfig;
private ClusterConfig clusterConfig;
@BeforeEach
public void subscribe() {
+ ChainsConfig.Builder chainsBuilder = new ChainsConfig.Builder();
+ chainsBuilder = (ChainsConfig.Builder)root.getConfig(chainsBuilder, "searchchains");
+ chainsConfig = new ChainsConfig(chainsBuilder);
+
ClusterConfig.Builder clusterBuilder = new ClusterConfig.Builder();
clusterBuilder = (ClusterConfig.Builder)root.getConfig(clusterBuilder, "searchchains/chain/cluster2/component/" + ClusterSearcher.class.getName());
clusterConfig = new ClusterConfig(clusterBuilder);
@@ -81,4 +91,79 @@ public class SchemaChainsTest extends SchemaChainsTestBase {
assertEquals("cluster2", clusterConfig.clusterName());
}
+ private ChainsConfig.Chains findChain(String name) {
+ for (ChainsConfig.Chains chain : chainsConfig.chains()) {
+ if (name.equals(chain.id())) {
+ return chain;
+ }
+ }
+ return null;
+ }
+
+ private static boolean contains(Collection<ChainsConfig.Chains.Phases> phases, String name) {
+ for (var phase : phases) {
+ if (name.equals(phase.id())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static void validateVespaPhasesChain(ChainsConfig.Chains chain) {
+ assertNotNull(chain);
+ assertEquals("vespaPhases", chain.id());
+ assertEquals(5, chain.phases().size());
+ assertTrue(contains(chain.phases(), PhaseNames.BACKEND));
+ assertTrue(contains(chain.phases(), PhaseNames.BLENDED_RESULT));
+ assertTrue(contains(chain.phases(), PhaseNames.RAW_QUERY));
+ assertTrue(contains(chain.phases(), PhaseNames.TRANSFORMED_QUERY));
+ assertTrue(contains(chain.phases(), PhaseNames.UNBLENDED_RESULT));
+ assertTrue(chain.inherits().isEmpty());
+ assertTrue(chain.components().isEmpty());
+ assertTrue(chain.excludes().isEmpty());
+ assertEquals(ChainsConfig.Chains.Type.SEARCH, chain.type());
+ }
+
+ private static void validateNativeChain(ChainsConfig.Chains chain) {
+ assertNotNull(chain);
+ assertEquals("native", chain.id());
+ assertTrue(chain.phases().isEmpty());
+ assertEquals(1, chain.inherits().size());
+ assertEquals("vespaPhases", chain.inherits(0));
+ assertEquals(2, chain.components().size());
+ assertEquals("federation@native", chain.components(0));
+ assertEquals("com.yahoo.prelude.statistics.StatisticsSearcher@native", chain.components(1));
+ assertTrue(chain.excludes().isEmpty());
+ assertEquals(ChainsConfig.Chains.Type.SEARCH, chain.type());
+ }
+
+ private static void validateVespaChain(ChainsConfig.Chains chain) {
+ assertNotNull(chain);
+ assertEquals("vespa", chain.id());
+ assertTrue(chain.phases().isEmpty());
+ assertEquals(1, chain.inherits().size());
+ assertEquals("native", chain.inherits(0));
+ assertEquals(10, chain.components().size());
+ assertEquals("com.yahoo.prelude.querytransform.PhrasingSearcher@vespa", chain.components(0));
+ assertEquals("com.yahoo.prelude.searcher.FieldCollapsingSearcher@vespa", chain.components(1));
+ assertEquals("com.yahoo.search.yql.MinimalQueryInserter@vespa", chain.components(2));
+ assertEquals("com.yahoo.search.yql.FieldFilter@vespa", chain.components(3));
+ assertEquals("com.yahoo.prelude.searcher.JuniperSearcher@vespa", chain.components(4));
+ assertEquals("com.yahoo.prelude.searcher.BlendingSearcher@vespa", chain.components(5));
+ assertEquals("com.yahoo.prelude.searcher.PosSearcher@vespa", chain.components(6));
+ assertEquals("com.yahoo.prelude.semantics.SemanticSearcher@vespa", chain.components(7));
+ assertEquals("com.yahoo.search.grouping.GroupingQueryParser@vespa", chain.components(8));
+ assertEquals("com.yahoo.search.querytransform.WeakAndReplacementSearcher@vespa", chain.components(9));
+ assertTrue(chain.excludes().isEmpty());
+ assertEquals(ChainsConfig.Chains.Type.SEARCH, chain.type());
+ }
+
+ @Test
+ public void require_all_default_chains_are_correct() {
+ assertEquals(61, chainsConfig.components().size());
+ assertEquals(10, chainsConfig.chains().size());
+ validateVespaPhasesChain(findChain("vespaPhases"));
+ validateNativeChain(findChain("native"));
+ validateVespaChain(findChain("vespa"));
+ }
}
diff --git a/container-core/src/main/java/com/yahoo/component/chain/model/ChainSpecification.java b/container-core/src/main/java/com/yahoo/component/chain/model/ChainSpecification.java
index a1c169dc387..f53b431265c 100644
--- a/container-core/src/main/java/com/yahoo/component/chain/model/ChainSpecification.java
+++ b/container-core/src/main/java/com/yahoo/component/chain/model/ChainSpecification.java
@@ -6,7 +6,15 @@ import com.yahoo.component.ComponentId;
import com.yahoo.component.ComponentSpecification;
import com.yahoo.component.chain.Phase;
-import java.util.*;
+import java.util.ArrayDeque;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Deque;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
/**
* Specifies how the components should be selected to create a chain. Immutable.
@@ -20,7 +28,7 @@ public class ChainSpecification {
public final Set<ComponentSpecification> excludedComponents;
Inheritance flattened() {
- return new Inheritance(Collections.<ComponentSpecification>emptySet(), excludedComponents);
+ return new Inheritance(Set.of(), excludedComponents);
}
public Inheritance(Set<ComponentSpecification> inheritedChains, Set<ComponentSpecification> excludedComponents) {
@@ -38,7 +46,7 @@ public class ChainSpecification {
public final ComponentId componentId;
public final Inheritance inheritance;
- final Map<String, Phase> phases;
+ private final Map<String, Phase> phases;
public final Set<ComponentSpecification> componentReferences;
public ChainSpecification(ComponentId componentId, Inheritance inheritance,
diff --git a/container-search/src/test/java/com/yahoo/search/searchchain/test/SearchChainTestCase.java b/container-search/src/test/java/com/yahoo/search/searchchain/test/SearchChainTestCase.java
index 3e7a152122e..ef35b5beabe 100644
--- a/container-search/src/test/java/com/yahoo/search/searchchain/test/SearchChainTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/searchchain/test/SearchChainTestCase.java
@@ -26,7 +26,6 @@ import org.junit.jupiter.api.Test;
*
* @author bratseth
*/
-@SuppressWarnings("deprecation")
public class SearchChainTestCase {
@Test
@@ -87,7 +86,7 @@ public class SearchChainTestCase {
private List<Searcher> createSearchers(int count) {
List<Searcher> searchers=new ArrayList<>(count);
for (int i=0; i<count; i++)
- searchers.add(new TestSearcher("s" + String.valueOf(i+1)));
+ searchers.add(new TestSearcher("s" + (i+1)));
return searchers;
}