summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/Index.java22
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/Search.java3
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java6
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/Stemming.java11
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/ValidationOverridesValidator.java29
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/ValidationOverridesValidatorTest.java92
7 files changed, 138 insertions, 26 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/Index.java b/config-model/src/main/java/com/yahoo/searchdefinition/Index.java
index 577639ead7a..212b985f7f1 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/Index.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/Index.java
@@ -53,9 +53,6 @@ public class Index implements Cloneable, Serializable {
*/
private Stemming stemming = null;
- /** Whether the content of this index is normalized */
- private boolean normalized = true;
-
private Type type = Type.VESPA;
/** The boolean index definition, if set */
@@ -126,20 +123,19 @@ public class Index implements Cloneable, Serializable {
if (o == null || getClass() != o.getClass()) return false;
Index index = (Index) o;
return prefix == index.prefix &&
- normalized == index.normalized &&
- interleavedFeatures == index.interleavedFeatures &&
- Objects.equals(name, index.name) &&
- rankType == index.rankType &&
- Objects.equals(aliases, index.aliases) &&
- stemming == index.stemming &&
- type == index.type &&
- Objects.equals(boolIndex, index.boolIndex) &&
- Objects.equals(hnswIndexParams, index.hnswIndexParams);
+ interleavedFeatures == index.interleavedFeatures &&
+ Objects.equals(name, index.name) &&
+ rankType == index.rankType &&
+ Objects.equals(aliases, index.aliases) &&
+ stemming == index.stemming &&
+ type == index.type &&
+ Objects.equals(boolIndex, index.boolIndex) &&
+ Objects.equals(hnswIndexParams, index.hnswIndexParams);
}
@Override
public int hashCode() {
- return Objects.hash(name, rankType, prefix, aliases, stemming, normalized, type, boolIndex, hnswIndexParams, interleavedFeatures);
+ return Objects.hash(name, rankType, prefix, aliases, stemming, type, boolIndex, hnswIndexParams, interleavedFeatures);
}
public String toString() {
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/Search.java b/config-model/src/main/java/com/yahoo/searchdefinition/Search.java
index 9ce1b8bb330..c89f6f09b77 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/Search.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/Search.java
@@ -23,7 +23,6 @@ import com.yahoo.vespa.model.AbstractService;
import java.io.Reader;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
@@ -48,7 +47,7 @@ import java.util.stream.Stream;
public class Search implements ImmutableSearch {
private static final String SD_DOC_FIELD_NAME = "sddocname";
- private static final List<String> RESERVED_NAMES = Arrays.asList(
+ private static final List<String> RESERVED_NAMES = List.of(
"index", "index_url", "summary", "attribute", "select_input", "host", SummaryClass.DOCUMENT_ID_FIELD,
"position", "split_foreach", "tokenize", "if", "else", "switch", "case", SD_DOC_FIELD_NAME, "relevancy");
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java
index cf7bef654b0..ac92207820c 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java
@@ -482,7 +482,7 @@ public class SDField extends Field implements TypedKey, FieldOperationContainer,
public void setDataType(DataType type) {
if (type.equals(DataType.URI)) { // Different defaults, naturally
normalizing.inferLowercase();
- stemming=Stemming.NONE;
+ stemming = Stemming.NONE;
}
this.dataType = type;
if ( ! idOverride) {
@@ -672,7 +672,7 @@ public class SDField extends Field implements TypedKey, FieldOperationContainer,
*/
@Override
public Stemming getStemming(Search search) {
- if (stemming!=null)
+ if (stemming != null)
return stemming;
else
return search.getStemming();
@@ -687,7 +687,7 @@ public class SDField extends Field implements TypedKey, FieldOperationContainer,
* Sets how this field should be stemmed, or set to null to use the default.
*/
public void setStemming(Stemming stemming) {
- this.stemming=stemming;
+ this.stemming = stemming;
}
/** Returns an unmodifiable map of the summary fields defined in this */
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/Stemming.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/Stemming.java
index 8a7ee78ea91..cefad472df7 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/document/Stemming.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/Stemming.java
@@ -3,12 +3,10 @@ package com.yahoo.searchdefinition.document;
import com.yahoo.language.process.StemMode;
-import java.util.logging.Logger;
-
/**
- * <p>The stemming setting of a field. This describes how the search engine
+ * The stemming setting of a field. This describes how the search engine
* should transform content of this field into base forms (stems) to increase
- * recall (find "car" when you search for "cars" etc.).</p>
+ * recall (find "car" when you search for "cars" etc.).
*
* @author bratseth
*/
@@ -26,8 +24,6 @@ public enum Stemming {
/** index multiple stems */
MULTIPLE("multiple");
- private static Logger log=Logger.getLogger(Stemming.class.getName());
-
private final String name;
/**
@@ -36,7 +32,6 @@ public enum Stemming {
*
* @throws IllegalArgumentException if there is no stemming type with the given name
*/
- @SuppressWarnings("deprecation")
public static Stemming get(String stemmingName) {
try {
return Stemming.valueOf(stemmingName.toUpperCase());
@@ -51,11 +46,11 @@ public enum Stemming {
public String getName() { return name; }
+ @Override
public String toString() {
return "stemming " + name;
}
- @SuppressWarnings("deprecation")
public StemMode toStemMode() {
switch(this) {
case SHORTEST: return StemMode.SHORTEST;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java
index 84c7a48a998..d59ad5f6252 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java
@@ -70,6 +70,7 @@ public class Validation {
new RankSetupValidator(validationParameters.ignoreValidationErrors()).validate(model, deployState);
new NoPrefixForIndexes().validate(model, deployState);
new DeploymentSpecValidator().validate(model, deployState);
+ new ValidationOverridesValidator().validate(model, deployState);
new RankingConstantsValidator().validate(model, deployState);
new SecretStoreValidator().validate(model, deployState);
new EndpointCertificateSecretsValidator().validate(model, deployState);
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ValidationOverridesValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ValidationOverridesValidator.java
new file mode 100644
index 00000000000..955d7924f86
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ValidationOverridesValidator.java
@@ -0,0 +1,29 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.model.application.validation;
+
+import com.yahoo.config.application.api.ValidationOverrides;
+import com.yahoo.config.model.deploy.DeployState;
+import com.yahoo.vespa.model.VespaModel;
+
+import java.io.Reader;
+import java.time.Duration;
+import java.util.Optional;
+
+/**
+ * Validate validation overrides (validation-overrides.xml). Done as a validator to make sure this is
+ * done when validating the mode and not when building the model
+ *
+ * @author hmusum
+ */
+public class ValidationOverridesValidator extends Validator {
+
+ @Override
+ public void validate(VespaModel model, DeployState deployState) {
+ Optional<Reader> overrides = deployState.getApplicationPackage().getValidationOverrides();
+ if (overrides.isEmpty()) return;
+
+ ValidationOverrides validationOverrides = ValidationOverrides.fromXml(overrides.get());
+ validationOverrides.validate(deployState.now());
+ }
+
+}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/ValidationOverridesValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/ValidationOverridesValidatorTest.java
new file mode 100644
index 00000000000..90d3d80c032
--- /dev/null
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/ValidationOverridesValidatorTest.java
@@ -0,0 +1,92 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.model.application.validation;
+
+import com.yahoo.config.model.NullConfigModelRegistry;
+import com.yahoo.config.model.api.ValidationParameters;
+import com.yahoo.config.model.deploy.DeployState;
+import com.yahoo.config.model.test.MockApplicationPackage;
+import com.yahoo.vespa.model.VespaModel;
+import org.junit.Test;
+import org.xml.sax.SAXException;
+
+import java.io.IOException;
+import java.time.Duration;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+/**
+ * @author hmusum
+ */
+public class ValidationOverridesValidatorTest {
+
+ private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
+ .withZone(ZoneId.systemDefault());
+
+ @Test
+ public void testValidationOverride() throws IOException, SAXException {
+ String tenDays = dateTimeFormatter.format(Instant.now().plus(Duration.ofDays(10)));
+
+ var validationOverridesXml = "<?xml version='1.0' encoding='UTF-8'?>\n" +
+ " <validation-overrides>\n" +
+ " <allow until='" + tenDays + "'>deployment-removal</allow>\n" +
+ " </validation-overrides>";
+
+ var deployState = createDeployState(validationOverridesXml);
+ VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState);
+ Validation.validate(model, new ValidationParameters(), deployState);
+ }
+
+ @Test
+ public void testFailsWhenValidationOverrideIsTooFarInFuture() {
+ Instant now = Instant.now();
+ String sixtyDays = dateTimeFormatter.format(now.plus(Duration.ofDays(60)));
+ String sixtyOneDays = dateTimeFormatter.format(now.plus(Duration.ofDays(61)));
+
+ var validationOverrides = "<?xml version='1.0' encoding='UTF-8'?>\n" +
+ "<validation-overrides>\n" +
+ " <allow until='" + sixtyDays + "'>deployment-removal</allow>\n" +
+ "</validation-overrides>";
+ assertValidationError("validation-overrides is invalid: allow 'deployment-removal' until " +
+ sixtyOneDays + "T00:00:00Z is too far in the future: Max 30 days is allowed", validationOverrides);
+ }
+
+ private static void assertValidationError(String message, String validationOverridesXml) {
+ try {
+ var deployState = createDeployState(validationOverridesXml);
+ VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState);
+ Validation.validate(model, new ValidationParameters(), deployState);
+ fail("Did not get expected exception");
+ } catch (IllegalArgumentException e) {
+ assertEquals(message, e.getMessage());
+ } catch (SAXException|IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private static DeployState createDeployState(String validationOverridesXml) {
+ var services = "<services version='1.0'>" +
+ " <admin version='2.0'>" +
+ " <adminserver hostalias='node0' />" +
+ " </admin>" +
+ " <container id='default' version='1.0'>" +
+ " <search/>" +
+ " <nodes>" +
+ " <node hostalias='node0'/>" +
+ " </nodes>" +
+ " </container>" +
+ "</services>";
+
+ var app = new MockApplicationPackage.Builder()
+ .withValidationOverrides(validationOverridesXml)
+ .withServices(services)
+ .build();
+ var builder = new DeployState.Builder().applicationPackage(app);
+ return builder.build();
+ }
+
+}
+