summaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-09-17 13:31:30 +0200
committerGitHub <noreply@github.com>2021-09-17 13:31:30 +0200
commit0f2da07296acaaf7f7d3cb607cfb25bfc8adf0b9 (patch)
treeb7720a3e19ba84b28e17e4806033e8230ce53295 /config-model/src/main/java
parente4a52be36ab6907f0265c35a7bae7d1eea5e8093 (diff)
parent7b252a4068bebf3885948632348c57b319d2ce86 (diff)
Merge pull request #19187 from vespa-engine/geirst/validate-paged-attribute-setting
Validates the 'paged' attribute setting and throws if specified on un…
Diffstat (limited to 'config-model/src/main/java')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/PagedAttributeValidator.java52
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java1
2 files changed, 53 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/PagedAttributeValidator.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/PagedAttributeValidator.java
new file mode 100644
index 00000000000..5e344f5a824
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/PagedAttributeValidator.java
@@ -0,0 +1,52 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.searchdefinition.processing;
+
+import com.yahoo.config.application.api.DeployLogger;
+import com.yahoo.document.Field;
+import com.yahoo.searchdefinition.RankProfileRegistry;
+import com.yahoo.searchdefinition.Search;
+import com.yahoo.searchdefinition.document.Attribute;
+import com.yahoo.tensor.TensorType;
+import com.yahoo.vespa.model.container.search.QueryProfiles;
+
+/**
+ * Validates the 'paged' attribute setting and throws if specified on unsupported types.
+ *
+ * @author geirst
+ */
+public class PagedAttributeValidator extends Processor {
+
+
+ public PagedAttributeValidator(Search search,
+ DeployLogger deployLogger,
+ RankProfileRegistry rankProfileRegistry,
+ QueryProfiles queryProfiles) {
+ super(search, deployLogger, rankProfileRegistry, queryProfiles);
+ }
+
+ @Override
+ public void process(boolean validate, boolean documentsOnly) {
+ if (!validate) {
+ return;
+ }
+ for (var field : search.allConcreteFields()) {
+ for (var attribute : field.getAttributes().values()) {
+ if (attribute.isPaged()) {
+ validatePagedSetting(field, attribute);
+ }
+ }
+ }
+ }
+
+ private void validatePagedSetting(Field field, Attribute attribute) {
+ var tensorType = attribute.tensorType();
+ if (!tensorType.isPresent() ||
+ !isDenseTensorType(tensorType.get())) {
+ fail(search, field, "The 'paged' attribute setting is only supported for dense tensor types");
+ }
+ }
+
+ private boolean isDenseTensorType(TensorType type) {
+ return type.dimensions().stream().allMatch(d -> d.isIndexed());
+ }
+}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
index 750842d398c..27bb0ef5e6b 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
@@ -79,6 +79,7 @@ public class Processing {
OnnxModelTypeResolver::new,
RankingExpressionTypeResolver::new,
BoolAttributeValidator::new,
+ PagedAttributeValidator::new,
// These should be last:
IndexingValidation::new,
IndexingValues::new);