diff options
author | Jon Bratseth <bratseth@gmail.com> | 2023-01-23 17:39:35 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2023-01-23 17:39:35 +0100 |
commit | db4d7f0f9102c15def5c2ff5aee6378213c409bd (patch) | |
tree | 4254b1ece9c5e9b1d7e4c2cbe8edbfbbc4200d04 /config-model | |
parent | a62da047311d4e70d019455a83b535ed45a9cbc9 (diff) |
Pass DeployState - no functional changes
Diffstat (limited to 'config-model')
30 files changed, 182 insertions, 218 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 54521b946dd..1813e183a60 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 @@ -122,7 +122,8 @@ public class DeployState implements ConfigDefinitionStore { Version wantedNodeVespaVersion, boolean accessLoggingEnabledByDefault, Optional<DockerImage> wantedDockerImageRepo, - Reindexing reindexing) { + Reindexing reindexing, + Optional<ValidationOverrides> validationOverrides) { this.logger = deployLogger; this.fileRegistry = fileRegistry; this.executor = executor; @@ -143,8 +144,8 @@ public class DeployState implements ConfigDefinitionStore { this.semanticRules = semanticRules; // TODO: Remove this by seeing how pagetemplates are propagated this.importedModels = importMlModels(applicationPackage, modelImporters, executor); - this.validationOverrides = applicationPackage.getValidationOverrides().map(ValidationOverrides::fromXml) - .orElse(ValidationOverrides.empty); + this.validationOverrides = validationOverrides.orElse(applicationPackage.getValidationOverrides().map(ValidationOverrides::fromXml) + .orElse(ValidationOverrides.empty)); this.wantedNodeVespaVersion = wantedNodeVespaVersion; this.now = now; @@ -327,9 +328,10 @@ public class DeployState implements ConfigDefinitionStore { private Version wantedNodeVespaVersion = Vtag.currentVersion; private boolean accessLoggingEnabledByDefault = true; private Optional<DockerImage> wantedDockerImageRepo = Optional.empty(); - private Reindexing reindexing = null; private RankProfileRegistry rankProfileRegistry = new RankProfileRegistry(); private QueryProfiles queryProfiles = null; + private Reindexing reindexing = null; + private Optional<ValidationOverrides> validationOverrides = Optional.empty(); public Builder() {} @@ -437,7 +439,15 @@ public class DeployState implements ConfigDefinitionStore { return this; } - public Builder reindexing(Reindexing reindexing) { this.reindexing = Objects.requireNonNull(reindexing); return this; } + public Builder reindexing(Reindexing reindexing) { + this.reindexing = Objects.requireNonNull(reindexing); + return this; + } + + public Builder validationOverrides(ValidationOverrides validationOverrides) { + this.validationOverrides = Optional.of(validationOverrides); + return this; + } public DeployState build() { return build(new ValidationParameters()); @@ -470,7 +480,8 @@ public class DeployState implements ConfigDefinitionStore { wantedNodeVespaVersion, accessLoggingEnabledByDefault, wantedDockerImageRepo, - reindexing); + reindexing, + validationOverrides); } } 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 93a28820125..7b380cd5acf 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 @@ -26,7 +26,7 @@ import com.yahoo.vespa.model.application.validation.change.RedundancyIncreaseVal import com.yahoo.vespa.model.application.validation.change.ResourcesReductionValidator; import com.yahoo.vespa.model.application.validation.change.StartupCommandChangeValidator; import com.yahoo.vespa.model.application.validation.change.StreamingSearchClusterChangeValidator; -import com.yahoo.vespa.model.application.validation.first.RedundancyOnFirstDeploymentValidator; +import com.yahoo.vespa.model.application.validation.first.RedundancyValidator; import java.time.Instant; import java.util.Arrays; @@ -98,8 +98,7 @@ public class Validation { } else { Optional<Model> currentActiveModel = deployState.getPreviousModel(); if (currentActiveModel.isPresent() && (currentActiveModel.get() instanceof VespaModel)) { - result = validateChanges((VespaModel) currentActiveModel.get(), model, - deployState.validationOverrides(), deployState.getDeployLogger(), deployState.now()); + result = validateChanges((VespaModel) currentActiveModel.get(), model, deployState); deferConfigChangesForClustersToBeRestarted(result, model); } } @@ -107,14 +106,13 @@ public class Validation { } private static List<ConfigChangeAction> validateChanges(VespaModel currentModel, VespaModel nextModel, - ValidationOverrides overrides, DeployLogger logger, - Instant now) { + DeployState deployState) { ChangeValidator[] validators = new ChangeValidator[] { new IndexingModeChangeValidator(), new GlobalDocumentChangeValidator(), new IndexedSearchClusterChangeValidator(), new StreamingSearchClusterChangeValidator(), - new ConfigValueChangeValidator(logger), + new ConfigValueChangeValidator(), new StartupCommandChangeValidator(), new ContentTypeRemovalValidator(), new ContentClusterRemovalValidator(), @@ -124,10 +122,11 @@ public class Validation { new NodeResourceChangeValidator(), new RedundancyIncreaseValidator(), new CloudAccountChangeValidator(), - new CertificateRemovalChangeValidator() + new CertificateRemovalChangeValidator(), + new RedundancyValidator() }; List<ConfigChangeAction> actions = Arrays.stream(validators) - .flatMap(v -> v.validate(currentModel, nextModel, overrides, now).stream()) + .flatMap(v -> v.validate(currentModel, nextModel, deployState).stream()) .toList(); Map<ValidationId, Collection<String>> disallowableActions = actions.stream() @@ -135,12 +134,12 @@ public class Validation { .collect(groupingBy(action -> action.validationId().orElseThrow(), mapping(ConfigChangeAction::getMessage, toCollection(LinkedHashSet::new)))); - overrides.invalid(disallowableActions, now); + deployState.validationOverrides().invalid(disallowableActions, deployState.now()); return actions; } private static void validateFirstTimeDeployment(VespaModel model, DeployState deployState) { - new RedundancyOnFirstDeploymentValidator().validate(model, deployState); + new RedundancyValidator().validate(model, deployState); } private static void deferConfigChangesForClustersToBeRestarted(List<ConfigChangeAction> actions, VespaModel model) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/CertificateRemovalChangeValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/CertificateRemovalChangeValidator.java index b225c25a8d3..6f80c3da469 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/CertificateRemovalChangeValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/CertificateRemovalChangeValidator.java @@ -2,13 +2,12 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.application.api.ValidationId; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.model.api.ConfigChangeAction; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.container.http.Client; import java.security.cert.X509Certificate; -import java.time.Instant; import java.util.Collection; import java.util.List; import java.util.logging.Level; @@ -25,19 +24,22 @@ public class CertificateRemovalChangeValidator implements ChangeValidator { private static final Logger logger = Logger.getLogger(CertificateRemovalChangeValidator.class.getName()); @Override - public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides, Instant now) { + public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, DeployState deployState) { // Skip for tester applications if (current.applicationPackage().getApplicationId().instance().isTester()) return List.of(); current.getContainerClusters() .forEach((clusterId, currentCluster) -> { if(next.getContainerClusters().containsKey(clusterId)) - validateClients(clusterId, currentCluster.getClients(), next.getContainerClusters().get(clusterId).getClients(), overrides, now); + validateClients(clusterId, + currentCluster.getClients(), + next.getContainerClusters().get(clusterId).getClients(), + deployState); }); return List.of(); } - void validateClients(String clusterId, List<Client> current, List<Client> next, ValidationOverrides overrides, Instant now) { + void validateClients(String clusterId, List<Client> current, List<Client> next, DeployState deployState) { List<X509Certificate> currentCertificates = current.stream() .filter(client -> !client.internal()) .map(Client::certificates) @@ -56,11 +58,11 @@ public class CertificateRemovalChangeValidator implements ChangeValidator { List<X509Certificate> missingCerts = currentCertificates.stream().filter(cert -> !nextCertificates.contains(cert)).toList(); if (!missingCerts.isEmpty()) { - overrides.invalid(ValidationId.certificateRemoval, + deployState.validationOverrides().invalid(ValidationId.certificateRemoval, "Data plane certificate(s) from cluster '" + clusterId + "' is removed " + "(removed certificates: " + missingCerts.stream().map(x509Certificate -> x509Certificate.getSubjectX500Principal().getName()).toList() + ") " + "This can cause client connection issues.", - now); + deployState.now()); } } 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 772b6a37b02..9992fa37e45 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 @@ -2,6 +2,7 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.model.api.ConfigChangeAction; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.vespa.model.VespaModel; import com.yahoo.config.application.api.ValidationOverrides; @@ -21,12 +22,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 * @throws IllegalArgumentException if the change fails validation */ - List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides, Instant now); + List<ConfigChangeAction> validate(VespaModel current, VespaModel next, DeployState deployState); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/CloudAccountChangeValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/CloudAccountChangeValidator.java index ba8a8819c5b..c55cfbc5075 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/CloudAccountChangeValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/CloudAccountChangeValidator.java @@ -1,14 +1,13 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.application.validation.change; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.model.api.ConfigChangeAction; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.CloudAccount; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.vespa.model.VespaModel; -import java.time.Instant; import java.util.List; /** @@ -17,7 +16,7 @@ import java.util.List; public class CloudAccountChangeValidator implements ChangeValidator { @Override - public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides, Instant now) { + public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, DeployState deployState) { for (var clusterId : current.allClusters()) { CloudAccount currentAccount = cloudAccountOf(current, clusterId); CloudAccount nextAccount = cloudAccountOf(next, clusterId); 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 14fb903a547..353be99cfa9 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 @@ -2,13 +2,12 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.model.api.ConfigChangeAction; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.vespa.model.VespaModel; import com.yahoo.config.application.api.ValidationId; -import com.yahoo.config.application.api.ValidationOverrides; -import java.time.Instant; import java.util.List; /** @@ -19,34 +18,26 @@ import java.util.List; public class ClusterSizeReductionValidator implements ChangeValidator { @Override - public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides, Instant now) { + public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, DeployState deployState) { for (var clusterId : current.allClusters()) { Capacity currentCapacity = current.provisioned().all().get(clusterId); Capacity nextCapacity = next.provisioned().all().get(clusterId); if (currentCapacity == null || nextCapacity == null) continue; - validate(currentCapacity, - nextCapacity, - clusterId, - overrides, - now); + validate(currentCapacity, nextCapacity, clusterId, deployState); } return List.of(); } - private void validate(Capacity current, - Capacity next, - ClusterSpec.Id clusterId, - ValidationOverrides overrides, - Instant now) { + private void validate(Capacity current, Capacity next, ClusterSpec.Id clusterId, DeployState deployState) { int currentSize = current.minResources().nodes(); int nextSize = next.minResources().nodes(); // don't allow more than 50% reduction, but always allow to reduce size with 1 if ( nextSize < currentSize * 0.5 && nextSize != currentSize - 1) - overrides.invalid(ValidationId.clusterSizeReduction, + deployState.validationOverrides().invalid(ValidationId.clusterSizeReduction, "Size reduction in '" + clusterId.value() + "' is too large: " + "New min size must be at least 50% of the current min size. " + "Current size: " + currentSize + ", new size: " + nextSize, - now); + deployState.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 077855b4b23..84730a18265 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 @@ -4,8 +4,8 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.ChangesRequiringRestart; import com.yahoo.config.ConfigInstance; import com.yahoo.config.application.api.DeployLogger; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.model.api.ConfigChangeAction; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducerRoot; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.vespa.model.Service; @@ -13,12 +13,10 @@ import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.application.validation.RestartConfigs; import com.yahoo.vespa.model.utils.internal.ReflectionUtil; -import java.time.Instant; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.logging.Level; -import java.util.stream.Collectors; import java.util.stream.Stream; import static java.util.stream.Collectors.joining; @@ -32,31 +30,26 @@ import static java.util.stream.Collectors.joining; */ public class ConfigValueChangeValidator implements ChangeValidator { - private final DeployLogger logger; - - public ConfigValueChangeValidator(DeployLogger logger) { - this.logger = logger; - } - /** 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, Instant now) { - return findConfigChangesFromModels(currentModel, nextModel).toList(); + public List<ConfigChangeAction> validate(VespaModel currentModel, VespaModel nextModel, DeployState deployState) { + return findConfigChangesFromModels(currentModel, nextModel, deployState.getDeployLogger()).toList(); } public Stream<ConfigChangeAction> findConfigChangesFromModels(AbstractConfigProducerRoot currentModel, - AbstractConfigProducerRoot nextModel) { + AbstractConfigProducerRoot nextModel, + DeployLogger logger) { return nextModel.getDescendantServices().stream() - .map(service -> findConfigChangeActionForService(service, currentModel, nextModel)) + .map(service -> findConfigChangeActionForService(service, currentModel, nextModel, logger)) .filter(Optional::isPresent) .map(Optional::get); } private Optional<ConfigChangeAction> findConfigChangeActionForService(Service service, AbstractConfigProducerRoot currentModel, - AbstractConfigProducerRoot nextModel) { - List<ChangesRequiringRestart> changes = findConfigChangesForService(service, currentModel, nextModel) + AbstractConfigProducerRoot nextModel, + DeployLogger logger) { + List<ChangesRequiringRestart> changes = findConfigChangesForService(service, currentModel, nextModel, logger) .toList(); if (changes.isEmpty()) { return Optional.empty(); @@ -70,14 +63,15 @@ public class ConfigValueChangeValidator implements ChangeValidator { private Stream<ChangesRequiringRestart> findConfigChangesForService(Service service, AbstractConfigProducerRoot currentModel, - AbstractConfigProducerRoot nextModel) { + AbstractConfigProducerRoot nextModel, + DeployLogger logger) { Class<? extends Service> serviceClass = service.getClass(); if (!currentModel.getService(service.getConfigId()).isPresent()) { // Service does not exist in the current model. return Stream.empty(); } return getConfigInstancesFromServiceAnnotations(serviceClass) - .map(configClass -> compareConfigFromCurrentAndNextModel(service, configClass, currentModel, nextModel)) + .map(configClass -> compareConfigFromCurrentAndNextModel(service, configClass, currentModel, nextModel, logger)) .filter(Optional::isPresent) .map(Optional::get) .filter(ChangesRequiringRestart::needsRestart); @@ -114,9 +108,11 @@ public class ConfigValueChangeValidator implements ChangeValidator { .distinct(); } - private Optional<ChangesRequiringRestart> compareConfigFromCurrentAndNextModel( - Service service, Class<? extends ConfigInstance> configClass, - AbstractConfigProducerRoot currentModel, AbstractConfigProducerRoot nextModel) { + private Optional<ChangesRequiringRestart> compareConfigFromCurrentAndNextModel(Service service, + Class<? extends ConfigInstance> configClass, + AbstractConfigProducerRoot currentModel, + AbstractConfigProducerRoot nextModel, + DeployLogger logger) { if (!hasConfigFieldsFlaggedWithRestart(configClass, service.getClass())) { logger.logApplicationPackage(Level.FINE, String.format("%s is listed in the annotation for %s, " + 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 3a0b1348d7e..0703d4fa3d6 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 @@ -2,18 +2,16 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.model.api.ConfigChangeAction; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.container.QrConfig; import com.yahoo.vespa.model.VespaModel; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.vespa.model.container.ApplicationContainer; import com.yahoo.vespa.model.container.Container; import com.yahoo.vespa.model.container.ContainerCluster; -import java.time.Instant; import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; /** * Returns a restart action for each container that has turned on {@link QrConfig#restartOnDeploy()}. @@ -23,8 +21,7 @@ import java.util.stream.Collectors; public class ContainerRestartValidator implements ChangeValidator { @Override - public List<ConfigChangeAction> validate(VespaModel currentModel, VespaModel nextModel, ValidationOverrides ignored, - Instant now) { + public List<ConfigChangeAction> validate(VespaModel currentModel, VespaModel nextModel, DeployState deployState) { List<ConfigChangeAction> actions = new ArrayList<>(); for (ContainerCluster<ApplicationContainer> cluster : nextModel.getContainerClusters().values()) { actions.addAll(cluster.getContainers().stream() 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 c33b349ced7..0cc52edf3cc 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 @@ -2,12 +2,11 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.model.api.ConfigChangeAction; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.vespa.model.VespaModel; 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.List; /** @@ -19,14 +18,14 @@ import java.util.List; public class ContentClusterRemovalValidator implements ChangeValidator { @Override - public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides, Instant now) { + public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, DeployState deployState) { for (String currentClusterId : current.getContentClusters().keySet()) { ContentCluster nextCluster = next.getContentClusters().get(currentClusterId); if (nextCluster == null) - overrides.invalid(ValidationId.contentClusterRemoval, + deployState.validationOverrides().invalid(ValidationId.contentClusterRemoval, "Content cluster '" + currentClusterId + "' is removed. " + "This will cause loss of all data in this cluster", - now); + deployState.now()); } return List.of(); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContentTypeRemovalValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContentTypeRemovalValidator.java index b6b62ec3ac0..396cd471ca5 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContentTypeRemovalValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ContentTypeRemovalValidator.java @@ -2,13 +2,12 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.application.api.ValidationId; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.model.api.ConfigChangeAction; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.documentmodel.NewDocumentType; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.content.cluster.ContentCluster; -import java.time.Instant; import java.util.List; /** @@ -20,18 +19,18 @@ import java.util.List; public class ContentTypeRemovalValidator implements ChangeValidator { @Override - public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides, Instant now) { + public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, DeployState deployState) { for (ContentCluster currentCluster : current.getContentClusters().values()) { ContentCluster nextCluster = next.getContentClusters().get(currentCluster.getSubId()); if (nextCluster == null) continue; // validated elsewhere for (NewDocumentType type : currentCluster.getDocumentDefinitions().values()) { if ( ! nextCluster.getDocumentDefinitions().containsKey(type.getName())) { - overrides.invalid(ValidationId.contentTypeRemoval, + deployState.validationOverrides().invalid(ValidationId.contentTypeRemoval, "Schema '" + type.getName() + "' is removed " + "in content cluster '" + currentCluster.getName() + "'. " + "This will cause loss of all data in this schema", - now); + deployState.now()); } } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/GlobalDocumentChangeValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/GlobalDocumentChangeValidator.java index 43b5e646cc5..fe85da584c8 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/GlobalDocumentChangeValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/GlobalDocumentChangeValidator.java @@ -2,13 +2,12 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.application.api.ValidationId; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.model.api.ConfigChangeAction; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.documentmodel.NewDocumentType; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.content.cluster.ContentCluster; -import java.time.Instant; import java.util.List; import java.util.Map; @@ -19,9 +18,8 @@ import java.util.Map; public class GlobalDocumentChangeValidator implements ChangeValidator { @Override - public List<ConfigChangeAction> validate(VespaModel currentModel, VespaModel nextModel, - ValidationOverrides overrides, Instant now) { - if (!overrides.allows(ValidationId.globalDocumentChange.value(), now)) { + public List<ConfigChangeAction> validate(VespaModel currentModel, VespaModel nextModel, DeployState deployState) { + if (!deployState.validationOverrides().allows(ValidationId.globalDocumentChange.value(), deployState.now())) { for (Map.Entry<String, ContentCluster> currentEntry : currentModel.getContentClusters().entrySet()) { ContentCluster nextCluster = nextModel.getContentClusters().get(currentEntry.getKey()); if (nextCluster == null) continue; 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 778ae604333..0a50c050b0b 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 @@ -3,6 +3,7 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.model.api.ConfigChangeAction; import com.yahoo.config.model.api.ServiceInfo; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.documentmodel.NewDocumentType; import com.yahoo.vespa.model.VespaModel; import com.yahoo.config.application.api.ValidationOverrides; @@ -27,13 +28,12 @@ import java.util.stream.Collectors; public class IndexedSearchClusterChangeValidator implements ChangeValidator { @Override - public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, - ValidationOverrides overrides, Instant now) { + public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, DeployState deployState) { 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, now)); + result.addAll(validateContentCluster(currentEntry.getValue(), nextCluster, deployState)); } } return result; @@ -41,15 +41,13 @@ public class IndexedSearchClusterChangeValidator implements ChangeValidator { private static List<ConfigChangeAction> validateContentCluster(ContentCluster currentCluster, ContentCluster nextCluster, - ValidationOverrides overrides, - Instant now) { - return validateDocumentDatabases(currentCluster, nextCluster, overrides, now); + DeployState deployState) { + return validateDocumentDatabases(currentCluster, nextCluster, deployState); } private static List<ConfigChangeAction> validateDocumentDatabases(ContentCluster currentCluster, ContentCluster nextCluster, - ValidationOverrides overrides, - Instant now) { + DeployState deployState) { List<ConfigChangeAction> result = new ArrayList<>(); for (DocumentDatabase currentDb : getDocumentDbs(currentCluster.getSearch())) { String docTypeName = currentDb.getName(); @@ -57,7 +55,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, now)); + currentDb, nextDb.get(), deployState)); } } return result; @@ -68,8 +66,7 @@ public class IndexedSearchClusterChangeValidator implements ChangeValidator { String docTypeName, DocumentDatabase currentDb, DocumentDatabase nextDb, - ValidationOverrides overrides, - Instant now) { + DeployState deployState) { NewDocumentType currentDocType = currentCluster.getDocumentDefinitions().get(docTypeName); NewDocumentType nextDocType = nextCluster.getDocumentDefinitions().get(docTypeName); List<VespaConfigChangeAction> result = @@ -78,8 +75,7 @@ public class IndexedSearchClusterChangeValidator implements ChangeValidator { currentDocType, nextDb, nextDocType, - overrides, - now).validate(); + deployState).validate(); 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 4acdda03166..b7e63fa4904 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 @@ -2,16 +2,15 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.application.api.ValidationId; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.model.api.ConfigChangeAction; import com.yahoo.config.model.api.ServiceInfo; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.documentmodel.NewDocumentType; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.content.ContentSearchCluster; import com.yahoo.vespa.model.content.cluster.ContentCluster; import com.yahoo.vespa.model.search.SearchNode; -import java.time.Instant; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; @@ -28,8 +27,7 @@ import java.util.stream.Collectors; public class IndexingModeChangeValidator implements ChangeValidator { @Override - public List<ConfigChangeAction> validate(VespaModel currentModel, VespaModel nextModel, - ValidationOverrides overrides, Instant now) { + public List<ConfigChangeAction> validate(VespaModel currentModel, VespaModel nextModel, DeployState deployState) { List<ConfigChangeAction> actions = new ArrayList<>(); for (Map.Entry<String, ContentCluster> currentEntry : currentModel.getContentClusters().entrySet()) { ContentCluster nextCluster = nextModel.getContentClusters().get(currentEntry.getKey()); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/NodeResourceChangeValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/NodeResourceChangeValidator.java index 490fea40fab..7979c3c8069 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/NodeResourceChangeValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/NodeResourceChangeValidator.java @@ -1,8 +1,8 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.application.validation.change; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.model.api.ConfigChangeAction; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.HostSpec; import com.yahoo.config.provision.NodeResources; @@ -10,7 +10,6 @@ import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.container.ApplicationContainerCluster; import com.yahoo.vespa.model.content.cluster.ContentCluster; -import java.time.Instant; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -19,7 +18,7 @@ import java.util.stream.Collectors; /** * Emits restart change actions for clusters where the node resources are changed in a way * which requires a "restart" (container recreation) to take effect. - * Nodes will restart on their own on this condition but we want to emit restart actions to + * Nodes will restart on their own on this condition, but we want to emit restart actions to * defer applying new config until restart. * * @author bratseth @@ -27,7 +26,7 @@ import java.util.stream.Collectors; public class NodeResourceChangeValidator implements ChangeValidator { @Override - public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides, Instant now) { + public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, DeployState deployState) { var restartActions = new ArrayList<ConfigChangeAction>(); for (ClusterSpec.Id clusterId : current.allClusters()) { Optional<NodeResources> currentResources = resourcesOf(clusterId, current); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/RedundancyIncreaseValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/RedundancyIncreaseValidator.java index beea302d23d..82ad8e5d6e8 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/RedundancyIncreaseValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/RedundancyIncreaseValidator.java @@ -2,34 +2,33 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.application.api.ValidationId; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.model.api.ConfigChangeAction; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.content.cluster.ContentCluster; -import java.time.Instant; import java.util.List; /** * Checks that redundancy is not increased (without a validation override), - * as that may easily cause the cluster to run out of reasources. + * as that may easily cause the cluster to run out of resources. * * @author bratseth */ public class RedundancyIncreaseValidator implements ChangeValidator { @Override - public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides, Instant now) { + public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, DeployState deployState) { for (ContentCluster currentCluster : current.getContentClusters().values()) { ContentCluster nextCluster = next.getContentClusters().get(currentCluster.getSubId()); if (nextCluster == null) continue; if (redundancyOf(nextCluster) > redundancyOf(currentCluster)) { - overrides.invalid(ValidationId.redundancyIncrease, + deployState.validationOverrides().invalid(ValidationId.redundancyIncrease, "Increasing redundancy from " + redundancyOf(currentCluster) + " to " + redundancyOf(nextCluster) + " in '" + currentCluster + ". " + "This is a safe operation but verify that you have room for a " + redundancyOf(nextCluster) + "/" + redundancyOf(currentCluster) + "x increase " + "in content size", - now); + deployState.now()); } } return List.of(); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ResourcesReductionValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ResourcesReductionValidator.java index 6486b5aff1b..b27266221d2 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ResourcesReductionValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/ResourcesReductionValidator.java @@ -2,17 +2,15 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.application.api.ValidationId; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.model.api.ConfigChangeAction; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.vespa.model.VespaModel; -import java.time.Instant; import java.util.List; import java.util.Locale; import java.util.Optional; -import java.util.stream.Collectors; import java.util.stream.Stream; /** @@ -23,22 +21,18 @@ import java.util.stream.Stream; public class ResourcesReductionValidator implements ChangeValidator { @Override - public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides, Instant now) { + public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, DeployState deployState) { for (var clusterId : current.allClusters()) { Capacity currentCapacity = current.provisioned().all().get(clusterId); Capacity nextCapacity = next.provisioned().all().get(clusterId); if (currentCapacity == null || nextCapacity == null) continue; - validate(currentCapacity, nextCapacity, clusterId, overrides, now); + validate(currentCapacity, nextCapacity, clusterId, deployState); } return List.of(); } - private void validate(Capacity current, - Capacity next, - ClusterSpec.Id clusterId, - ValidationOverrides overrides, - Instant now) { + private void validate(Capacity current, Capacity next, ClusterSpec.Id clusterId, DeployState deployState) { if (current.minResources().nodeResources().isUnspecified()) return; if (next.minResources().nodeResources().isUnspecified()) return; @@ -56,11 +50,11 @@ public class ResourcesReductionValidator implements ChangeValidator { .toList(); if (illegalChanges.isEmpty()) return; - overrides.invalid(ValidationId.resourcesReduction, + deployState.validationOverrides().invalid(ValidationId.resourcesReduction, "Resource reduction in '" + clusterId.value() + "' is too large. " + String.join(" ", illegalChanges) + " New min resources must be at least 50% of the current min resources", - now); + deployState.now()); } private static Optional<String> validateResource(String resourceName, double currentValue, double nextValue) { 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 1f5a54d6b0f..9ccedc4f5c4 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 @@ -2,17 +2,15 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.model.api.ConfigChangeAction; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducerRoot; import com.yahoo.config.provision.ClusterSpec; 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; -import java.util.stream.Collectors; import java.util.stream.Stream; /** @@ -24,8 +22,7 @@ import java.util.stream.Stream; public class StartupCommandChangeValidator implements ChangeValidator { @Override - public List<ConfigChangeAction> validate(VespaModel currentModel, VespaModel nextModel, - ValidationOverrides overrides, Instant now) { + public List<ConfigChangeAction> validate(VespaModel currentModel, VespaModel nextModel, DeployState deployState) { return findServicesWithChangedStartupCommand(currentModel, nextModel).toList(); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/StreamingSearchClusterChangeValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/StreamingSearchClusterChangeValidator.java index 83d723398a6..ffab63740b9 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/StreamingSearchClusterChangeValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/StreamingSearchClusterChangeValidator.java @@ -1,9 +1,9 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.application.validation.change; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.model.api.ConfigChangeAction; import com.yahoo.config.model.api.ServiceInfo; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.documentmodel.NewDocumentType; import com.yahoo.schema.derived.AttributeFields; @@ -15,7 +15,6 @@ import com.yahoo.vespa.model.application.validation.change.search.DocumentTypeCh import com.yahoo.vespa.model.content.cluster.ContentCluster; import com.yahoo.vespa.model.search.StreamingSearchCluster; -import java.time.Instant; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -29,7 +28,7 @@ import java.util.stream.Collectors; public class StreamingSearchClusterChangeValidator implements ChangeValidator { @Override - public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, ValidationOverrides overrides, Instant now) { + public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, DeployState deployState) { List<ConfigChangeAction> result = new ArrayList<>(); current.getContentClusters().forEach((clusterName, currentCluster) -> { ContentCluster nextCluster = next.getContentClusters().get(clusterName); 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 838c96a8249..f23a7720157 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 @@ -2,7 +2,7 @@ package com.yahoo.vespa.model.application.validation.change.search; import com.yahoo.config.application.api.ValidationId; -import com.yahoo.config.application.api.ValidationOverrides; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.documentmodel.NewDocumentType; import com.yahoo.schema.derived.AttributeFields; @@ -14,7 +14,6 @@ import com.yahoo.schema.document.HnswIndexParams; import com.yahoo.vespa.model.application.validation.change.VespaConfigChangeAction; 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; @@ -36,8 +35,7 @@ public class AttributeChangeValidator { private final AttributeFields nextFields; private final IndexSchema nextIndexSchema; private final NewDocumentType nextDocType; - private final ValidationOverrides overrides; - private final Instant now; + private final DeployState deployState; public AttributeChangeValidator(ClusterSpec.Id id, AttributeFields currentFields, @@ -46,8 +44,7 @@ public class AttributeChangeValidator { AttributeFields nextFields, IndexSchema nextIndexSchema, NewDocumentType nextDocType, - ValidationOverrides overrides, - Instant now) { + DeployState deployState) { this.id = id; this.currentFields = currentFields; this.currentIndexSchema = currentIndexSchema; @@ -55,8 +52,7 @@ public class AttributeChangeValidator { this.nextFields = nextFields; this.nextIndexSchema = nextIndexSchema; this.nextDocType = nextDocType; - this.overrides = overrides; - this.now = now; + this.deployState = deployState; } public List<VespaConfigChangeAction> validate() { @@ -167,10 +163,10 @@ public class AttributeChangeValidator { private void validatePagedAttributeRemoval(Attribute current, Attribute next) { if (current.isPaged() && !next.isPaged()) { - overrides.invalid(ValidationId.pagedSettingRemoval, + deployState.validationOverrides().invalid(ValidationId.pagedSettingRemoval, current + "' has setting 'paged' removed. " + "This may cause content nodes to run out of memory as the entire attribute is loaded into memory", - now); + deployState.now()); } } 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 55fc268e805..bbe79f0ecc8 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 @@ -1,13 +1,12 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.application.validation.change.search; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.documentmodel.NewDocumentType; -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; @@ -23,23 +22,20 @@ public class DocumentDatabaseChangeValidator { private final NewDocumentType currentDocType; private final DocumentDatabase nextDatabase; private final NewDocumentType nextDocType; - private final ValidationOverrides overrides; - private final Instant now; + private final DeployState deployState; public DocumentDatabaseChangeValidator(ClusterSpec.Id id, DocumentDatabase currentDatabase, NewDocumentType currentDocType, DocumentDatabase nextDatabase, NewDocumentType nextDocType, - ValidationOverrides overrides, - Instant now) { + DeployState deployState) { this.id = id; this.currentDatabase = currentDatabase; this.currentDocType = currentDocType; this.nextDatabase = nextDatabase; this.nextDocType = nextDocType; - this.overrides = overrides; - this.now = now; + this.deployState = deployState; } public List<VespaConfigChangeAction> validate() { @@ -57,7 +53,7 @@ public class DocumentDatabaseChangeValidator { currentDatabase.getDerivedConfiguration().getIndexSchema(), currentDocType, nextDatabase.getDerivedConfiguration().getAttributeFields(), nextDatabase.getDerivedConfiguration().getIndexSchema(), nextDocType, - overrides, now) + deployState) .validate(); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/first/RedundancyOnFirstDeploymentValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/first/RedundancyValidator.java index b0cfc832389..87a6e540a4d 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/first/RedundancyOnFirstDeploymentValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/first/RedundancyValidator.java @@ -2,18 +2,25 @@ package com.yahoo.vespa.model.application.validation.first; import com.yahoo.config.application.api.ValidationId; +import com.yahoo.config.application.api.ValidationOverrides; +import com.yahoo.config.model.api.ConfigChangeAction; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.application.validation.Validator; +import com.yahoo.vespa.model.application.validation.change.ChangeValidator; import com.yahoo.vespa.model.content.cluster.ContentCluster; +import java.time.Instant; +import java.util.List; + /** * Validates that applications in prod zones do not have redundancy 1 (without a validation override). * * @author bratseth */ -public class RedundancyOnFirstDeploymentValidator extends Validator { +public class RedundancyValidator extends Validator implements ChangeValidator { + /** Validate on first deployment. */ @Override public void validate(VespaModel model, DeployState deployState) { if ( ! deployState.isHosted()) return; @@ -29,4 +36,10 @@ public class RedundancyOnFirstDeploymentValidator extends Validator { } } + /** Validate on change. */ + @Override + public List<ConfigChangeAction> validate(VespaModel current, VespaModel next, DeployState deployState) { + return List.of(); + } + } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/CertificateRemovalChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/CertificateRemovalChangeValidatorTest.java index 6b6621239b0..b955ada20d9 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/CertificateRemovalChangeValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/CertificateRemovalChangeValidatorTest.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.application.api.ValidationOverrides; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.security.X509CertificateUtils; import com.yahoo.vespa.model.container.http.Client; import org.junit.jupiter.api.Test; @@ -38,18 +39,22 @@ public class CertificateRemovalChangeValidatorTest { CertificateRemovalChangeValidator validator = new CertificateRemovalChangeValidator(); // Adding certs -> ok - validator.validateClients("clusterId", List.of(c1, c2), List.of(c1, c2, c3), ValidationOverrides.empty, now); + validator.validateClients("clusterId", List.of(c1, c2), List.of(c1, c2, c3), new DeployState.Builder().now(now).build()); // Removing certs -> fails assertThrows(ValidationOverrides.ValidationException.class, - () ->validator.validateClients("clusterId", List.of(c1, c2, c3), List.of(c1, c3), ValidationOverrides.empty, now)); + () ->validator.validateClients("clusterId", List.of(c1, c2, c3), List.of(c1, c3), + new DeployState.Builder().now(now).build())); // Removing certs with validationoverrides -> ok - validator.validateClients("clusterId", List.of(c1, c2, c3), List.of(c1, c3), ValidationOverrides.fromXml(validationOverrides), now); + validator.validateClients("clusterId", List.of(c1, c2, c3), List.of(c1, c3), + new DeployState.Builder().now(now).validationOverrides(ValidationOverrides.fromXml(validationOverrides)).build()); // Adding and removing internal certs are ok: - validator.validateClients("clusterId", List.of(c1, c2), List.of(c1, c2, internal), ValidationOverrides.empty, now); - validator.validateClients("clusterId", List.of(c1, c2, internal), List.of(c1, c2), ValidationOverrides.empty, now); + validator.validateClients("clusterId", List.of(c1, c2), List.of(c1, c2, internal), + new DeployState.Builder().build()); + validator.validateClients("clusterId", List.of(c1, c2, internal), List.of(c1, c2), + new DeployState.Builder().now(now).build()); } static X509Certificate certificate(String cn) { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/CloudAccountChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/CloudAccountChangeValidatorTest.java index aa16927777c..fcc8c82a6e9 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/CloudAccountChangeValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/CloudAccountChangeValidatorTest.java @@ -1,7 +1,6 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.provision.IntRange; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.model.api.Provisioned; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.deploy.TestProperties; @@ -14,7 +13,6 @@ import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithMockPkg; import org.junit.jupiter.api.Test; -import java.time.Instant; import java.util.List; import java.util.Optional; @@ -33,15 +31,15 @@ class CloudAccountChangeValidatorTest { CloudAccountChangeValidator validator = new CloudAccountChangeValidator(); try { - validator.validate(model0, model1, ValidationOverrides.empty, Instant.now()); + validator.validate(model0, model1, new DeployState.Builder().build()); fail("Expected exception"); } catch (IllegalArgumentException e) { assertEquals(e.getMessage(), "Cannot change cloud account from unspecified account to " + "account '000000000000'. The existing deployment must be removed before " + "changing accounts"); } - assertEquals(List.of(), validator.validate(model0, model0, ValidationOverrides.empty, Instant.now())); - assertEquals(List.of(), validator.validate(model1, model1, ValidationOverrides.empty, Instant.now())); + assertEquals(List.of(), validator.validate(model0, model0, new DeployState.Builder().build())); + assertEquals(List.of(), validator.validate(model1, model1, new DeployState.Builder().build())); } private static Provisioned provisioned(Capacity... capacity) { 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 9705bc83e2b..069bf429b41 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 @@ -1,6 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.application.validation.change; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.test.AnotherrestartConfig; import com.yahoo.config.ConfigInstance; import com.yahoo.test.RestartConfig; @@ -15,14 +16,11 @@ import com.yahoo.vespa.model.HostResource; import com.yahoo.vespa.model.PortAllocBridge; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.application.validation.RestartConfigs; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.vespa.model.test.utils.DeployLoggerStub; import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithMockPkg; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.Instant; -import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -49,7 +47,7 @@ public class ConfigValueChangeValidatorTest { * {@link com.yahoo.vespa.model.application.validation.RestartConfigs} attribute. * 3) That the config ids for the container services have a specific value. * - * This test will to a certain degree ensure that the annotations in the VespaModel is correctly applied. + * This test will to a certain degree ensure that the annotations in the VespaModel is correctly applied. */ @Test void requireThatValidatorHandlesVespaModel() { @@ -66,8 +64,8 @@ public class ConfigValueChangeValidatorTest { @Test void requireThatDocumentTypesCanBeAddedWithoutNeedForRestart() { List<ConfigChangeAction> changes = getConfigChanges( - createVespaModel("", Arrays.asList("foo")), - createVespaModel("", Arrays.asList("foo", "bar"))); + createVespaModel("", List.of("foo")), + createVespaModel("", List.of("foo", "bar"))); assertEquals(0, changes.size()); } @@ -154,14 +152,14 @@ public class ConfigValueChangeValidatorTest { } private List<ConfigChangeAction> getConfigChanges(VespaModel currentModel, VespaModel nextModel) { - ConfigValueChangeValidator validator = new ConfigValueChangeValidator(logger); - return validator.validate(currentModel, nextModel, ValidationOverrides.empty, Instant.now()); + ConfigValueChangeValidator validator = new ConfigValueChangeValidator(); + return validator.validate(currentModel, nextModel, new DeployState.Builder().deployLogger(logger).build()); } private List<ConfigChangeAction> getConfigChanges(AbstractConfigProducerRoot currentModel, AbstractConfigProducerRoot nextModel) { - ConfigValueChangeValidator validator = new ConfigValueChangeValidator(logger); - return validator.findConfigChangesFromModels(currentModel, nextModel).toList(); + ConfigValueChangeValidator validator = new ConfigValueChangeValidator(); + return validator.findConfigChangesFromModels(currentModel, nextModel, logger).toList(); } private static void assertComponentsEquals(List<ConfigChangeAction> changes, String name, int index) { @@ -173,7 +171,7 @@ public class ConfigValueChangeValidatorTest { } private static VespaModel createVespaModel(String configSegment) { - return createVespaModel(configSegment, Arrays.asList("music")); + return createVespaModel(configSegment, List.of("music")); } private static VespaModel createVespaModel(String configSegment, List<String> docTypes) { @@ -233,7 +231,7 @@ public class ConfigValueChangeValidatorTest { private static MockRoot createRootWithChildren(AbstractConfigProducer<?>... children) { MockRoot root = new MockRoot(); - Arrays.asList(children).forEach(root::addChild); + List.of(children).forEach(root::addChild); root.freezeModelTopology(); return root; } @@ -269,7 +267,7 @@ public class ConfigValueChangeValidatorTest { } public SimpleConfigProducer withChildren(AbstractConfigProducer<?>... producer) { - Arrays.asList(producer).forEach(this::addChild); + List.of(producer).forEach(this::addChild); return this; } } @@ -323,5 +321,6 @@ public class ConfigValueChangeValidatorTest { super(name); } } + } 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 e3d6b1ac965..c034944c8ae 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 @@ -2,14 +2,12 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.model.api.ConfigChangeAction; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.vespa.defaults.Defaults; import com.yahoo.vespa.model.VespaModel; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithMockPkg; import org.junit.jupiter.api.Test; -import java.time.Instant; -import java.util.Collections; import java.util.List; import static org.junit.jupiter.api.Assertions.*; @@ -57,8 +55,7 @@ public class ContainerRestartValidatorTest { } private static List<ConfigChangeAction> validateModel(VespaModel current, VespaModel next) { - return new ContainerRestartValidator() - .validate(current, next, new ValidationOverrides(Collections.emptyList()), Instant.now()); + return new ContainerRestartValidator().validate(current, next, new DeployState.Builder().build()); } private static VespaModel createModel(boolean restartOnDeploy) { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexedSchemaClusterChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexedSchemaClusterChangeValidatorTest.java index 309ad4094e4..027bc706067 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexedSchemaClusterChangeValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/IndexedSchemaClusterChangeValidatorTest.java @@ -4,15 +4,14 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.application.api.ValidationId; import com.yahoo.config.model.api.ConfigChangeAction; import com.yahoo.config.model.api.ServiceInfo; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.vespa.model.VespaModel; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.vespa.model.content.utils.ApplicationPackageBuilder; import com.yahoo.vespa.model.content.utils.ContentClusterBuilder; import com.yahoo.vespa.model.content.utils.SchemaBuilder; import org.junit.jupiter.api.Test; -import java.time.Instant; import java.util.List; import static com.yahoo.vespa.model.application.validation.change.ConfigChangeTestUtils.assertEqualActions; @@ -72,7 +71,7 @@ public class IndexedSchemaClusterChangeValidatorTest { private List<ConfigChangeAction> validate() { return normalizeServicesInActions(validator.validate(currentModel, nextModel, - ValidationOverrides.empty, Instant.now())); + new DeployState.Builder().build())); } public void assertValidation() { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/NodeResourceChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/NodeResourceChangeValidatorTest.java index d0cc4a605bc..7080a3e0f12 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/NodeResourceChangeValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/NodeResourceChangeValidatorTest.java @@ -1,7 +1,6 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.application.validation.change; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.model.api.ConfigChangeAction; import com.yahoo.config.model.api.HostProvisioner; import com.yahoo.config.model.deploy.DeployState; @@ -15,7 +14,6 @@ import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithMockPkg; import org.junit.jupiter.api.Test; -import java.time.Clock; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -56,9 +54,7 @@ public class NodeResourceChangeValidatorTest { } private List<ConfigChangeAction> validate(VespaModel current, VespaModel next) { - return new NodeResourceChangeValidator().validate(current, next, - ValidationOverrides.empty, - Clock.systemUTC().instant()); + return new NodeResourceChangeValidator().validate(current, next, new DeployState.Builder().build()); } private static VespaModel model(int mem1, int mem2, int mem3, int mem4) { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/StreamingSchemaClusterChangeValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/StreamingSchemaClusterChangeValidatorTest.java index 92f2cf61c36..5c5c86e3f3d 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/StreamingSchemaClusterChangeValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/change/StreamingSchemaClusterChangeValidatorTest.java @@ -4,17 +4,15 @@ package com.yahoo.vespa.model.application.validation.change; import com.yahoo.config.application.api.ValidationId; import com.yahoo.config.model.api.ConfigChangeAction; import com.yahoo.config.model.api.ServiceInfo; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.vespa.model.VespaModel; -import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.vespa.model.content.utils.ApplicationPackageBuilder; import com.yahoo.vespa.model.content.utils.ContentClusterBuilder; import com.yahoo.vespa.model.content.utils.DocType; import com.yahoo.vespa.model.content.utils.SchemaBuilder; import org.junit.jupiter.api.Test; -import java.time.Instant; -import java.util.Arrays; import java.util.List; import static com.yahoo.vespa.model.application.validation.change.ConfigChangeTestUtils.assertEqualActions; @@ -40,7 +38,7 @@ public class StreamingSchemaClusterChangeValidatorTest { public static VespaModel createOneDocModel(String sdContent) { return new ApplicationPackageBuilder() - .addCluster(new ContentClusterBuilder().name("foo").docTypes(Arrays.asList(DocType.streaming("d1")))) + .addCluster(new ContentClusterBuilder().name("foo").docTypes(List.of(DocType.streaming("d1")))) .addSchemas(new SchemaBuilder().name("d1").content(sdContent).build()) .buildCreator().create(); } @@ -51,7 +49,7 @@ public class StreamingSchemaClusterChangeValidatorTest { public static VespaModel createTwoDocModel(String d1Content, String d2Content) { return new ApplicationPackageBuilder() - .addCluster(new ContentClusterBuilder().name("foo").docTypes(Arrays.asList(DocType.streaming("d1"), DocType.streaming("d2")))) + .addCluster(new ContentClusterBuilder().name("foo").docTypes(List.of(DocType.streaming("d1"), DocType.streaming("d2")))) .addSchemas(new SchemaBuilder().name("d1").content(d1Content).build()) .addSchemas(new SchemaBuilder().name("d2").content(d2Content).build()) .buildCreator().create(); @@ -63,8 +61,8 @@ public class StreamingSchemaClusterChangeValidatorTest { public static VespaModel createTwoClusterModel(String d1Content, String d2Content) { return new ApplicationPackageBuilder() - .addCluster(new ContentClusterBuilder().name("foo").docTypes(Arrays.asList(DocType.streaming("d1")))) - .addCluster(new ContentClusterBuilder().name("bar").docTypes(Arrays.asList(DocType.streaming("d2")))) + .addCluster(new ContentClusterBuilder().name("foo").docTypes(List.of(DocType.streaming("d1")))) + .addCluster(new ContentClusterBuilder().name("bar").docTypes(List.of(DocType.streaming("d2")))) .addSchemas(new SchemaBuilder().name("d1").content(d1Content).build()) .addSchemas(new SchemaBuilder().name("d2").content(d2Content).build()) .buildCreator().create(); @@ -72,7 +70,7 @@ public class StreamingSchemaClusterChangeValidatorTest { public List<ConfigChangeAction> validate() { return normalizeServicesInActions(validator.validate(currentModel, nextModel, - ValidationOverrides.empty, Instant.now())); + new DeployState.Builder().build())); } public void assertValidation() { @@ -80,7 +78,7 @@ public class StreamingSchemaClusterChangeValidatorTest { } public void assertValidation(ConfigChangeAction exp) { - assertValidation(Arrays.asList(exp)); + assertValidation(List.of(exp)); } public void assertValidation(List<ConfigChangeAction> exp) { @@ -88,14 +86,14 @@ public class StreamingSchemaClusterChangeValidatorTest { } } - private static String STRING_FIELD = "field f1 type string { indexing: summary }"; - private static String INT_FIELD = "field f1 type int { indexing: summary }"; - private static String ATTRIBUTE_INT_FIELD = "field f1 type int { indexing: attribute | summary }"; - private static String ATTRIBUTE_FAST_ACCESS_INT_FIELD = "field f1 type int { indexing: attribute | summary \n attribute: fast-access }"; - private static List<ServiceInfo> FOO_SERVICE = Arrays.asList( - new ServiceInfo("searchnode", "null", null, null, "foo/search/0", "null")); - private static List<ServiceInfo> BAR_SERVICE = Arrays.asList( - new ServiceInfo("searchnode2", "null", null, null, "bar/search/0", "null")); + private static final String STRING_FIELD = "field f1 type string { indexing: summary }"; + private static final String INT_FIELD = "field f1 type int { indexing: summary }"; + private static final String ATTRIBUTE_INT_FIELD = "field f1 type int { indexing: attribute | summary }"; + private static final String ATTRIBUTE_FAST_ACCESS_INT_FIELD = "field f1 type int { indexing: attribute | summary \n attribute: fast-access }"; + private static final List<ServiceInfo> FOO_SERVICE = + List.of(new ServiceInfo("searchnode", "null", null, null, "foo/search/0", "null")); + private static final List<ServiceInfo> BAR_SERVICE = + List.of(new ServiceInfo("searchnode2", "null", null, null, "bar/search/0", "null")); @Test void changing_field_type_requires_refeed() { @@ -106,17 +104,15 @@ public class StreamingSchemaClusterChangeValidatorTest { @Test void changes_in_multiple_streaming_clusters_are_discovered() { Fixture.withTwoClusters(STRING_FIELD, INT_FIELD) - .assertValidation(Arrays.asList( - createFieldTypeChangeRefeedAction("d1", FOO_SERVICE), - createFieldTypeChangeRefeedAction("d2", BAR_SERVICE))); + .assertValidation(List.of(createFieldTypeChangeRefeedAction("d1", FOO_SERVICE), + createFieldTypeChangeRefeedAction("d2", BAR_SERVICE))); } @Test void changes_in_multiple_document_types_are_discovered() { Fixture.withTwoDocTypes(STRING_FIELD, INT_FIELD) - .assertValidation(Arrays.asList( - createFieldTypeChangeRefeedAction("d1", FOO_SERVICE), - createFieldTypeChangeRefeedAction("d2", FOO_SERVICE))); + .assertValidation(List.of(createFieldTypeChangeRefeedAction("d1", FOO_SERVICE), + createFieldTypeChangeRefeedAction("d2", FOO_SERVICE))); } @Test 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 076d78912e8..adecbf42884 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 @@ -3,8 +3,8 @@ package com.yahoo.vespa.model.application.validation.change.search; import com.yahoo.config.application.api.ValidationId; import com.yahoo.config.application.api.ValidationOverrides; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.ClusterSpec; -import com.yahoo.test.ManualClock; import com.yahoo.vespa.model.application.validation.change.VespaConfigChangeAction; import org.junit.jupiter.api.Test; @@ -28,8 +28,7 @@ public class AttributeChangeValidatorTest { nextDb().getDerivedConfiguration().getAttributeFields(), nextDb().getDerivedConfiguration().getIndexSchema(), nextDocType(), - new ValidationOverrides(List.of()), - new ManualClock().instant()); + new DeployState.Builder().build()); } @Override 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 27a90c73725..689643e550d 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 @@ -2,9 +2,8 @@ package com.yahoo.vespa.model.application.validation.change.search; import com.yahoo.config.application.api.ValidationId; -import com.yahoo.config.application.api.ValidationOverrides; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.ClusterSpec; -import com.yahoo.test.ManualClock; import com.yahoo.vespa.model.application.validation.change.VespaConfigChangeAction; import org.junit.jupiter.api.Test; @@ -28,8 +27,7 @@ public class DocumentDatabaseChangeValidatorTest { currentDocType(), nextDb(), nextDocType(), - new ValidationOverrides(List.of()), - new ManualClock().instant()); + new DeployState.Builder().build()); } @Override |