diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2020-11-20 12:42:47 +0100 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2020-11-20 12:42:47 +0100 |
commit | 28ebee04d75871c2e268bfd8375b02759ca52d4e (patch) | |
tree | 7216fd3c40cb21cd8cd965459b594ba13a6ead7e | |
parent | b7835ceb503084f32cb09875b1e6243bed81e463 (diff) |
Add Optional<ValidationId> to ConfigActionChange and use to validate actions
8 files changed, 22 insertions, 39 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ConfigChangeAction.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ConfigChangeAction.java index f8f0a3dfb1a..70a54918216 100644 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/ConfigChangeAction.java +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ConfigChangeAction.java @@ -5,6 +5,7 @@ import com.yahoo.config.application.api.ValidationId; import com.yahoo.config.provision.ClusterSpec; import java.util.List; +import java.util.Optional; /** * Contains the action to be performed on the given services to handle a config change @@ -38,12 +39,13 @@ public interface ConfigChangeAction { /** Returns the list of services where the action must be performed */ List<ServiceInfo> getServices(); - /** - * Returns whether this change should be allowed. - * Implementations which allow this to return false should inherit {@link DisallowableConfigChangeAction} - */ + /** Returns whether this change should be allowed. */ + // TODO jonmv: remove in 2021. boolean allowed(); + /** When this is non-empty, validation may fail unless this validation id is allowed by validation overrides. */ + default Optional<ValidationId> validationId() { return Optional.empty(); } + /** The id of the cluster that needs this action applied */ // TODO: Remove this default implementation after October 2020 default ClusterSpec.Id clusterId() { return null; } diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ConfigChangeRefeedAction.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ConfigChangeRefeedAction.java index 3d7d0336da0..13109088dcd 100644 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/ConfigChangeRefeedAction.java +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ConfigChangeRefeedAction.java @@ -8,13 +8,13 @@ import com.yahoo.config.application.api.ValidationId; * * @author geirst */ -public interface ConfigChangeRefeedAction extends DisallowableConfigChangeAction { +public interface ConfigChangeRefeedAction extends ConfigChangeAction { @Override default Type getType() { return Type.REFEED; } /** Returns the name identifying this kind of change, used to identify names which should be allowed */ - default String name() { return validationId().value(); } + default String name() { return validationId().orElseThrow().value(); } /** Returns the name of the document type that one must re-feed to handle this config change */ String getDocumentType(); diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ConfigChangeReindexAction.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ConfigChangeReindexAction.java index 52174f0eba2..bb714a55f94 100644 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/ConfigChangeReindexAction.java +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ConfigChangeReindexAction.java @@ -8,12 +8,12 @@ import com.yahoo.config.application.api.ValidationId; * * @author bjorncs */ -public interface ConfigChangeReindexAction extends DisallowableConfigChangeAction { +public interface ConfigChangeReindexAction extends ConfigChangeAction { @Override default Type getType() { return Type.REINDEX; } /** @return name identifying this kind of change, used to identify names which should be allowed */ - default String name() { return validationId().value(); } + default String name() { return validationId().orElseThrow().value(); } /** @return name of the document type that must be re-indexed */ String getDocumentType(); diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/DisallowableConfigChangeAction.java b/config-model-api/src/main/java/com/yahoo/config/model/api/DisallowableConfigChangeAction.java deleted file mode 100644 index a6308b22e3b..00000000000 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/DisallowableConfigChangeAction.java +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.config.model.api; - -import com.yahoo.config.application.api.ValidationId; - -/** - * Sub-interface for {@link ConfigChangeAction} children that may be disallowed. - * - * @author jonmv - */ -public interface DisallowableConfigChangeAction extends ConfigChangeAction { - - /** Returns the validation ID used to allow deployment when this action is required. */ - ValidationId validationId(); - -} 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 533d0034ae3..90b8686991b 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 @@ -5,9 +5,6 @@ import com.yahoo.config.application.api.DeployLogger; 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.ConfigChangeRefeedAction; -import com.yahoo.config.model.api.ConfigChangeReindexAction; -import com.yahoo.config.model.api.DisallowableConfigChangeAction; import com.yahoo.config.model.api.Model; import com.yahoo.config.model.api.ValidationParameters; import com.yahoo.config.model.deploy.DeployState; @@ -32,10 +29,10 @@ import java.time.Instant; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; -import java.util.stream.Stream; import static java.util.stream.Collectors.groupingBy; import static java.util.stream.Collectors.mapping; @@ -110,14 +107,11 @@ public class Validation { .flatMap(v -> v.validate(currentModel, nextModel, overrides, now).stream()) .collect(toList()); - Stream<DisallowableConfigChangeAction> disallowedActions = actions.stream() - .filter(DisallowableConfigChangeAction.class::isInstance) - .map(DisallowableConfigChangeAction.class::cast) - .filter(action -> ! action.allowed()); - - overrides.invalid(disallowedActions.collect(groupingBy(DisallowableConfigChangeAction::validationId, - mapping(ConfigChangeAction::getMessage, toList()))), - now); + Map<ValidationId, List<String>> disallowableActions = actions.stream() + .filter(action -> action.validationId().isPresent()) + .collect(groupingBy(action -> action.validationId().orElseThrow(), + mapping(ConfigChangeAction::getMessage, toList()))); + overrides.invalid(disallowableActions, now); return actions; } 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 d4392d5d149..c7e09845b08 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 @@ -9,6 +9,7 @@ import com.yahoo.config.provision.ClusterSpec; import java.time.Instant; import java.util.List; +import java.util.Optional; /** * Represents an action to re-feed a document type in order to handle a config change. @@ -52,7 +53,7 @@ public class VespaRefeedAction extends VespaConfigChangeAction implements Config } @Override - public ValidationId validationId() { return validationId; } + public Optional<ValidationId> validationId() { return Optional.of(validationId); } @Override public String getDocumentType() { return documentType; } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/VespaReindexAction.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/VespaReindexAction.java index 4c09175a9ca..b9c1b554fde 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/VespaReindexAction.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/VespaReindexAction.java @@ -10,6 +10,7 @@ import com.yahoo.config.provision.ClusterSpec; import java.time.Instant; import java.util.List; import java.util.Objects; +import java.util.Optional; /** * Represents an action to re-index a document type in order to handle a config change. @@ -50,7 +51,7 @@ public class VespaReindexAction extends VespaConfigChangeAction implements Confi return new VespaReindexAction(clusterId(), validationId, newMessage, newServices, documentType, allowed); } - @Override public ValidationId validationId() { return validationId; } + @Override public Optional<ValidationId> validationId() { return Optional.of(validationId); } @Override public String getDocumentType() { return documentType; } @Override public boolean allowed() { return allowed; } @Override public boolean ignoreForInternalRedeploy() { return false; } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/configchange/MockRefeedAction.java b/configserver/src/test/java/com/yahoo/vespa/config/server/configchange/MockRefeedAction.java index c3cb88d2807..a17138d8693 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/configchange/MockRefeedAction.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/configchange/MockRefeedAction.java @@ -6,6 +6,7 @@ import com.yahoo.config.model.api.ConfigChangeRefeedAction; import com.yahoo.config.model.api.ServiceInfo; import java.util.List; +import java.util.Optional; /** * @author geirst @@ -24,7 +25,7 @@ public class MockRefeedAction extends MockConfigChangeAction implements ConfigCh } @Override - public ValidationId validationId() { return validationId; } + public Optional<ValidationId> validationId() { return Optional.of(validationId); } @Override public boolean allowed() { return allowed; } |