aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2020-11-20 12:42:47 +0100
committerJon Marius Venstad <venstad@gmail.com>2020-11-20 12:42:47 +0100
commit28ebee04d75871c2e268bfd8375b02759ca52d4e (patch)
tree7216fd3c40cb21cd8cd965459b594ba13a6ead7e
parentb7835ceb503084f32cb09875b1e6243bed81e463 (diff)
Add Optional<ValidationId> to ConfigActionChange and use to validate actions
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/ConfigChangeAction.java10
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/ConfigChangeRefeedAction.java4
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/ConfigChangeReindexAction.java4
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/DisallowableConfigChangeAction.java16
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java18
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/VespaRefeedAction.java3
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/VespaReindexAction.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/configchange/MockRefeedAction.java3
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; }