aboutsummaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-01-24 23:07:47 +0100
committerJon Bratseth <bratseth@gmail.com>2022-01-24 23:07:47 +0100
commit453fe2f95f0b0a7a66a367db91e21a8687027ba9 (patch)
tree5a224d50ed8a544f7cbeeaac6026bae77d4aaf84 /config-model
parent6b32f86f4a06c81576ef92f3959d45be4d2ac389 (diff)
Move schema building into Application
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/Application.java61
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/SchemaBuilder.java53
2 files changed, 68 insertions, 46 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/Application.java b/config-model/src/main/java/com/yahoo/searchdefinition/Application.java
index 9c1cc839092..f6c13ca540c 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/Application.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/Application.java
@@ -3,12 +3,21 @@ package com.yahoo.searchdefinition;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.application.api.DeployLogger;
+import com.yahoo.config.model.api.ModelContext;
+import com.yahoo.search.query.profile.QueryProfileRegistry;
+import com.yahoo.searchdefinition.derived.SearchOrderer;
+import com.yahoo.searchdefinition.document.SDDocumentType;
+import com.yahoo.searchdefinition.processing.Processing;
+import com.yahoo.searchdefinition.processing.Processor;
import com.yahoo.vespa.documentmodel.DocumentModel;
+import com.yahoo.vespa.model.container.search.QueryProfiles;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
* A collection of objects representing the content of an application package.
@@ -23,7 +32,15 @@ public class Application {
private final Map<String, Schema> schemas;
private final DocumentModel documentModel = new DocumentModel();
- public Application(ApplicationPackage applicationPackage, List<Schema> schemas, DeployLogger logger) {
+ public Application(ApplicationPackage applicationPackage,
+ List<Schema> schemas,
+ RankProfileRegistry rankProfileRegistry,
+ QueryProfiles queryProfiles,
+ ModelContext.Properties properties,
+ boolean documentsOnly,
+ boolean validate,
+ Set<Class<? extends Processor>> processorsToSkip,
+ DeployLogger logger) {
this.applicationPackage = applicationPackage;
Map<String, Schema> schemaMap = new LinkedHashMap<>();
@@ -35,7 +52,47 @@ public class Application {
this.schemas = Collections.unmodifiableMap(schemaMap);
schemas.forEach(schema -> schema.setOwner(this));
- schemas.forEach(schema -> schema.validate(logger));
+ if (validate)
+ schemas.forEach(schema -> schema.validate(logger));
+
+ new TemporarySDTypeResolver(schemas, logger).process();
+
+ List<SDDocumentType> sdocs = new ArrayList<>();
+ sdocs.add(SDDocumentType.VESPA_DOCUMENT);
+ for (Schema schema : schemas) {
+ if (schema.hasDocument()) {
+ sdocs.add(schema.getDocument());
+ }
+ }
+
+ var orderer = new SDDocumentTypeOrderer(sdocs, logger);
+ orderer.process();
+ for (SDDocumentType sdoc : orderer.getOrdered()) {
+ new FieldOperationApplierForStructs().process(sdoc);
+ new FieldOperationApplier().process(sdoc);
+ }
+
+ var resolver = new DocumentReferenceResolver(schemas);
+ sdocs.forEach(resolver::resolveReferences);
+ sdocs.forEach(resolver::resolveInheritedReferences);
+ var importedFieldsEnumerator = new ImportedFieldsEnumerator(schemas);
+ sdocs.forEach(importedFieldsEnumerator::enumerateImportedFields);
+
+ if (validate)
+ new DocumentGraphValidator().validateDocumentGraph(sdocs);
+
+ List<Schema> schemasSomewhatOrdered = new ArrayList<>(schemas);
+ for (Schema schema : new SearchOrderer().order(schemasSomewhatOrdered)) {
+ new FieldOperationApplierForSearch().process(schema); // TODO: Why is this not in the regular list?
+ new Processing(properties).process(schema,
+ logger,
+ rankProfileRegistry,
+ queryProfiles,
+ validate,
+ documentsOnly,
+ processorsToSkip);
+ }
+ buildDocumentModel(schemasSomewhatOrdered);
}
public ApplicationPackage applicationPackage() { return applicationPackage; }
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/SchemaBuilder.java b/config-model/src/main/java/com/yahoo/searchdefinition/SchemaBuilder.java
index efa0d0784bb..ae238e60c46 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/SchemaBuilder.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/SchemaBuilder.java
@@ -242,56 +242,21 @@ public class SchemaBuilder {
public void build(boolean validate) {
if (application != null) throw new IllegalStateException("Application already built");
- application = new Application(applicationPackage, schemas, deployLogger);
- new TemporarySDTypeResolver(schemas, deployLogger).process();
-
- List<SDDocumentType> sdocs = new ArrayList<>();
- sdocs.add(SDDocumentType.VESPA_DOCUMENT);
- for (Schema schema : schemas) {
- if (schema.hasDocument()) {
- sdocs.add(schema.getDocument());
- }
- }
-
- var orderer = new SDDocumentTypeOrderer(sdocs, deployLogger);
- orderer.process();
- for (SDDocumentType sdoc : orderer.getOrdered()) {
- new FieldOperationApplierForStructs().process(sdoc);
- new FieldOperationApplier().process(sdoc);
- }
-
- var resolver = new DocumentReferenceResolver(schemas);
- sdocs.forEach(resolver::resolveReferences);
- sdocs.forEach(resolver::resolveInheritedReferences);
- var importedFieldsEnumerator = new ImportedFieldsEnumerator(schemas);
- sdocs.forEach(importedFieldsEnumerator::enumerateImportedFields);
-
- if (validate)
- new DocumentGraphValidator().validateDocumentGraph(sdocs);
-
- List<Schema> schemasSomewhatOrdered = new ArrayList<>(schemas);
- for (Schema schema : new SearchOrderer().order(schemasSomewhatOrdered)) {
- new FieldOperationApplierForSearch().process(schema); // TODO: Why is this not in the regular list?
- process(schema, new QueryProfiles(queryProfileRegistry, deployLogger), validate);
- }
- application.buildDocumentModel(schemasSomewhatOrdered);
+ application = new Application(applicationPackage,
+ schemas,
+ rankProfileRegistry,
+ new QueryProfiles(queryProfileRegistry, deployLogger),
+ properties,
+ documentsOnly,
+ validate,
+ processorsToSkip,
+ deployLogger);
}
/** Returns a modifiable set of processors we should skip for these schemas. Useful for testing. */
public Set<Class<? extends Processor>> processorsToSkip() { return processorsToSkip; }
/**
- * Processes and returns the given {@link Schema} object. This method has been factored out of the {@link
- * #build()} method so that subclasses can choose not to build anything.
- */
- private void process(Schema schema, QueryProfiles queryProfiles, boolean validate) {
- new Processing(properties).process(schema, deployLogger,
- rankProfileRegistry, queryProfiles,
- validate, documentsOnly,
- processorsToSkip);
- }
-
- /**
* Convenience method to call {@link #getSchema(String)} when there is only a single {@link Schema} object
* built. This method will never return null.
*