aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-07-04 22:47:21 +0200
committerJon Bratseth <bratseth@gmail.com>2022-07-04 22:47:21 +0200
commit40744a1a30cccff9c4b4b9f67ae6891956509ee3 (patch)
tree2b904bcf1826f6748abbbb6d5d392a5a2e729570 /config-model/src/main/java
parentbdca3da122423f78c7dace3ab10c27c575b9fa65 (diff)
Add option to ignore undefined fields
Diffstat (limited to 'config-model/src/main/java')
-rw-r--r--config-model/src/main/java/com/yahoo/schema/ApplicationBuilder.java2
-rw-r--r--config-model/src/main/java/com/yahoo/schema/parser/IntermediateCollection.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentManager.java8
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/documentmodel/DocumentModel.java16
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/clients/ContainerDocumentApi.java39
-rwxr-xr-xconfig-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/DocumentApiOptionsBuilder.java5
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) {