diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-04-27 13:16:11 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-04-27 13:16:11 +0200 |
commit | 1c38c6e29a59eff80396f4a367245d6694f87168 (patch) | |
tree | 65f613f5b2220c3adbd67a6c741236a697272d84 /config-model/src | |
parent | 9eddf6d78a3544843842f34a7b711a5565e7fd03 (diff) |
Create schema-info for global schema info
Diffstat (limited to 'config-model/src')
6 files changed, 107 insertions, 10 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java b/config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java index f64d71ee364..23aa7e80d74 100644 --- a/config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java +++ b/config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java @@ -203,15 +203,14 @@ public abstract class AbstractConfigProducer<CHILD extends AbstractConfigProduce @Override public final boolean cascadeConfig(ConfigInstance.Builder builder) { - boolean found=false; + boolean found = false; if (parent != null) found = parent.cascadeConfig(builder); boolean foundHere = builder.dispatchGetConfig(this); - if (log.isLoggable(Level.FINE)) { - log.log(Level.FINE, "cascadeconfig in " + this + ", getting config " + - builder.getClass().getDeclaringClass().getName() + " for config id '" + configId + "' found here=" + foundHere); - } + log.log(Level.FINE, () -> "cascadeconfig in " + this + ", getting config " + + builder.getClass().getDeclaringClass().getName() + " for config id '" + configId + + "' found here=" + foundHere); found = found || foundHere; return found; } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/Affinity.java b/config-model/src/main/java/com/yahoo/vespa/model/Affinity.java index 68696c5ead0..e882f6a2bb5 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/Affinity.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/Affinity.java @@ -6,7 +6,6 @@ package com.yahoo.vespa.model; * CPU socket affinity. * * @author Ulf Lilleengen - * @since 5.12 */ public class Affinity { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java index 205a397178b..c671ad5bd17 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java @@ -643,7 +643,6 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri return configModelRepo.getClients(); } - /** Returns all search clusters, both in Search and Content */ public List<SearchCluster> getSearchClusters() { return Content.getSearchClusters(configModelRepo()); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java index 6295418ca38..9b2684bb487 100755 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java @@ -23,6 +23,7 @@ import com.yahoo.container.jdisc.JdiscBindingsConfig; import com.yahoo.container.jdisc.config.HealthMonitorConfig; import com.yahoo.container.jdisc.state.StateHandler; import com.yahoo.container.logging.AccessLog; +import com.yahoo.container.search.SchemaInfoConfig; import com.yahoo.container.usability.BindingsOverviewHandler; import com.yahoo.document.config.DocumentmanagerConfig; import com.yahoo.metrics.simple.runtime.MetricProperties; @@ -99,7 +100,8 @@ public abstract class ContainerCluster<CONTAINER extends Container> DocprocConfig.Producer, ClusterInfoConfig.Producer, ConfigserverConfig.Producer, - CuratorConfig.Producer + CuratorConfig.Producer, + SchemaInfoConfig.Producer { /** @@ -537,6 +539,11 @@ public abstract class ContainerCluster<CONTAINER extends Container> if (containerSearch != null) containerSearch.getConfig(builder); } + @Override + public void getConfig(SchemaInfoConfig.Builder builder) { + if (containerSearch != null) containerSearch.getConfig(builder); + } + public void initialize(Map<String, SearchCluster> clusterMap) { if (containerSearch != null) containerSearch.connectSearchClusters(clusterMap); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java b/config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java index 2788b29ac0a..97468fefa58 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java @@ -2,6 +2,8 @@ package com.yahoo.vespa.model.container.search; import com.yahoo.container.QrSearchersConfig; +import com.yahoo.container.search.SchemaInfoConfig; +import com.yahoo.prelude.fastsearch.DocumentdbInfoConfig; import com.yahoo.prelude.semantics.SemanticRulesConfig; import com.yahoo.search.config.IndexInfoConfig; import com.yahoo.search.pagetemplates.PageTemplatesConfig; @@ -35,11 +37,12 @@ public class ContainerSearch extends ContainerSubsystem<SearchChains> QrSearchersConfig.Producer, QueryProfilesConfig.Producer, SemanticRulesConfig.Producer, - PageTemplatesConfig.Producer { + PageTemplatesConfig.Producer, + SchemaInfoConfig.Producer { public static final String QUERY_PROFILE_REGISTRY_CLASS = CompiledQueryProfileRegistry.class.getName(); - private ApplicationContainerCluster owningCluster; + private final ApplicationContainerCluster owningCluster; private final List<SearchCluster> searchClusters = new LinkedList<>(); private final Options options; @@ -119,6 +122,36 @@ public class ContainerSearch extends ContainerSubsystem<SearchChains> } @Override + public void getConfig(SchemaInfoConfig.Builder builder) { + Map<String, SearchCluster.SchemaInfo> allSchemas = new LinkedHashMap<>(); + for (SearchCluster sc : searchClusters) + allSchemas.putAll(sc.schemas()); + + for (var schemaEntry : allSchemas.entrySet()) { + var schemaBuilder = new SchemaInfoConfig.Schema.Builder(); + schemaBuilder.name(schemaEntry.getKey()); + addRankProfilesConfig(schemaEntry.getValue(), schemaBuilder); + builder.schema(schemaBuilder); + } + } + + protected void addRankProfilesConfig(SearchCluster.SchemaInfo schema, SchemaInfoConfig.Schema.Builder schemaBuilder) { + for (SearchCluster.RankProfileInfo rankProfile : schema.rankProfiles().values()) { + var rankProfileConfig = new SchemaInfoConfig.Schema.Rankprofile.Builder(); + rankProfileConfig.name(rankProfile.name()); + rankProfileConfig.hasSummaryFeatures(rankProfile.hasSummaryFeatures()); + rankProfileConfig.hasRankFeatures(rankProfile.hasRankFeatures()); + for (var input : rankProfile.inputs().entrySet()) { + var inputConfig = new SchemaInfoConfig.Schema.Rankprofile.Input.Builder(); + inputConfig.name(input.getKey().toString()); + inputConfig.type(input.getValue().toString()); + rankProfileConfig.input(inputConfig); + } + schemaBuilder.rankprofile(rankProfileConfig); + } + } + + @Override public void getConfig(QrSearchersConfig.Builder builder) { for (int i = 0; i < searchClusters.size(); i++) { SearchCluster sys = findClusterWithId(searchClusters, i); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentDatabaseTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentDatabaseTestCase.java index 2cdd6521661..6a6624b9153 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentDatabaseTestCase.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentDatabaseTestCase.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.model.search.test; import com.google.common.collect.ImmutableMap; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.deploy.TestProperties; +import com.yahoo.container.search.SchemaInfoConfig; import com.yahoo.vespa.config.search.IndexschemaConfig; import com.yahoo.vespa.config.search.core.ProtonConfig; import com.yahoo.vespa.config.search.RankProfilesConfig; @@ -344,6 +345,53 @@ public class DocumentDatabaseTestCase { } } + /** Schema-info should contain all schemas, independent of clusters. */ + @Test + public void requireThatSchemaInfoIsAvailable() { + List<String> schemas = Arrays.asList("type1", "type2"); + VespaModel model = new VespaModelCreatorWithMockPkg(vespaHosts, createVespaServices(schemas, "index"), + ApplicationPackageUtils.generateSchemas(schemas)).create(); + assertSchemaInfo("container/searchchains/chain/test/component/com.yahoo.prelude.cluster.ClusterSearcher", model); + assertSchemaInfo("container", model); + } + + private void assertSchemaInfo(String configId, VespaModel model) { + { // schema-info config + SchemaInfoConfig dcfg = model.getConfig(SchemaInfoConfig.class, configId); + assertEquals(2, dcfg.schema().size()); + + { // type1 + SchemaInfoConfig.Schema schema = dcfg.schema(0); + assertEquals("type1", schema.name()); + + assertEquals(7, schema.rankprofile().size()); + assertRankProfile(schema, 0, "default", false, false); + assertRankProfile(schema, 1, "unranked", false, false); + assertRankProfile(schema, 2, "staticrank", false, false); + assertRankProfile(schema, 3, "summaryfeatures", true, false); + assertRankProfile(schema, 4, "inheritedsummaryfeatures", true, false); + assertRankProfile(schema, 5, "rankfeatures", false, true); + var inputs = assertRankProfile(schema, 6, "inputs", false, false); + + assertEquals(2, inputs.input().size()); + assertEquals("query(foo)", inputs.input(0).name()); + assertEquals("tensor<float>(x[10])", inputs.input(0).type()); + assertEquals("query(bar)", inputs.input(1).name()); + assertEquals("tensor(key{},x[1000])", inputs.input(1).type()); + + // assertEquals(2, schema.summaryclass().size()); + // assertEquals("default", schema.summaryclass(0).name()); + // assertEquals("attributeprefetch", schema.summaryclass(1).name()); + // assertSummaryField(schema, 0, 0, "f1", "longstring", true); + // assertSummaryField(schema, 0, 1, "f2", "integer", false); + } + { // type2 + SchemaInfoConfig.Schema schema = dcfg.schema(1); + assertEquals("type2", schema.name()); + } + } + } + private DocumentdbInfoConfig.Documentdb.Rankprofile assertRankProfile(DocumentdbInfoConfig.Documentdb db, int index, String name, @@ -356,6 +404,18 @@ public class DocumentDatabaseTestCase { return rankProfile; } + private SchemaInfoConfig.Schema.Rankprofile assertRankProfile(SchemaInfoConfig.Schema schema, + int index, + String name, + boolean hasSummaryFeatures, + boolean hasRankFeatures) { + SchemaInfoConfig.Schema.Rankprofile rankProfile = schema.rankprofile(index); + assertEquals(name, rankProfile.name()); + assertEquals(hasSummaryFeatures, rankProfile.hasSummaryFeatures()); + assertEquals(hasRankFeatures, rankProfile.hasRankFeatures()); + return rankProfile; + } + private void assertSummaryField(DocumentdbInfoConfig.Documentdb db, int summaryClassIndex, int fieldIndex, String name, String type, boolean dynamic) { DocumentdbInfoConfig.Documentdb.Summaryclass.Fields field = db.summaryclass(summaryClassIndex).fields(fieldIndex); |