diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-07-04 22:47:21 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-07-04 22:47:21 +0200 |
commit | 40744a1a30cccff9c4b4b9f67ae6891956509ee3 (patch) | |
tree | 2b904bcf1826f6748abbbb6d5d392a5a2e729570 /config-model/src/main/java | |
parent | bdca3da122423f78c7dace3ab10c27c575b9fa65 (diff) |
Add option to ignore undefined fields
Diffstat (limited to 'config-model/src/main/java')
9 files changed, 42 insertions, 40 deletions
diff --git a/config-model/src/main/java/com/yahoo/schema/ApplicationBuilder.java b/config-model/src/main/java/com/yahoo/schema/ApplicationBuilder.java index d98709569b1..894415091e4 100644 --- a/config-model/src/main/java/com/yahoo/schema/ApplicationBuilder.java +++ b/config-model/src/main/java/com/yahoo/schema/ApplicationBuilder.java @@ -107,7 +107,7 @@ public class ApplicationBuilder { this(MockApplicationPackage.createEmpty(), new MockFileRegistry(), new BaseDeployLogger(), properties, rankProfileRegistry, queryProfileRegistry); } - /** normal constructor */ + /** Regular constructor */ public ApplicationBuilder(ApplicationPackage app, FileRegistry fileRegistry, DeployLogger deployLogger, diff --git a/config-model/src/main/java/com/yahoo/schema/parser/IntermediateCollection.java b/config-model/src/main/java/com/yahoo/schema/parser/IntermediateCollection.java index 8bb9bca3249..139d20aac82 100644 --- a/config-model/src/main/java/com/yahoo/schema/parser/IntermediateCollection.java +++ b/config-model/src/main/java/com/yahoo/schema/parser/IntermediateCollection.java @@ -26,7 +26,7 @@ public class IntermediateCollection { private final DeployLogger deployLogger; private final ModelContext.Properties modelProperties; - private Map<String, ParsedSchema> parsedSchemas = new LinkedHashMap<>(); + private final Map<String, ParsedSchema> parsedSchemas = new LinkedHashMap<>(); IntermediateCollection() { this.deployLogger = new BaseDeployLogger(); diff --git a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java index e54ed1f1a8b..c6fcd4c115c 100644 --- a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java +++ b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java @@ -36,14 +36,13 @@ public class DocumentManager { private boolean useV8GeoPositions = false; - public DocumentManager useV8GeoPositions(boolean value) { - this.useV8GeoPositions = value; + public DocumentManager useV8GeoPositions(boolean useV8GeoPositions) { + this.useV8GeoPositions = useV8GeoPositions; return this; } public DocumentmanagerConfig.Builder produce(DocumentModel model, - DocumentmanagerConfig.Builder documentConfigBuilder) - { + DocumentmanagerConfig.Builder documentConfigBuilder) { return produceDocTypes(model, documentConfigBuilder); } @@ -75,6 +74,7 @@ public class DocumentManager { } static private class IdxMap { + private final Map<Integer, Boolean> doneMap = new HashMap<>(); private final Map<String, Integer> map = new HashMap<>(); private final DataTypeRecognizer recognizer = new DataTypeRecognizer(); diff --git a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java index 549b94adc02..d62270034f0 100644 --- a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java +++ b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java @@ -33,6 +33,7 @@ import java.util.Set; * @author baldersheim */ public class DocumentTypes { + private boolean useV8GeoPositions = false; public DocumentTypes useV8GeoPositions(boolean value) { diff --git a/config-model/src/main/java/com/yahoo/vespa/documentmodel/DocumentModel.java b/config-model/src/main/java/com/yahoo/vespa/documentmodel/DocumentModel.java index 15599c567ab..76f0bbd854e 100644 --- a/config-model/src/main/java/com/yahoo/vespa/documentmodel/DocumentModel.java +++ b/config-model/src/main/java/com/yahoo/vespa/documentmodel/DocumentModel.java @@ -4,20 +4,18 @@ package com.yahoo.vespa.documentmodel; import com.yahoo.documentmodel.DocumentTypeRepo; /** - * DocumentModel represents everything derived from a set of search definitions. - * It contains a document manager managing all defined document types. - * It contains a search manager managing all specified search definitions. - * It contains a storage manager managing all specified storage definitions. + * DocumentModel represents everything derived from a set of schemas. + * It contains a document manager managing all defined document types, and + * a search manager managing all search aspects of the schemas. * * @author baldersheim */ public class DocumentModel { - private final DocumentTypeRepo documentMan = new DocumentTypeRepo(); - private final SearchManager searchMan = new SearchManager(); + private final DocumentTypeRepo documentManager = new DocumentTypeRepo(); + private final SearchManager searchManager = new SearchManager(); - public DocumentTypeRepo getDocumentManager() { return documentMan; } - - public SearchManager getSearchManager() { return searchMan; } + public DocumentTypeRepo getDocumentManager() { return documentManager; } + public SearchManager getSearchManager() { return searchManager; } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/clients/ContainerDocumentApi.java b/config-model/src/main/java/com/yahoo/vespa/model/clients/ContainerDocumentApi.java index 8534e1f65a7..15a0e060e1c 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/clients/ContainerDocumentApi.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/clients/ContainerDocumentApi.java @@ -22,23 +22,26 @@ public class ContainerDocumentApi { public static final String DOCUMENT_V1_PREFIX = "/document/v1"; - public ContainerDocumentApi(ContainerCluster<?> cluster, Options options) { - addRestApiHandler(cluster, options); - addFeedHandler(cluster, options); + private final boolean ignoreUndefinedFields; + + public ContainerDocumentApi(ContainerCluster<?> cluster, HandlerOptions handlerOptions, boolean ignoreUndefinedFields) { + this.ignoreUndefinedFields = ignoreUndefinedFields; + addRestApiHandler(cluster, handlerOptions); + addFeedHandler(cluster, handlerOptions); } - private static void addFeedHandler(ContainerCluster<?> cluster, Options options) { + private static void addFeedHandler(ContainerCluster<?> cluster, HandlerOptions handlerOptions) { String bindingSuffix = ContainerCluster.RESERVED_URI_PREFIX + "/feedapi"; - var handler = newVespaClientHandler("com.yahoo.vespa.http.server.FeedHandler", bindingSuffix, options); + var handler = newVespaClientHandler("com.yahoo.vespa.http.server.FeedHandler", bindingSuffix, handlerOptions); cluster.addComponent(handler); - var executor = new Threadpool("feedapi-handler", cluster, options.feedApiThreadpoolOptions); + var executor = new Threadpool("feedapi-handler", handlerOptions.feedApiThreadpoolOptions); handler.inject(executor); handler.addComponent(executor); } - private static void addRestApiHandler(ContainerCluster<?> cluster, Options options) { - var handler = newVespaClientHandler("com.yahoo.document.restapi.resource.DocumentV1ApiHandler", DOCUMENT_V1_PREFIX + "/*", options); + private static void addRestApiHandler(ContainerCluster<?> cluster, HandlerOptions handlerOptions) { + var handler = newVespaClientHandler("com.yahoo.document.restapi.resource.DocumentV1ApiHandler", DOCUMENT_V1_PREFIX + "/*", handlerOptions); cluster.addComponent(handler); // We need to include a dummy implementation of the previous restapi handler (using the same class name). @@ -47,17 +50,19 @@ public class ContainerDocumentApi { cluster.addComponent(oldHandlerDummy); } + public boolean ignoreUndefinedFields() { return ignoreUndefinedFields; } + private static Handler<AbstractConfigProducer<?>> newVespaClientHandler( String componentId, String bindingSuffix, - Options options) { + HandlerOptions handlerOptions) { Handler<AbstractConfigProducer<?>> handler = handlerComponentSpecification(componentId); - if (options.bindings.isEmpty()) { + if (handlerOptions.bindings.isEmpty()) { handler.addServerBindings( SystemBindingPattern.fromHttpPath(bindingSuffix), SystemBindingPattern.fromHttpPath(bindingSuffix + '/')); } else { - for (String rootBinding : options.bindings) { + for (String rootBinding : handlerOptions.bindings) { String pathWithoutLeadingSlash = bindingSuffix.substring(1); handler.addServerBindings( UserBindingPattern.fromPattern(rootBinding + pathWithoutLeadingSlash), @@ -72,11 +77,12 @@ public class ContainerDocumentApi { BundleInstantiationSpecification.getFromStrings(className, null, "vespaclient-container-plugin"), "")); } - public static final class Options { + public static final class HandlerOptions { + private final Collection<String> bindings; private final ContainerThreadpool.UserOptions feedApiThreadpoolOptions; - public Options(Collection<String> bindings, ContainerThreadpool.UserOptions feedApiThreadpoolOptions) { + public HandlerOptions(Collection<String> bindings, ContainerThreadpool.UserOptions feedApiThreadpoolOptions) { this.bindings = Collections.unmodifiableCollection(bindings); this.feedApiThreadpoolOptions = feedApiThreadpoolOptions; } @@ -84,13 +90,8 @@ public class ContainerDocumentApi { private static class Threadpool extends ContainerThreadpool { - private final ContainerCluster<?> cluster; - - Threadpool(String name, - ContainerCluster<?> cluster, - ContainerThreadpool.UserOptions threadpoolOptions) { + Threadpool(String name, ContainerThreadpool.UserOptions threadpoolOptions) { super(name, threadpoolOptions); - this.cluster = cluster; } @Override 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 3d4b6dcbe7e..5adea6d50e8 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 @@ -105,7 +105,7 @@ public abstract class ContainerCluster<CONTAINER extends Container> /** * URI prefix used for internal, usually programmatic, APIs. URIs using this - * prefix should never considered available for direct use by customers, and + * prefix should never be considered available for direct use by customers, and * normal compatibility concerns only applies to libraries using the URIs in * question, not contents served from the URIs themselves. */ @@ -414,6 +414,8 @@ public abstract class ContainerCluster<CONTAINER extends Container> public void getConfig(DocumentmanagerConfig.Builder builder) { if (containerDocproc != null && containerDocproc.isCompressDocuments()) builder.enablecompression(true); + if (containerDocumentApi != null) + builder.ignoreundefinedfields(containerDocumentApi.ignoreUndefinedFields()); } @Override diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java index 1dad0c7960d..7cc1109f25f 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java @@ -924,8 +924,9 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { Element documentApiElement = XML.getChild(spec, "document-api"); if (documentApiElement == null) return null; - ContainerDocumentApi.Options documentApiOptions = DocumentApiOptionsBuilder.build(documentApiElement); - return new ContainerDocumentApi(cluster, documentApiOptions); + ContainerDocumentApi.HandlerOptions documentApiOptions = DocumentApiOptionsBuilder.build(documentApiElement); + return new ContainerDocumentApi(cluster, documentApiOptions, + documentApiElement.getAttribute("ignore-undefined-fields").equals("true")); } private ContainerDocproc buildDocproc(DeployState deployState, ApplicationContainerCluster cluster, Element spec) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/DocumentApiOptionsBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/DocumentApiOptionsBuilder.java index 2ef31469c45..bb1d0af1db9 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/DocumentApiOptionsBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/DocumentApiOptionsBuilder.java @@ -18,9 +18,8 @@ public class DocumentApiOptionsBuilder { private static final Logger log = Logger.getLogger(DocumentApiOptionsBuilder.class.getName()); - - public static ContainerDocumentApi.Options build(Element spec) { - return new ContainerDocumentApi.Options(getBindings(spec), threadpoolOptions(spec, "http-client-api")); + public static ContainerDocumentApi.HandlerOptions build(Element spec) { + return new ContainerDocumentApi.HandlerOptions(getBindings(spec), threadpoolOptions(spec, "http-client-api")); } private static ContainerThreadpool.UserOptions threadpoolOptions(Element spec, String elementName) { |