diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-09-17 13:31:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-17 13:31:30 +0200 |
commit | 0f2da07296acaaf7f7d3cb607cfb25bfc8adf0b9 (patch) | |
tree | b7720a3e19ba84b28e17e4806033e8230ce53295 /config-model/src/main/java | |
parent | e4a52be36ab6907f0265c35a7bae7d1eea5e8093 (diff) | |
parent | 7b252a4068bebf3885948632348c57b319d2ce86 (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.java | 52 | ||||
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java | 1 |
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); |