summaryrefslogtreecommitdiffstats
path: root/config-model/src
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-04-27 13:16:11 +0200
committerJon Bratseth <bratseth@gmail.com>2022-04-27 13:16:11 +0200
commit1c38c6e29a59eff80396f4a367245d6694f87168 (patch)
tree65f613f5b2220c3adbd67a6c741236a697272d84 /config-model/src
parent9eddf6d78a3544843842f34a7b711a5565e7fd03 (diff)
Create schema-info for global schema info
Diffstat (limited to 'config-model/src')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java9
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/Affinity.java1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java1
-rwxr-xr-xconfig-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java9
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java37
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/search/test/DocumentDatabaseTestCase.java60
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);