diff options
3 files changed, 20 insertions, 13 deletions
diff --git a/config-model-api/abi-spec.json b/config-model-api/abi-spec.json index c7b80dce778..28c04f38da5 100644 --- a/config-model-api/abi-spec.json +++ b/config-model-api/abi-spec.json @@ -493,7 +493,8 @@ ], "methods": [ "public void <init>()", - "public void <init>(com.yahoo.config.application.api.DeployLogger)", + "public void <init>(com.yahoo.config.application.api.ValidationOverrides, com.yahoo.config.application.api.DeployLogger)", + "public void invalid(com.yahoo.config.application.api.ValidationId, java.lang.String, java.time.Instant)", "public boolean allows(com.yahoo.config.application.api.ValidationId, java.time.Instant)", "public java.lang.String xmlForm()", "public java.lang.String toString()" @@ -520,7 +521,7 @@ ], "methods": [ "public void <init>(java.util.List)", - "public final void invalid(com.yahoo.config.application.api.ValidationId, java.lang.String, java.time.Instant)", + "public void invalid(com.yahoo.config.application.api.ValidationId, java.lang.String, java.time.Instant)", "public final boolean allows(java.lang.String, java.time.Instant)", "public boolean allows(com.yahoo.config.application.api.ValidationId, java.time.Instant)", "public java.lang.String xmlForm()", diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java b/config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java index 7514a66e282..bcf2ce3999a 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java @@ -29,8 +29,6 @@ import java.util.logging.Logger; */ public class ValidationOverrides { - private static final Logger log = Logger.getLogger(ValidationOverrides.class.getName()); - public static final ValidationOverrides empty = new ValidationOverrides(ImmutableList.of(), "<validation-overrides/>"); /** A special instance which behaves as if it contained a valid allow override for every (valid) validation id */ @@ -51,7 +49,7 @@ public class ValidationOverrides { } /** Throws a ValidationException unless this validation is overridden at this time */ - public final void invalid(ValidationId validationId, String message, Instant now) { + public void invalid(ValidationId validationId, String message, Instant now) { if ( ! allows(validationId, now)) throw new ValidationException(validationId, message); } @@ -176,23 +174,30 @@ public class ValidationOverrides { public static class AllowAllValidationOverrides extends ValidationOverrides { private final DeployLogger logger; + private final ValidationOverrides wrapped; /** Create an instance of this which doesn't log */ public AllowAllValidationOverrides() { - this(null); + this(null, null); } /** Creates an instance of this which logs what is allows to the given deploy logger */ - public AllowAllValidationOverrides(DeployLogger logger) { + public AllowAllValidationOverrides(ValidationOverrides wrapped, DeployLogger logger) { super(List.of()); + this.wrapped = wrapped; this.logger = logger; } + @Override + public void invalid(ValidationId validationId, String message, Instant now) { + // Log if would otherwise be invalid + if (wrapped != null && logger != null && ! wrapped.allows(validationId, now)) + logger.log(Level.WARNING, "Possibly destructive change '" + validationId + "' allowed"); + } + /** Returns whether the given (assumed invalid) change is allowed by this at the moment */ @Override public boolean allows(ValidationId validationId, Instant now) { - if (logger != null) - logger.log(Level.WARNING, "Possibly destructive change '" + validationId + "' allowed"); return true; } 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 22cc2032881..937d511bb09 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 @@ -121,11 +121,12 @@ public class DeployState implements ConfigDefinitionStore { this.importedModels = new ImportedMlModels(applicationPackage.getFileReference(ApplicationPackage.MODELS_DIR), modelImporters); + ValidationOverrides suppliedValidationOverrides = applicationPackage.getValidationOverrides().map(ValidationOverrides::fromXml) + .orElse(ValidationOverrides.empty); this.validationOverrides = - zone.environment().isManuallyDeployed() - ? new ValidationOverrides.AllowAllValidationOverrides(deployLogger) // Don't protect manually deployed zones - : applicationPackage.getValidationOverrides().map(ValidationOverrides::fromXml) - .orElse(ValidationOverrides.empty); + zone.environment().isManuallyDeployed() // // Warn but allow in manually deployed zones + ? new ValidationOverrides.AllowAllValidationOverrides(suppliedValidationOverrides, deployLogger) + : suppliedValidationOverrides; this.wantedNodeVespaVersion = wantedNodeVespaVersion; this.now = now; |