diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-01-24 23:07:47 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-01-24 23:07:47 +0100 |
commit | 453fe2f95f0b0a7a66a367db91e21a8687027ba9 (patch) | |
tree | 5a224d50ed8a544f7cbeeaac6026bae77d4aaf84 /config-model | |
parent | 6b32f86f4a06c81576ef92f3959d45be4d2ac389 (diff) |
Move schema building into Application
Diffstat (limited to 'config-model')
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/Application.java | 61 | ||||
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/SchemaBuilder.java | 53 |
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. * |