From 1cda0afa21ebc76ee244e748e068e6b90f46357d Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Fri, 16 Jun 2017 09:38:12 +0200 Subject: Keep time outside ValidationOverrides --- .../com/yahoo/config/model/deploy/DeployState.java | 6 +++++- .../main/java/com/yahoo/vespa/model/VespaModel.java | 11 ++++++----- .../model/application/validation/Validation.java | 8 +++++--- .../validation/change/ChangeValidator.java | 4 +++- .../change/ClusterSizeReductionValidator.java | 14 +++++++++----- .../change/ConfigValueChangeValidator.java | 3 ++- .../change/ContainerRestartValidator.java | 4 +++- .../change/ContentClusterRemovalValidator.java | 6 ++++-- .../change/IndexedSearchClusterChangeValidator.java | 20 ++++++++++++-------- .../change/IndexingModeChangeValidator.java | 15 +++++++++------ .../change/StartupCommandChangeValidator.java | 3 ++- .../validation/change/VespaRefeedAction.java | 15 +++++++++------ .../change/search/AttributeChangeValidator.java | 13 +++++++------ .../search/DocumentDatabaseChangeValidator.java | 21 +++++++++++---------- .../change/search/DocumentTypeChangeValidator.java | 6 ++++-- .../search/IndexingScriptChangeValidator.java | 9 +++++---- 16 files changed, 96 insertions(+), 62 deletions(-) (limited to 'config-model/src/main/java') 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 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 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 validate(VespaModel current, VespaModel next, ValidationOverrides overrides); + List 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 validate(VespaModel current, VespaModel next, ValidationOverrides overrides) { + public List 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 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 validate(VespaModel currentModel, VespaModel nextModel, ValidationOverrides ignored) { + public List 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 validate(VespaModel current, VespaModel next, ValidationOverrides overrides) { + public List 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 validate(VespaModel current, VespaModel next, ValidationOverrides overrides) { + public List validate(VespaModel current, VespaModel next, ValidationOverrides overrides, Instant now) { List result = new ArrayList<>(); for (Map.Entry 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 validateContentCluster(ContentCluster currentCluster, ContentCluster nextCluster, - ValidationOverrides overrides) { + ValidationOverrides overrides, + Instant now) { List result = new ArrayList<>(); - result.addAll(validateDocumentDatabases(currentCluster, nextCluster, overrides)); + result.addAll(validateDocumentDatabases(currentCluster, nextCluster, overrides, now)); return result; } private static List validateDocumentDatabases(ContentCluster currentCluster, ContentCluster nextCluster, - ValidationOverrides overrides) { + ValidationOverrides overrides, + Instant now) { List 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 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 validate(VespaModel currentModel, VespaModel nextModel, ValidationOverrides overrides) { + public List validate(VespaModel currentModel, VespaModel nextModel, + ValidationOverrides overrides, Instant now) { List actions = new ArrayList<>(); for (Map.Entry currentEntry : currentModel.getContentClusters().entrySet()) { ContentCluster nextCluster = nextModel.getContentClusters().get(currentEntry.getKey()); if (nextCluster == null) continue; - Optional change = validateContentCluster(currentEntry.getValue(), nextCluster, overrides); + Optional 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 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 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 services, String documentType, boolean allowed) { + private VespaRefeedAction(String name, String message, List 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 services, String documentType) { - return new VespaRefeedAction(name, message, services, documentType, overrides.allows(name)); + List services, String documentType, Instant now) { + return new VespaRefeedAction(name, message, services, documentType, overrides.allows(name, now), now); } @Override public VespaConfigChangeAction modifyAction(String newMessage, List 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 validate(final ValidationOverrides overrides) { + public List validate(ValidationOverrides overrides, Instant now) { List 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 validateTensorTypes(final ValidationOverrides overrides) { + private List validateTensorTypes(final ValidationOverrides overrides, Instant now) { final List 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 validate(final ValidationOverrides overrides) { + public List validate(ValidationOverrides overrides, Instant now) { List 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 validateAttributeChanges(final ValidationOverrides overrides) { + private List 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 validateIndexingScriptChanges(ValidationOverrides overrides) { + private List validateIndexingScriptChanges(ValidationOverrides overrides, Instant now) { return new IndexingScriptChangeValidator(currentDatabase.getDerivedConfiguration().getSearch(), - nextDatabase.getDerivedConfiguration().getSearch()).validate(overrides); + nextDatabase.getDerivedConfiguration().getSearch()).validate(overrides, now); } - private List validateDocumentTypeChanges(ValidationOverrides overrides) { - return new DocumentTypeChangeValidator(currentDocType, nextDocType).validate(overrides); + private List 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 validate(ValidationOverrides overrides) { + public List 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 validate(ValidationOverrides overrides) { + public List validate(ValidationOverrides overrides, Instant now) { List 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 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(); } -- cgit v1.2.3