diff options
author | Jon Bratseth <bratseth@oath.com> | 2018-06-01 01:07:33 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@oath.com> | 2018-06-01 01:07:33 +0200 |
commit | f7d0fe5fdfad579e867f01acc1d41b2ec77bd785 (patch) | |
tree | 2c9b2241bf49a01cf84a6fc0e3dd221b08fb30fe /config-model-api | |
parent | 4919fb84be7edc03f7c7feb0080ff0c5f705f654 (diff) |
Separate internal redeploys from application package changes
Separate system internal redeploys from application package
changes such that we can ignore config updates originating
from application package changes if restart on deploy is true,
as the config change will be followed by a restart - but continue
to effect config changes originating from internal system changes
as those will not (and should not) be followed by a restart.
Diffstat (limited to 'config-model-api')
3 files changed, 33 insertions, 5 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationMetaData.java b/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationMetaData.java index 41a0feff5d4..a3769299cf8 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationMetaData.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationMetaData.java @@ -11,27 +11,32 @@ import java.io.*; * Metadata about an application package. * * @author hmusum - * @since 5.0 */ public class ApplicationMetaData { + private final String deployedByUser; private final String deployedFromDir; private final long deployTimestamp; + private final boolean internalRedeploy; private final long generation; private final long previousActiveGeneration; private final String checkSum; private final String appName; public ApplicationMetaData(File appDir, String deployedByUser, String deployedFromDir, Long deployTimestamp, + boolean internalRedeploy, String checkSum, Long generation, long previousActiveGeneration) { - this(deployedByUser, deployedFromDir, deployTimestamp, appDir.getName(), checkSum, generation, previousActiveGeneration); + this(deployedByUser, deployedFromDir, deployTimestamp, internalRedeploy, + appDir.getName(), checkSum, generation, previousActiveGeneration); } - public ApplicationMetaData(String deployedByUser, String deployedFromDir, Long deployTimestamp, String applicationName, String checkSum, Long generation, long previousActiveGeneration) { + public ApplicationMetaData(String deployedByUser, String deployedFromDir, Long deployTimestamp, boolean internalRedeploy, + String applicationName, String checkSum, Long generation, long previousActiveGeneration) { this.appName = applicationName; this.deployedByUser = deployedByUser; this.deployedFromDir = deployedFromDir; this.deployTimestamp = deployTimestamp; + this.internalRedeploy = internalRedeploy; this.checkSum = checkSum; this.generation = generation; this.previousActiveGeneration = previousActiveGeneration; @@ -88,6 +93,12 @@ public class ApplicationMetaData { } /** + * Returns whether this application generation was produced by a system internal redeployment, + * not an application package change + */ + public boolean isInternalRedeploy() { return internalRedeploy; } + + /** * Returns an md5 hash of the contents of the application package * @return an md5sum of the application package */ @@ -115,7 +126,14 @@ public class ApplicationMetaData { Inspector root = data.get(); Inspector deploy = root.field("deploy"); Inspector app = root.field("application"); - return new ApplicationMetaData(deploy.field("user").asString(), deploy.field("from").asString(), deploy.field("timestamp").asLong(), app.field("name").asString(), app.field("checksum").asString(), app.field("generation").asLong(), app.field("previousActiveGeneration").asLong()); + return new ApplicationMetaData(deploy.field("user").asString(), + deploy.field("from").asString(), + deploy.field("timestamp").asLong(), + booleanField("internalRedeploy", false, deploy), + app.field("name").asString(), + app.field("checksum").asString(), + app.field("generation").asLong(), + app.field("previousActiveGeneration").asLong()); } catch (Exception e) { throw new IllegalArgumentException("Error parsing json metadata", e); } @@ -128,6 +146,7 @@ public class ApplicationMetaData { deploy.setString("user", deployedByUser); deploy.setString("from", deployedFromDir); deploy.setLong("timestamp", deployTimestamp); + deploy.setBool("internalRedeploy", internalRedeploy); Cursor app = meta.setObject("application"); app.setString("name", appName); app.setString("checksum", checkSum); @@ -136,6 +155,12 @@ public class ApplicationMetaData { return slime; } + private static boolean booleanField(String fieldName, boolean defaultValue, Inspector object) { + Inspector value = object.field(fieldName); + if ( ! value.valid()) return defaultValue; + return value.asBool(); + } + public String asJsonString() { Slime slime = getSlime(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java b/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java index fe6f7da2092..dd54fe11c39 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java @@ -224,9 +224,10 @@ public interface ApplicationPackage { /** * Gets the ApplicationMetaData instance for this application package. + * * @return an ApplicationMetaData instance */ - default ApplicationMetaData getMetaData() { return null; } + ApplicationMetaData getMetaData(); default File getFileReference(Path pathRelativeToAppDir) { throw new UnsupportedOperationException("This application package cannot return file references"); diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationInfo.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationInfo.java index c6a72ebb3ff..486db205a4c 100644 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationInfo.java +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationInfo.java @@ -4,6 +4,7 @@ package com.yahoo.config.model.api; import com.yahoo.config.provision.ApplicationId; public class ApplicationInfo { + private final ApplicationId applicationId; private final long generation; private final Model model; // NOT immutable @@ -23,4 +24,5 @@ public class ApplicationInfo { public Model getModel() { return model; } + } |