summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2017-06-16 09:38:12 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2017-06-16 09:38:12 +0200
commit1cda0afa21ebc76ee244e748e068e6b90f46357d (patch)
tree129312bc19224337a3a2c5797e0e35f84995d737 /config-model
parent78e20b1ef167cca871497314ec344963c3afcb84 (diff)
Keep time outside ValidationOverrides
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java6
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java11
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java8
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ChangeValidator.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ClusterSizeReductionValidator.java14
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidator.java3
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidator.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContentClusterRemovalValidator.java6
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/IndexedSearchClusterChangeValidator.java20
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/IndexingModeChangeValidator.java15
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/StartupCommandChangeValidator.java3
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/VespaRefeedAction.java15
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/AttributeChangeValidator.java13
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/DocumentDatabaseChangeValidator.java21
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/DocumentTypeChangeValidator.java6
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeValidator.java9
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigChangeTestUtils.java9
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidatorTest.java3
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidatorTest.java3
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexedSearchClusterChangeValidatorTest.java9
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/AttributeChangeValidatorTest.java7
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/DocumentDatabaseChangeValidatorTest.java11
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/DocumentTypeChangeValidatorTest.java47
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeValidatorTest.java8
24 files changed, 150 insertions, 105 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java b/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java
index daf68da05fa..95bce32f802 100644
--- a/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java
+++ b/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java
@@ -67,6 +67,7 @@ public class DeployState implements ConfigDefinitionStore {
private final SemanticRules semanticRules;
private final ValidationOverrides validationOverrides;
private final Version wantedNodeVespaVersion;
+ private final Instant now;
private final HostProvisioner provisioner;
@@ -98,8 +99,9 @@ public class DeployState implements ConfigDefinitionStore {
this.zone = zone;
this.queryProfiles = queryProfiles; // TODO: Remove this by seeing how pagetemplates are propagated
this.semanticRules = semanticRules; // TODO: Remove this by seeing how pagetemplates are propagated
- this.validationOverrides = ValidationOverrides.fromXml(applicationPackage.getValidationOverrides(), now);
+ this.validationOverrides = ValidationOverrides.fromXml(applicationPackage.getValidationOverrides());
this.wantedNodeVespaVersion = wantedNodeVespaVersion;
+ this.now = now;
}
public static HostProvisioner getDefaultModelHostProvisioner(ApplicationPackage applicationPackage) {
@@ -209,6 +211,8 @@ public class DeployState implements ConfigDefinitionStore {
public SemanticRules getSemanticRules() { return semanticRules; }
public Version getWantedNodeVespaVersion() { return wantedNodeVespaVersion; }
+
+ public Instant now() { return now; }
public static class Builder {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java
index 94fc74eb361..c61435ca831 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java
@@ -51,6 +51,7 @@ import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.lang.reflect.Constructor;
+import java.time.Instant;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
@@ -212,14 +213,14 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri
public ApplicationConfigProducerRoot getVespa() { return root; }
@Override
- public boolean allowModelVersionMismatch() {
- return validationOverrides.allows(ValidationId.configModelVersionMismatch) ||
- validationOverrides.allows(ValidationId.skipOldConfigModels); // implies this
+ public boolean allowModelVersionMismatch(Instant now) {
+ return validationOverrides.allows(ValidationId.configModelVersionMismatch, now) ||
+ validationOverrides.allows(ValidationId.skipOldConfigModels, now); // implies this
}
@Override
- public boolean skipOldConfigModels() {
- return validationOverrides.allows(ValidationId.skipOldConfigModels);
+ public boolean skipOldConfigModels(Instant now) {
+ return validationOverrides.allows(ValidationId.skipOldConfigModels, now);
}
/**
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 d8945b15f17..490627e7b45 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
@@ -16,6 +16,7 @@ import com.yahoo.vespa.model.application.validation.change.IndexedSearchClusterC
import com.yahoo.vespa.model.application.validation.change.IndexingModeChangeValidator;
import com.yahoo.vespa.model.application.validation.change.StartupCommandChangeValidator;
+import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -57,13 +58,14 @@ public class Validation {
Optional<Model> currentActiveModel = deployState.getPreviousModel();
if (currentActiveModel.isPresent() && (currentActiveModel.get() instanceof VespaModel))
return validateChanges((VespaModel)currentActiveModel.get(), model,
- deployState.validationOverrides(), deployState.getDeployLogger());
+ deployState.validationOverrides(), deployState.getDeployLogger(), deployState.now());
else
return new ArrayList<>();
}
private static List<ConfigChangeAction> validateChanges(VespaModel currentModel, VespaModel nextModel,
- ValidationOverrides overrides, DeployLogger logger) {
+ ValidationOverrides overrides, DeployLogger logger,
+ Instant now) {
ChangeValidator[] validators = new ChangeValidator[] {
new IndexingModeChangeValidator(),
new IndexedSearchClusterChangeValidator(),
@@ -74,7 +76,7 @@ public class Validation {
new ContainerRestartValidator(),
};
return Arrays.stream(validators)
- .flatMap(v -> v.validate(currentModel, nextModel, overrides).stream())
+ .flatMap(v -> v.validate(currentModel, nextModel, overrides, now).stream())
.collect(toList());
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ChangeValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ChangeValidator.java
index 5d4ab5c562a..bec7fd1518f 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ChangeValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ChangeValidator.java
@@ -5,6 +5,7 @@ import com.yahoo.config.model.api.ConfigChangeAction;
import com.yahoo.vespa.model.VespaModel;
import com.yahoo.config.application.api.ValidationOverrides;
+import java.time.Instant;
import java.util.List;
/**
@@ -22,9 +23,10 @@ public interface ChangeValidator {
* @param current the current active model
* @param next the next model we would like to activate
* @param overrides validation overrides
+ * @param now the instant to use as now
* @return a list of actions specifying what needs to be done in order to activate the new model.
* Return an empty list if nothing needs to be done
*/
- List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides);
+ List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides, Instant now);
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ClusterSizeReductionValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ClusterSizeReductionValidator.java
index 2ca11182a4e..d14fe91a53b 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ClusterSizeReductionValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ClusterSizeReductionValidator.java
@@ -8,6 +8,7 @@ import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.vespa.model.container.ContainerCluster;
import com.yahoo.vespa.model.content.cluster.ContentCluster;
+import java.time.Instant;
import java.util.Collections;
import java.util.List;
@@ -19,14 +20,15 @@ import java.util.List;
public class ClusterSizeReductionValidator implements ChangeValidator {
@Override
- public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides) {
+ public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides, Instant now) {
for (ContainerCluster currentCluster : current.getContainerClusters().values()) {
ContainerCluster nextCluster = next.getContainerClusters().get(currentCluster.getName());
if (nextCluster == null) continue;
validate(currentCluster.getContainers().size(),
nextCluster.getContainers().size(),
currentCluster.getName(),
- overrides);
+ overrides,
+ now);
}
for (ContentCluster currentCluster : current.getContentClusters().values()) {
@@ -35,18 +37,20 @@ public class ClusterSizeReductionValidator implements ChangeValidator {
validate(currentCluster.getSearch().getSearchNodes().size(),
nextCluster.getSearch().getSearchNodes().size(),
currentCluster.getName(),
- overrides);
+ overrides,
+ now);
}
return Collections.emptyList();
}
- private void validate(int currentSize, int nextSize, String clusterName, ValidationOverrides overrides) {
+ private void validate(int currentSize, int nextSize, String clusterName, ValidationOverrides overrides, Instant now) {
// don't allow more than 50% reduction, but always allow to reduce size with 1
if ( nextSize < ((double)currentSize) * 0.5 && nextSize != currentSize - 1)
overrides.invalid(ValidationId.clusterSizeReduction,
"Size reduction in '" + clusterName + "' is too large. Current size: " + currentSize +
- ", new size: " + nextSize + ". New size must be at least 50% of the current size");
+ ", new size: " + nextSize + ". New size must be at least 50% of the current size",
+ now);
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidator.java
index b111e0a23cb..3a97bf4b876 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidator.java
@@ -13,6 +13,7 @@ import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.vespa.model.utils.internal.ReflectionUtil;
import org.apache.commons.lang3.ClassUtils;
+import java.time.Instant;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
@@ -40,7 +41,7 @@ public class ConfigValueChangeValidator implements ChangeValidator {
/** Inspects the configuration in the new and old Vespa model to determine which services that require restart */
@Override
public List<ConfigChangeAction> validate(VespaModel currentModel, VespaModel nextModel,
- ValidationOverrides overrides) {
+ ValidationOverrides overrides, Instant now) {
return findConfigChangesFromModels(currentModel, nextModel).collect(Collectors.toList());
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidator.java
index e2ef629d20a..c27600578b5 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidator.java
@@ -7,6 +7,7 @@ import com.yahoo.vespa.model.VespaModel;
import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.vespa.model.container.Container;
+import java.time.Instant;
import java.util.List;
import static java.util.stream.Collectors.toList;
@@ -19,7 +20,8 @@ import static java.util.stream.Collectors.toList;
public class ContainerRestartValidator implements ChangeValidator {
@Override
- public List<ConfigChangeAction> validate(VespaModel currentModel, VespaModel nextModel, ValidationOverrides ignored) {
+ public List<ConfigChangeAction> validate(VespaModel currentModel, VespaModel nextModel, ValidationOverrides ignored,
+ Instant now) {
return nextModel.getContainerClusters().values().stream()
.flatMap(cluster -> cluster.getContainers().stream())
.filter(container -> isExistingContainer(container, currentModel))
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContentClusterRemovalValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContentClusterRemovalValidator.java
index 87ac8990285..52253411419 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContentClusterRemovalValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContentClusterRemovalValidator.java
@@ -7,6 +7,7 @@ import com.yahoo.config.application.api.ValidationId;
import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.vespa.model.content.cluster.ContentCluster;
+import java.time.Instant;
import java.util.Collections;
import java.util.List;
@@ -19,13 +20,14 @@ import java.util.List;
public class ContentClusterRemovalValidator implements ChangeValidator {
@Override
- public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides) {
+ public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides, Instant now) {
for (String currentClusterId : current.getContentClusters().keySet()) {
ContentCluster nextCluster = next.getContentClusters().get(currentClusterId);
if (nextCluster == null)
overrides.invalid(ValidationId.contentClusterRemoval,
"Content cluster '" + currentClusterId + "' is removed. " +
- "This will cause loss of all data in this cluster");
+ "This will cause loss of all data in this cluster",
+ now);
}
return Collections.emptyList();
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/IndexedSearchClusterChangeValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/IndexedSearchClusterChangeValidator.java
index 6fe8ee07781..4ed28331467 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/IndexedSearchClusterChangeValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/IndexedSearchClusterChangeValidator.java
@@ -12,6 +12,7 @@ import com.yahoo.vespa.model.content.cluster.ContentCluster;
import com.yahoo.vespa.model.search.DocumentDatabase;
import com.yahoo.vespa.model.search.IndexedSearchCluster;
+import java.time.Instant;
import java.util.*;
import java.util.stream.Collectors;
@@ -24,12 +25,12 @@ import java.util.stream.Collectors;
public class IndexedSearchClusterChangeValidator implements ChangeValidator {
@Override
- public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides) {
+ public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides, Instant now) {
List<ConfigChangeAction> result = new ArrayList<>();
for (Map.Entry<String, ContentCluster> currentEntry : current.getContentClusters().entrySet()) {
ContentCluster nextCluster = next.getContentClusters().get(currentEntry.getKey());
if (nextCluster != null && nextCluster.getSearch().hasIndexedCluster()) {
- result.addAll(validateContentCluster(currentEntry.getValue(), nextCluster, overrides));
+ result.addAll(validateContentCluster(currentEntry.getValue(), nextCluster, overrides, now));
}
}
return result;
@@ -37,15 +38,17 @@ public class IndexedSearchClusterChangeValidator implements ChangeValidator {
private static List<ConfigChangeAction> validateContentCluster(ContentCluster currentCluster,
ContentCluster nextCluster,
- ValidationOverrides overrides) {
+ ValidationOverrides overrides,
+ Instant now) {
List<ConfigChangeAction> result = new ArrayList<>();
- result.addAll(validateDocumentDatabases(currentCluster, nextCluster, overrides));
+ result.addAll(validateDocumentDatabases(currentCluster, nextCluster, overrides, now));
return result;
}
private static List<ConfigChangeAction> validateDocumentDatabases(ContentCluster currentCluster,
ContentCluster nextCluster,
- ValidationOverrides overrides) {
+ ValidationOverrides overrides,
+ Instant now) {
List<ConfigChangeAction> result = new ArrayList<>();
for (DocumentDatabase currentDb : getDocumentDbs(currentCluster.getSearch())) {
String docTypeName = currentDb.getName();
@@ -53,7 +56,7 @@ public class IndexedSearchClusterChangeValidator implements ChangeValidator {
filter(db -> db.getName().equals(docTypeName)).findFirst();
if (nextDb.isPresent()) {
result.addAll(validateDocumentDatabase(currentCluster, nextCluster, docTypeName,
- currentDb, nextDb.get(), overrides));
+ currentDb, nextDb.get(), overrides, now));
}
}
return result;
@@ -64,11 +67,12 @@ public class IndexedSearchClusterChangeValidator implements ChangeValidator {
String docTypeName,
DocumentDatabase currentDb,
DocumentDatabase nextDb,
- ValidationOverrides overrides) {
+ ValidationOverrides overrides,
+ Instant now) {
NewDocumentType currentDocType = currentCluster.getDocumentDefinitions().get(docTypeName);
NewDocumentType nextDocType = nextCluster.getDocumentDefinitions().get(docTypeName);
List<VespaConfigChangeAction> result =
- new DocumentDatabaseChangeValidator(currentDb, currentDocType, nextDb, nextDocType).validate(overrides);
+ new DocumentDatabaseChangeValidator(currentDb, currentDocType, nextDb, nextDocType).validate(overrides, now);
return modifyActions(result, getSearchNodeServices(nextCluster.getSearch().getIndexed()), docTypeName);
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/IndexingModeChangeValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/IndexingModeChangeValidator.java
index f92944d34ca..908809b4b44 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/IndexingModeChangeValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/IndexingModeChangeValidator.java
@@ -7,6 +7,7 @@ import com.yahoo.config.application.api.ValidationId;
import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.vespa.model.content.cluster.ContentCluster;
+import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -20,13 +21,14 @@ import java.util.Optional;
public class IndexingModeChangeValidator implements ChangeValidator {
@Override
- public List<ConfigChangeAction> validate(VespaModel currentModel, VespaModel nextModel, ValidationOverrides overrides) {
+ public List<ConfigChangeAction> validate(VespaModel currentModel, VespaModel nextModel,
+ ValidationOverrides overrides, Instant now) {
List<ConfigChangeAction> actions = new ArrayList<>();
for (Map.Entry<String, ContentCluster> currentEntry : currentModel.getContentClusters().entrySet()) {
ContentCluster nextCluster = nextModel.getContentClusters().get(currentEntry.getKey());
if (nextCluster == null) continue;
- Optional<ConfigChangeAction> change = validateContentCluster(currentEntry.getValue(), nextCluster, overrides);
+ Optional<ConfigChangeAction> change = validateContentCluster(currentEntry.getValue(), nextCluster, overrides, now);
if (change.isPresent())
actions.add(change.get());
}
@@ -34,16 +36,17 @@ public class IndexingModeChangeValidator implements ChangeValidator {
}
private Optional<ConfigChangeAction> validateContentCluster(ContentCluster currentCluster, ContentCluster nextCluster,
- ValidationOverrides overrides) {
- final boolean currentClusterIsIndexed = currentCluster.getSearch().hasIndexedCluster();
- final boolean nextClusterIsIndexed = nextCluster.getSearch().hasIndexedCluster();
+ ValidationOverrides overrides, Instant now) {
+ boolean currentClusterIsIndexed = currentCluster.getSearch().hasIndexedCluster();
+ boolean nextClusterIsIndexed = nextCluster.getSearch().hasIndexedCluster();
if (currentClusterIsIndexed == nextClusterIsIndexed) return Optional.empty();
return Optional.of(VespaRefeedAction.of(ValidationId.indexModeChange.value(),
overrides,
"Cluster '" + currentCluster.getName() + "' changed indexing mode from '" +
- indexingMode(currentClusterIsIndexed) + "' to '" + indexingMode(nextClusterIsIndexed) + "'"));
+ indexingMode(currentClusterIsIndexed) + "' to '" + indexingMode(nextClusterIsIndexed) + "'",
+ now));
}
private String indexingMode(boolean isIndexed) {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/StartupCommandChangeValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/StartupCommandChangeValidator.java
index 63e302db2ab..840ab69ba08 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/StartupCommandChangeValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/StartupCommandChangeValidator.java
@@ -7,6 +7,7 @@ import com.yahoo.vespa.model.Service;
import com.yahoo.vespa.model.VespaModel;
import com.yahoo.config.application.api.ValidationOverrides;
+import java.time.Instant;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
@@ -23,7 +24,7 @@ public class StartupCommandChangeValidator implements ChangeValidator {
@Override
public List<ConfigChangeAction> validate(VespaModel currentModel, VespaModel nextModel,
- ValidationOverrides overrides) {
+ ValidationOverrides overrides, Instant now) {
return findServicesWithChangedStartupCommmand(currentModel, nextModel).collect(Collectors.toList());
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/VespaRefeedAction.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/VespaRefeedAction.java
index db8f6e9a758..0fd38e5dbdd 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/VespaRefeedAction.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/VespaRefeedAction.java
@@ -5,6 +5,7 @@ import com.yahoo.config.model.api.ConfigChangeRefeedAction;
import com.yahoo.config.model.api.ServiceInfo;
import com.yahoo.config.application.api.ValidationOverrides;
+import java.time.Instant;
import java.util.Collections;
import java.util.List;
@@ -26,29 +27,31 @@ public class VespaRefeedAction extends VespaConfigChangeAction implements Config
private final String documentType;
private final boolean allowed;
+ private final Instant now;
- private VespaRefeedAction(String name, String message, List<ServiceInfo> services, String documentType, boolean allowed) {
+ private VespaRefeedAction(String name, String message, List<ServiceInfo> services, String documentType, boolean allowed, Instant now) {
super(message, services);
this.name = name;
this.documentType = documentType;
this.allowed = allowed;
+ this.now = now;
}
/** Creates a refeed action with some missing information */
// TODO: We should require document type or model its absence properly
- public static VespaRefeedAction of(String name, ValidationOverrides overrides, String message) {
- return new VespaRefeedAction(name, message, Collections.emptyList(), "", overrides.allows(name));
+ public static VespaRefeedAction of(String name, ValidationOverrides overrides, String message, Instant now) {
+ return new VespaRefeedAction(name, message, Collections.emptyList(), "", overrides.allows(name, now), now);
}
/** Creates a refeed action */
public static VespaRefeedAction of(String name, ValidationOverrides overrides, String message,
- List<ServiceInfo> services, String documentType) {
- return new VespaRefeedAction(name, message, services, documentType, overrides.allows(name));
+ List<ServiceInfo> services, String documentType, Instant now) {
+ return new VespaRefeedAction(name, message, services, documentType, overrides.allows(name, now), now);
}
@Override
public VespaConfigChangeAction modifyAction(String newMessage, List<ServiceInfo> newServices, String documentType) {
- return new VespaRefeedAction(name, newMessage, newServices, documentType, allowed);
+ return new VespaRefeedAction(name, newMessage, newServices, documentType, allowed, now);
}
@Override
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/AttributeChangeValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/AttributeChangeValidator.java
index 6ecaf3521df..95ae03d4e5f 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/AttributeChangeValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/AttributeChangeValidator.java
@@ -10,6 +10,7 @@ import com.yahoo.vespa.model.application.validation.change.VespaConfigChangeActi
import com.yahoo.vespa.model.application.validation.change.VespaRefeedAction;
import com.yahoo.vespa.model.application.validation.change.VespaRestartAction;
+import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -46,12 +47,12 @@ public class AttributeChangeValidator {
this.nextDocType = nextDocType;
}
- public List<VespaConfigChangeAction> validate(final ValidationOverrides overrides) {
+ public List<VespaConfigChangeAction> validate(ValidationOverrides overrides, Instant now) {
List<VespaConfigChangeAction> result = new ArrayList<>();
result.addAll(validateAddAttributeAspect());
result.addAll(validateRemoveAttributeAspect());
result.addAll(validateAttributeSettings());
- result.addAll(validateTensorTypes(overrides));
+ result.addAll(validateTensorTypes(overrides, now));
return result;
}
@@ -94,7 +95,7 @@ public class AttributeChangeValidator {
return result;
}
- private List<VespaConfigChangeAction> validateTensorTypes(final ValidationOverrides overrides) {
+ private List<VespaConfigChangeAction> validateTensorTypes(final ValidationOverrides overrides, Instant now) {
final List<VespaConfigChangeAction> result = new ArrayList<>();
for (final Attribute nextAttr : nextFields.attributes()) {
@@ -109,7 +110,7 @@ public class AttributeChangeValidator {
// Tensor attribute has changed type
if (!nextAttr.tensorType().get().equals(currentAttr.tensorType().get())) {
- result.add(createTensorTypeChangedRefeedAction(currentAttr, nextAttr, overrides));
+ result.add(createTensorTypeChangedRefeedAction(currentAttr, nextAttr, overrides, now));
}
}
}
@@ -117,7 +118,7 @@ public class AttributeChangeValidator {
return result;
}
- private static VespaRefeedAction createTensorTypeChangedRefeedAction(Attribute currentAttr, Attribute nextAttr, ValidationOverrides overrides) {
+ private static VespaRefeedAction createTensorTypeChangedRefeedAction(Attribute currentAttr, Attribute nextAttr, ValidationOverrides overrides, Instant now) {
return VespaRefeedAction.of(
"tensor-type-change",
overrides,
@@ -125,7 +126,7 @@ public class AttributeChangeValidator {
.addChange(
"tensor type",
currentAttr.tensorType().get().toString(),
- nextAttr.tensorType().get().toString()).build());
+ nextAttr.tensorType().get().toString()).build(), now);
}
private static void validateAttributeSetting(Attribute currentAttr, Attribute nextAttr,
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/DocumentDatabaseChangeValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/DocumentDatabaseChangeValidator.java
index 072907f692d..bd287f83a1a 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/DocumentDatabaseChangeValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/DocumentDatabaseChangeValidator.java
@@ -6,6 +6,7 @@ import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.vespa.model.application.validation.change.VespaConfigChangeAction;
import com.yahoo.vespa.model.search.DocumentDatabase;
+import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
@@ -32,29 +33,29 @@ public class DocumentDatabaseChangeValidator {
this.nextDocType = nextDocType;
}
- public List<VespaConfigChangeAction> validate(final ValidationOverrides overrides) {
+ public List<VespaConfigChangeAction> validate(ValidationOverrides overrides, Instant now) {
List<VespaConfigChangeAction> result = new ArrayList<>();
- result.addAll(validateAttributeChanges(overrides));
- result.addAll(validateIndexingScriptChanges(overrides));
- result.addAll(validateDocumentTypeChanges(overrides));
+ result.addAll(validateAttributeChanges(overrides, now));
+ result.addAll(validateIndexingScriptChanges(overrides, now));
+ result.addAll(validateDocumentTypeChanges(overrides, now));
return result;
}
- private List<VespaConfigChangeAction> validateAttributeChanges(final ValidationOverrides overrides) {
+ private List<VespaConfigChangeAction> validateAttributeChanges(ValidationOverrides overrides, Instant now) {
return new AttributeChangeValidator(
currentDatabase.getDerivedConfiguration().getAttributeFields(),
currentDatabase.getDerivedConfiguration().getIndexSchema(), currentDocType,
nextDatabase.getDerivedConfiguration().getAttributeFields(),
- nextDatabase.getDerivedConfiguration().getIndexSchema(), nextDocType).validate(overrides);
+ nextDatabase.getDerivedConfiguration().getIndexSchema(), nextDocType).validate(overrides, now);
}
- private List<VespaConfigChangeAction> validateIndexingScriptChanges(ValidationOverrides overrides) {
+ private List<VespaConfigChangeAction> validateIndexingScriptChanges(ValidationOverrides overrides, Instant now) {
return new IndexingScriptChangeValidator(currentDatabase.getDerivedConfiguration().getSearch(),
- nextDatabase.getDerivedConfiguration().getSearch()).validate(overrides);
+ nextDatabase.getDerivedConfiguration().getSearch()).validate(overrides, now);
}
- private List<VespaConfigChangeAction> validateDocumentTypeChanges(ValidationOverrides overrides) {
- return new DocumentTypeChangeValidator(currentDocType, nextDocType).validate(overrides);
+ private List<VespaConfigChangeAction> validateDocumentTypeChanges(ValidationOverrides overrides, Instant now) {
+ return new DocumentTypeChangeValidator(currentDocType, nextDocType).validate(overrides, now);
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/DocumentTypeChangeValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/DocumentTypeChangeValidator.java
index a1c3a409b30..4fd5e82e93f 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/DocumentTypeChangeValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/DocumentTypeChangeValidator.java
@@ -8,6 +8,7 @@ import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.vespa.model.application.validation.change.VespaConfigChangeAction;
import com.yahoo.vespa.model.application.validation.change.VespaRefeedAction;
+import java.time.Instant;
import java.util.List;
import java.util.stream.Collectors;
@@ -132,7 +133,7 @@ public class DocumentTypeChangeValidator {
this.nextDocType = nextDocType;
}
- public List<VespaConfigChangeAction> validate(ValidationOverrides overrides) {
+ public List<VespaConfigChangeAction> validate(ValidationOverrides overrides, Instant now) {
return currentDocType.getAllFields().stream().
map(field -> createFieldChange(field, nextDocType)).
filter(fieldChange -> fieldChange.valid() && fieldChange.changedType()).
@@ -140,7 +141,8 @@ public class DocumentTypeChangeValidator {
overrides,
new ChangeMessageBuilder(fieldChange.fieldName()).
addChange("data type", fieldChange.currentTypeName(),
- fieldChange.nextTypeName()).build())).
+ fieldChange.nextTypeName()).build(),
+ now)).
collect(Collectors.toList());
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeValidator.java
index 63f0a6326b5..ff9230b34f3 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeValidator.java
@@ -12,6 +12,7 @@ import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.vespa.model.application.validation.change.VespaConfigChangeAction;
import com.yahoo.vespa.model.application.validation.change.VespaRefeedAction;
+import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@@ -32,27 +33,27 @@ public class IndexingScriptChangeValidator {
this.nextSearch = nextSearch;
}
- public List<VespaConfigChangeAction> validate(ValidationOverrides overrides) {
+ public List<VespaConfigChangeAction> validate(ValidationOverrides overrides, Instant now) {
List<VespaConfigChangeAction> result = new ArrayList<>();
for (SDField nextField : nextSearch.allConcreteFields()) {
String fieldName = nextField.getName();
SDField currentField = currentSearch.getConcreteField(fieldName);
if (currentField != null) {
- validateScripts(currentField, nextField, overrides).ifPresent(r -> result.add(r));
+ validateScripts(currentField, nextField, overrides, now).ifPresent(r -> result.add(r));
}
}
return result;
}
private Optional<VespaConfigChangeAction> validateScripts(SDField currentField, SDField nextField,
- ValidationOverrides overrides) {
+ ValidationOverrides overrides, Instant now) {
ScriptExpression currentScript = currentField.getIndexingScript();
ScriptExpression nextScript = nextField.getIndexingScript();
if ( ! equalScripts(currentScript, nextScript)) {
ChangeMessageBuilder messageBuilder = new ChangeMessageBuilder(nextField.getName());
new IndexingScriptChangeMessageBuilder(currentSearch, currentField, nextSearch, nextField).populate(messageBuilder);
messageBuilder.addChange("indexing script", currentScript.toString(), nextScript.toString());
- return Optional.of(VespaRefeedAction.of(ValidationId.indexingChange.value(), overrides, messageBuilder.build()));
+ return Optional.of(VespaRefeedAction.of(ValidationId.indexingChange.value(), overrides, messageBuilder.build(), now));
}
return Optional.empty();
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigChangeTestUtils.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigChangeTestUtils.java
index a49b3a464e2..3738add1a6d 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigChangeTestUtils.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigChangeTestUtils.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.model.application.validation.change;
import com.yahoo.config.model.api.ServiceInfo;
import com.yahoo.config.application.api.ValidationOverrides;
+import java.time.Instant;
import java.util.List;
public class ConfigChangeTestUtils {
@@ -16,12 +17,12 @@ public class ConfigChangeTestUtils {
return new VespaRestartAction(message, services);
}
- public static VespaConfigChangeAction newRefeedAction(String name, ValidationOverrides overrides, String message) {
- return VespaRefeedAction.of(name, overrides, message);
+ public static VespaConfigChangeAction newRefeedAction(String name, ValidationOverrides overrides, String message, Instant now) {
+ return VespaRefeedAction.of(name, overrides, message, now);
}
public static VespaConfigChangeAction newRefeedAction(String name, ValidationOverrides overrides, String message,
- List<ServiceInfo> services, String documentType) {
- return VespaRefeedAction.of(name, overrides, message, services, documentType);
+ List<ServiceInfo> services, String documentType, Instant now) {
+ return VespaRefeedAction.of(name, overrides, message, services, documentType, now);
}
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidatorTest.java
index 3b083ad3076..cbb725987eb 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidatorTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ConfigValueChangeValidatorTest.java
@@ -20,6 +20,7 @@ import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithMockPkg;
import org.junit.Before;
import org.junit.Test;
+import java.time.Instant;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -143,7 +144,7 @@ public class ConfigValueChangeValidatorTest {
private List<ConfigChangeAction> getConfigChanges(VespaModel currentModel, VespaModel nextModel) {
ConfigValueChangeValidator validator = new ConfigValueChangeValidator(logger);
- return validator.validate(currentModel, nextModel, ValidationOverrides.empty());
+ return validator.validate(currentModel, nextModel, ValidationOverrides.empty, Instant.now());
}
private List<ConfigChangeAction> getConfigChanges(AbstractConfigProducerRoot currentModel,
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidatorTest.java
index 8e13c7209fc..1a6bd89bb3f 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidatorTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/ContainerRestartValidatorTest.java
@@ -8,6 +8,7 @@ import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithMockPkg;
import org.junit.Test;
+import java.time.Instant;
import java.util.Collections;
import java.util.List;
@@ -45,7 +46,7 @@ public class ContainerRestartValidatorTest {
private static List<ConfigChangeAction> validateModel(VespaModel current, VespaModel next) {
return new ContainerRestartValidator()
- .validate(current, next, new ValidationOverrides(Collections.emptyList()));
+ .validate(current, next, new ValidationOverrides(Collections.emptyList()), Instant.now());
}
private static VespaModel createModel(boolean restartOnDeploy) {
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexedSearchClusterChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexedSearchClusterChangeValidatorTest.java
index 62c76d3639a..387b8912018 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexedSearchClusterChangeValidatorTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexedSearchClusterChangeValidatorTest.java
@@ -10,6 +10,7 @@ import com.yahoo.vespa.model.content.utils.ContentClusterBuilder;
import com.yahoo.vespa.model.content.utils.SearchDefinitionBuilder;
import org.junit.Test;
+import java.time.Instant;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@@ -75,7 +76,7 @@ public class IndexedSearchClusterChangeValidatorTest {
public void assertValidation() {
List<ConfigChangeAction> act = normalizeServicesInActions(validator.validate(currentModel, nextModel,
- ValidationOverrides.empty()));
+ ValidationOverrides.empty, Instant.now()));
assertThat(act.size(), is(0));
}
@@ -102,7 +103,7 @@ public class IndexedSearchClusterChangeValidatorTest {
public void assertValidation(List<ConfigChangeAction> exp) {
List<ConfigChangeAction> act = normalizeServicesInActions(validator.validate(currentModel, nextModel,
- ValidationOverrides.empty()));
+ ValidationOverrides.empty, Instant.now()));
exp.sort((lhs, rhs) -> lhs.getMessage().compareTo(rhs.getMessage()));
act.sort((lhs, rhs) -> lhs.getMessage().compareTo(rhs.getMessage()));
assertThat(act, equalTo(exp));
@@ -165,8 +166,8 @@ public class IndexedSearchClusterChangeValidatorTest {
public void requireThatChangingFieldTypeIsDiscovered() {
Fixture f = Fixture.newOneDocFixture(STRING_FIELD, INT_FIELD);
f.assertValidation(Arrays.asList(newRefeedAction("field-type-change",
- ValidationOverrides.empty(),
- "Document type 'd1': " + FIELD_TYPE_CHANGE_MSG, FOO_SERVICE, "d1")));
+ ValidationOverrides.empty,
+ "Document type 'd1': " + FIELD_TYPE_CHANGE_MSG, FOO_SERVICE, "d1", Instant.now())));
}
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/AttributeChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/AttributeChangeValidatorTest.java
index 88c7c14556b..eab12db20ef 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/AttributeChangeValidatorTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/AttributeChangeValidatorTest.java
@@ -5,6 +5,7 @@ import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.vespa.model.application.validation.change.VespaConfigChangeAction;
import org.junit.Test;
+import java.time.Instant;
import java.util.List;
import static com.yahoo.vespa.model.application.validation.change.ConfigChangeTestUtils.newRefeedAction;
@@ -28,7 +29,7 @@ public class AttributeChangeValidatorTest {
@Override
public List<VespaConfigChangeAction> validate() {
- return validator.validate(ValidationOverrides.empty());
+ return validator.validate(ValidationOverrides.empty, Instant.now());
}
}
@@ -115,8 +116,8 @@ public class AttributeChangeValidatorTest {
"field f1 type tensor(y[]) { indexing: attribute \n attribute: tensor(y[]) }")
.assertValidation(newRefeedAction(
"tensor-type-change",
- ValidationOverrides.empty(),
- "Field 'f1' changed: tensor type: 'tensor(x[100])' -> 'tensor(y[])'"));
+ ValidationOverrides.empty,
+ "Field 'f1' changed: tensor type: 'tensor(x[100])' -> 'tensor(y[])'", Instant.now()));
}
@Test
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/DocumentDatabaseChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/DocumentDatabaseChangeValidatorTest.java
index 12565dd64dd..ba736af2159 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/DocumentDatabaseChangeValidatorTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/DocumentDatabaseChangeValidatorTest.java
@@ -5,6 +5,7 @@ import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.vespa.model.application.validation.change.VespaConfigChangeAction;
import org.junit.Test;
+import java.time.Instant;
import java.util.Arrays;
import java.util.List;
@@ -23,7 +24,7 @@ public class DocumentDatabaseChangeValidatorTest {
@Override
public List<VespaConfigChangeAction> validate() {
- return validator.validate(ValidationOverrides.empty());
+ return validator.validate(ValidationOverrides.empty, Instant.now());
}
}
@@ -39,12 +40,12 @@ public class DocumentDatabaseChangeValidatorTest {
f.assertValidation(Arrays.asList(
newRestartAction("Field 'f1' changed: add attribute aspect"),
newRefeedAction("indexing-change",
- ValidationOverrides.empty(),
+ ValidationOverrides.empty,
"Field 'f2' changed: add index aspect, indexing script: '{ input f2 | summary f2; }' -> " +
- "'{ input f2 | tokenize normalize stem:\"SHORTEST\" | index f2 | summary f2; }'"),
+ "'{ input f2 | tokenize normalize stem:\"SHORTEST\" | index f2 | summary f2; }'", Instant.now()),
newRefeedAction("field-type-change",
- ValidationOverrides.empty(),
- "Field 'f3' changed: data type: 'int' -> 'string'")));
+ ValidationOverrides.empty,
+ "Field 'f3' changed: data type: 'int' -> 'string'", Instant.now())));
}
@Test
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/DocumentTypeChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/DocumentTypeChangeValidatorTest.java
index 749b4188e5f..a4ab5ebdb5e 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/DocumentTypeChangeValidatorTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/DocumentTypeChangeValidatorTest.java
@@ -12,6 +12,7 @@ import com.yahoo.vespa.model.application.validation.change.VespaConfigChangeActi
import com.yahoo.vespa.model.application.validation.change.VespaRefeedAction;
import org.junit.Test;
+import java.time.Instant;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -29,6 +30,7 @@ import static org.junit.Assert.assertTrue;
public class DocumentTypeChangeValidatorTest {
private static class Fixture extends ContentClusterFixture {
+
DocumentTypeChangeValidator validator;
public Fixture(String currentSd, String nextSd) throws Exception {
@@ -38,7 +40,7 @@ public class DocumentTypeChangeValidatorTest {
@Override
public List<VespaConfigChangeAction> validate() {
- return validator.validate(ValidationOverrides.empty());
+ return validator.validate(ValidationOverrides.empty, Instant.now());
}
}
@@ -62,8 +64,9 @@ public class DocumentTypeChangeValidatorTest {
Fixture f = new Fixture("field f1 type string { indexing: summary }",
"field f1 type int { indexing: summary }");
f.assertValidation(newRefeedAction("field-type-change",
- ValidationOverrides.empty(),
- "Field 'f1' changed: data type: 'string' -> 'int'"));
+ ValidationOverrides.empty,
+ "Field 'f1' changed: data type: 'string' -> 'int'",
+ Instant.now()));
}
@Test
@@ -71,8 +74,8 @@ public class DocumentTypeChangeValidatorTest {
Fixture f = new Fixture("field f1 type string { indexing: summary }",
"field f1 type array<string> { indexing: summary }");
f.assertValidation(newRefeedAction("field-type-change",
- ValidationOverrides.empty(),
- "Field 'f1' changed: data type: 'string' -> 'Array<string>'"));
+ ValidationOverrides.empty,
+ "Field 'f1' changed: data type: 'string' -> 'Array<string>'", Instant.now()));
}
@@ -88,8 +91,8 @@ public class DocumentTypeChangeValidatorTest {
Fixture f = new Fixture("field f1 type array<string> { indexing: summary }",
"field f1 type array<int> { indexing: summary }");
f.assertValidation(newRefeedAction("field-type-change",
- ValidationOverrides.empty(),
- "Field 'f1' changed: data type: 'Array<string>' -> 'Array<int>'"));
+ ValidationOverrides.empty,
+ "Field 'f1' changed: data type: 'Array<string>' -> 'Array<int>'", Instant.now()));
}
@Test
@@ -97,8 +100,8 @@ public class DocumentTypeChangeValidatorTest {
Fixture f = new Fixture("field f1 type array<string> { indexing: summary }",
"field f1 type weightedset<string> { indexing: summary }");
f.assertValidation(newRefeedAction("field-type-change",
- ValidationOverrides.empty(),
- "Field 'f1' changed: data type: 'Array<string>' -> 'WeightedSet<string>'"));
+ ValidationOverrides.empty,
+ "Field 'f1' changed: data type: 'Array<string>' -> 'WeightedSet<string>'", Instant.now()));
}
@Test
@@ -106,11 +109,11 @@ public class DocumentTypeChangeValidatorTest {
Fixture f = new Fixture("field f1 type string { indexing: summary } field f2 type int { indexing: summary }" ,
"field f2 type string { indexing: summary } field f1 type int { indexing: summary }");
f.assertValidation(Arrays.asList(newRefeedAction("field-type-change",
- ValidationOverrides.empty(),
- "Field 'f1' changed: data type: 'string' -> 'int'"),
+ ValidationOverrides.empty,
+ "Field 'f1' changed: data type: 'string' -> 'int'", Instant.now()),
newRefeedAction("field-type-change",
- ValidationOverrides.empty(),
- "Field 'f2' changed: data type: 'int' -> 'string'")));
+ ValidationOverrides.empty,
+ "Field 'f2' changed: data type: 'int' -> 'string'", Instant.now())));
}
@Test
@@ -146,8 +149,8 @@ public class DocumentTypeChangeValidatorTest {
Fixture f = new Fixture("struct s1 { field f1 type string {} } field f2 type s1 { indexing: summary }",
"struct s1 { field f1 type int {} } field f2 type s1 { indexing: summary }");
f.assertValidation(newRefeedAction("field-type-change",
- ValidationOverrides.empty(),
- "Field 'f2' changed: data type: 's1:{f1:string}' -> 's1:{f1:int}'"));
+ ValidationOverrides.empty,
+ "Field 'f2' changed: data type: 's1:{f1:string}' -> 's1:{f1:int}'", Instant.now()));
}
@Test
@@ -155,8 +158,8 @@ public class DocumentTypeChangeValidatorTest {
Fixture f = new Fixture("struct s1 { field f1 type array<string> {} } field f2 type s1 { indexing: summary }",
"struct s1 { field f1 type array<int> {} } field f2 type s1 { indexing: summary }");
f.assertValidation(newRefeedAction("field-type-change",
- ValidationOverrides.empty(),
- "Field 'f2' changed: data type: 's1:{f1:Array<string>}' -> 's1:{f1:Array<int>}'"));
+ ValidationOverrides.empty,
+ "Field 'f2' changed: data type: 's1:{f1:Array<string>}' -> 's1:{f1:Array<int>}'", Instant.now()));
}
@Test
@@ -164,8 +167,8 @@ public class DocumentTypeChangeValidatorTest {
Fixture f = new Fixture("struct s1 { field f1 type string {} } struct s2 { field f2 type s1 {} } field f3 type s2 { indexing: summary }",
"struct s1 { field f1 type int {} } struct s2 { field f2 type s1 {} } field f3 type s2 { indexing: summary }");
f.assertValidation(newRefeedAction("field-type-change",
- ValidationOverrides.empty(),
- "Field 'f3' changed: data type: 's2:{s1:{f1:string}}' -> 's2:{s1:{f1:int}}'"));
+ ValidationOverrides.empty,
+ "Field 'f3' changed: data type: 's2:{s1:{f1:string}}' -> 's2:{s1:{f1:int}}'", Instant.now()));
}
@Test
@@ -173,8 +176,8 @@ public class DocumentTypeChangeValidatorTest {
Fixture f = new Fixture("struct s1 { field f1 type string {} field f2 type int {} } field f3 type s1 { indexing: summary }",
"struct s1 { field f1 type int {} field f2 type string {} } field f3 type s1 { indexing: summary }");
f.assertValidation(newRefeedAction("field-type-change",
- ValidationOverrides.empty(),
- "Field 'f3' changed: data type: 's1:{f1:string,f2:int}' -> 's1:{f1:int,f2:string}'"));
+ ValidationOverrides.empty,
+ "Field 'f3' changed: data type: 's1:{f1:string,f2:int}' -> 's1:{f1:int,f2:string}'", Instant.now()));
}
@Test
@@ -182,7 +185,7 @@ public class DocumentTypeChangeValidatorTest {
DocumentTypeChangeValidator validator = new DocumentTypeChangeValidator(
createDocumentTypeWithReferenceField("oldDoc"),
createDocumentTypeWithReferenceField("newDoc"));
- List<VespaConfigChangeAction> result = validator.validate(ValidationOverrides.empty());
+ List<VespaConfigChangeAction> result = validator.validate(ValidationOverrides.empty, Instant.now());
assertEquals(1, result.size());
VespaConfigChangeAction action = result.get(0);
assertTrue(action instanceof VespaRefeedAction);
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeValidatorTest.java
index 4c44dd8141e..3fe3c27a648 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeValidatorTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeValidatorTest.java
@@ -7,6 +7,7 @@ import com.yahoo.vespa.model.application.validation.change.VespaConfigChangeActi
import com.yahoo.vespa.model.application.validation.change.VespaRefeedAction;
import org.junit.Test;
+import java.time.Instant;
import java.util.Arrays;
import java.util.List;
@@ -25,7 +26,7 @@ public class IndexingScriptChangeValidatorTest {
@Override
public List<VespaConfigChangeAction> validate() {
- return validator.validate(ValidationOverrides.empty());
+ return validator.validate(ValidationOverrides.empty, Instant.now());
}
}
@@ -52,10 +53,11 @@ public class IndexingScriptChangeValidatorTest {
private static VespaConfigChangeAction expectedAction(String field, String changedMsg, String fromScript, String toScript) {
return VespaRefeedAction.of("indexing-change",
- ValidationOverrides.empty(),
+ ValidationOverrides.empty,
"Field '" + field + "' changed: " +
(changedMsg.isEmpty() ? "" : changedMsg + ", ") +
- "indexing script: '" + fromScript + "' -> '" + toScript + "'");
+ "indexing script: '" + fromScript + "' -> '" + toScript + "'",
+ Instant.now());
}
@Test