summaryrefslogtreecommitdiffstats
path: root/config-model-api
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2022-02-17 18:42:02 +0000
committerArne H Juul <arnej@yahooinc.com>2022-02-17 18:42:02 +0000
commit419ca82c28e7ea97ae7f7f1265eca158fae0844c (patch)
tree55ee9be894ad4f862ffeb12f733048451ff8c063 /config-model-api
parentc1e701cd70e2531302a6e72d0900772f4296ab2c (diff)
parent70e50ea1b7d974ffb2e1db805e8e273eeffd6d0e (diff)
Merge branch 'master' into arnej/rename-summaryfeatures-back-to-original
Diffstat (limited to 'config-model-api')
-rw-r--r--config-model-api/abi-spec.json23
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java6
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentInstanceSpec.java9
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java13
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java27
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterEndpoint.java11
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterInfo.java6
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java24
-rw-r--r--config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java26
9 files changed, 108 insertions, 37 deletions
diff --git a/config-model-api/abi-spec.json b/config-model-api/abi-spec.json
index cac9d21ee1f..ae9e7a22129 100644
--- a/config-model-api/abi-spec.json
+++ b/config-model-api/abi-spec.json
@@ -194,9 +194,10 @@
"public"
],
"methods": [
- "public void <init>(com.yahoo.config.provision.InstanceName, java.util.List, com.yahoo.config.application.api.DeploymentSpec$UpgradePolicy, com.yahoo.config.application.api.DeploymentSpec$UpgradeRollout, java.util.List, java.util.Optional, java.util.Optional, com.yahoo.config.application.api.Notifications, java.util.List, java.time.Instant)",
+ "public void <init>(com.yahoo.config.provision.InstanceName, java.util.List, com.yahoo.config.application.api.DeploymentSpec$UpgradePolicy, com.yahoo.config.application.api.DeploymentSpec$UpgradeRevision, com.yahoo.config.application.api.DeploymentSpec$UpgradeRollout, java.util.List, java.util.Optional, java.util.Optional, com.yahoo.config.application.api.Notifications, java.util.List, java.time.Instant)",
"public com.yahoo.config.provision.InstanceName name()",
"public com.yahoo.config.application.api.DeploymentSpec$UpgradePolicy upgradePolicy()",
+ "public com.yahoo.config.application.api.DeploymentSpec$UpgradeRevision upgradeRevision()",
"public com.yahoo.config.application.api.DeploymentSpec$UpgradeRollout upgradeRollout()",
"public java.util.List changeBlocker()",
"public java.util.Optional globalServiceId()",
@@ -365,6 +366,23 @@
"public static final enum com.yahoo.config.application.api.DeploymentSpec$UpgradePolicy conservative"
]
},
+ "com.yahoo.config.application.api.DeploymentSpec$UpgradeRevision": {
+ "superClass": "java.lang.Enum",
+ "interfaces": [],
+ "attributes": [
+ "public",
+ "final",
+ "enum"
+ ],
+ "methods": [
+ "public static com.yahoo.config.application.api.DeploymentSpec$UpgradeRevision[] values()",
+ "public static com.yahoo.config.application.api.DeploymentSpec$UpgradeRevision valueOf(java.lang.String)"
+ ],
+ "fields": [
+ "public static final enum com.yahoo.config.application.api.DeploymentSpec$UpgradeRevision separate",
+ "public static final enum com.yahoo.config.application.api.DeploymentSpec$UpgradeRevision latest"
+ ]
+ },
"com.yahoo.config.application.api.DeploymentSpec$UpgradeRollout": {
"superClass": "java.lang.Enum",
"interfaces": [],
@@ -379,7 +397,8 @@
],
"fields": [
"public static final enum com.yahoo.config.application.api.DeploymentSpec$UpgradeRollout separate",
- "public static final enum com.yahoo.config.application.api.DeploymentSpec$UpgradeRollout leading"
+ "public static final enum com.yahoo.config.application.api.DeploymentSpec$UpgradeRollout leading",
+ "public static final enum com.yahoo.config.application.api.DeploymentSpec$UpgradeRollout simultaneous"
]
},
"com.yahoo.config.application.api.DeploymentSpec": {
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 d07df82fda1..c40ce1ebeb1 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
@@ -25,9 +25,6 @@ import java.util.jar.JarEntry;
* Represents an application package, that is, used as input when creating a VespaModel and as
* a general reference to all contents in an application.
*
- * The class hides detail as to whether the source is local files or ZooKeeper
- * data in config server.
- *
* @author Vegard Havdal
*/
public interface ApplicationPackage {
@@ -129,7 +126,6 @@ public interface ApplicationPackage {
* Returns the files in a directory as readers. The readers <b>must</b>
* be closed by the caller.
*
- *
* @param pathFromRoot the relative path string from the root of the application package
* @param suffix the suffix of files to return, or null to return all
* @param recurse return files in all subdirectories (recursively) as well
@@ -141,7 +137,7 @@ public interface ApplicationPackage {
/** Same as getFiles(pathFromRoot, suffix, false) */
default List<NamedReader> getFiles(Path pathFromRoot, String suffix) {
- return getFiles(pathFromRoot,suffix,false);
+ return getFiles(pathFromRoot, suffix, false);
}
/** Returns the major version this application is valid for, or empty if it is valid for all versions */
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentInstanceSpec.java b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentInstanceSpec.java
index 67ddb9ef83c..ea38860c29b 100644
--- a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentInstanceSpec.java
+++ b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentInstanceSpec.java
@@ -31,6 +31,7 @@ public class DeploymentInstanceSpec extends DeploymentSpec.Steps {
private final InstanceName name;
private final DeploymentSpec.UpgradePolicy upgradePolicy;
+ private final DeploymentSpec.UpgradeRevision upgradeRevision;
private final DeploymentSpec.UpgradeRollout upgradeRollout;
private final List<DeploymentSpec.ChangeBlocker> changeBlockers;
private final Optional<String> globalServiceId;
@@ -41,6 +42,7 @@ public class DeploymentInstanceSpec extends DeploymentSpec.Steps {
public DeploymentInstanceSpec(InstanceName name,
List<DeploymentSpec.Step> steps,
DeploymentSpec.UpgradePolicy upgradePolicy,
+ DeploymentSpec.UpgradeRevision upgradeRevision,
DeploymentSpec.UpgradeRollout upgradeRollout,
List<DeploymentSpec.ChangeBlocker> changeBlockers,
Optional<String> globalServiceId,
@@ -51,6 +53,7 @@ public class DeploymentInstanceSpec extends DeploymentSpec.Steps {
super(steps);
this.name = name;
this.upgradePolicy = upgradePolicy;
+ this.upgradeRevision = upgradeRevision;
this.upgradeRollout = upgradeRollout;
this.changeBlockers = changeBlockers;
this.globalServiceId = globalServiceId;
@@ -150,6 +153,9 @@ public class DeploymentInstanceSpec extends DeploymentSpec.Steps {
/** Returns the upgrade policy of this, which is defaultPolicy if none is specified */
public DeploymentSpec.UpgradePolicy upgradePolicy() { return upgradePolicy; }
+ /** Returns the upgrade revision strategy of this, which is separate if none is specified */
+ public DeploymentSpec.UpgradeRevision upgradeRevision() { return upgradeRevision; }
+
/** Returns the upgrade rollout strategy of this, which is separate if none is specified */
public DeploymentSpec.UpgradeRollout upgradeRollout() { return upgradeRollout; }
@@ -198,6 +204,7 @@ public class DeploymentInstanceSpec extends DeploymentSpec.Steps {
DeploymentInstanceSpec other = (DeploymentInstanceSpec) o;
return globalServiceId.equals(other.globalServiceId) &&
upgradePolicy == other.upgradePolicy &&
+ upgradeRevision == other.upgradeRevision &&
upgradeRollout == other.upgradeRollout &&
changeBlockers.equals(other.changeBlockers) &&
steps().equals(other.steps()) &&
@@ -208,7 +215,7 @@ public class DeploymentInstanceSpec extends DeploymentSpec.Steps {
@Override
public int hashCode() {
- return Objects.hash(globalServiceId, upgradePolicy, upgradeRollout, changeBlockers, steps(), athenzService, notifications, endpoints);
+ return Objects.hash(globalServiceId, upgradePolicy, upgradeRevision, upgradeRollout, changeBlockers, steps(), athenzService, notifications, endpoints);
}
@Override
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java
index 88363db6e49..8ad42b1d4a8 100644
--- a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java
+++ b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java
@@ -550,14 +550,23 @@ public class DeploymentSpec {
}
+ /** Determines when application changes deploy, when an older revision is already rolling out. */
+ public enum UpgradeRevision {
+ /** Separate: Application changes wait for previous application changes to complete, unless they fail. */
+ separate,
+ /** Latest: Application changes immediately supersede previous application changes, unless currently blocked. */
+ latest
+ }
+
+
/** Determines when application changes deploy, when there is already an ongoing platform upgrade. */
public enum UpgradeRollout {
/** Separate: Application changes wait for upgrade to complete, unless upgrade fails. */
separate,
/** Leading: Application changes are allowed to start and catch up to the platform upgrade. */
- leading
+ leading,
// /** Simultaneous: Application changes deploy independently of platform upgrades. */
- // simultaneous
+ simultaneous
}
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java b/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java
index 8f866654d56..b12d4024591 100644
--- a/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java
+++ b/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java
@@ -165,6 +165,7 @@ public class DeploymentSpecXmlReader {
// Values where the parent may provide a default
DeploymentSpec.UpgradePolicy upgradePolicy = readUpgradePolicy(instanceTag, parentTag);
+ DeploymentSpec.UpgradeRevision upgradeRevision = readUpgradeRevision(instanceTag, parentTag);
DeploymentSpec.UpgradeRollout upgradeRollout = readUpgradeRollout(instanceTag, parentTag);
List<DeploymentSpec.ChangeBlocker> changeBlockers = readChangeBlockers(instanceTag, parentTag);
Optional<AthenzService> athenzService = mostSpecificAttribute(instanceTag, athenzServiceAttribute).map(AthenzService::from);
@@ -183,6 +184,7 @@ public class DeploymentSpecXmlReader {
.map(name -> new DeploymentInstanceSpec(InstanceName.from(name),
steps,
upgradePolicy,
+ upgradeRevision,
upgradeRollout,
changeBlockers,
globalServiceId.asOptional(),
@@ -472,6 +474,25 @@ public class DeploymentSpecXmlReader {
}
}
+ private DeploymentSpec.UpgradeRevision readUpgradeRevision(Element parent, Element fallbackParent) {
+ Element upgradeElement = XML.getChild(parent, upgradeTag);
+ if (upgradeElement == null)
+ upgradeElement = XML.getChild(fallbackParent, upgradeTag);
+ if (upgradeElement == null)
+ return DeploymentSpec.UpgradeRevision.separate;
+
+ String revision = upgradeElement.getAttribute("revision");
+ if (revision.isEmpty())
+ return DeploymentSpec.UpgradeRevision.separate;
+
+ switch (revision) {
+ case "separate": return DeploymentSpec.UpgradeRevision.separate;
+ case "latest": return DeploymentSpec.UpgradeRevision.latest;
+ default: throw new IllegalArgumentException("Illegal upgrade revision '" + revision + "': " +
+ "Must be one of " + Arrays.toString(DeploymentSpec.UpgradeRevision.values()));
+ }
+ }
+
private DeploymentSpec.UpgradeRollout readUpgradeRollout(Element parent, Element fallbackParent) {
Element upgradeElement = XML.getChild(parent, upgradeTag);
if (upgradeElement == null)
@@ -486,9 +507,9 @@ public class DeploymentSpecXmlReader {
switch (rollout) {
case "separate": return DeploymentSpec.UpgradeRollout.separate;
case "leading": return DeploymentSpec.UpgradeRollout.leading;
- // case "simultaneous": return DeploymentSpec.UpgradePolicy.conservative;
- default: throw new IllegalArgumentException("Illegal upgrade policy '" + rollout + "': " +
- "Must be one of " + Arrays.toString(DeploymentSpec.UpgradePolicy.values()));
+ case "simultaneous": return DeploymentSpec.UpgradeRollout.simultaneous;
+ default: throw new IllegalArgumentException("Illegal upgrade rollout '" + rollout + "': " +
+ "Must be one of " + Arrays.toString(DeploymentSpec.UpgradeRollout.values()));
}
}
diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterEndpoint.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterEndpoint.java
index 08ec615e4c0..a879b335a34 100644
--- a/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterEndpoint.java
+++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterEndpoint.java
@@ -138,6 +138,7 @@ public class ApplicationClusterEndpoint {
}
public static class DnsName {
+
private static final int MAX_LABEL_LENGTH = 63;
private final String name;
@@ -150,11 +151,6 @@ public class ApplicationClusterEndpoint {
return name;
}
- // TODO: remove when 7.508 is latest version
- public static DnsName sharedNameFrom(ClusterSpec.Id cluster, ApplicationId applicationId, String suffix) {
- return sharedNameFrom(SystemName.main, cluster, applicationId, suffix);
- }
-
public static DnsName sharedNameFrom(SystemName systemName, ClusterSpec.Id cluster, ApplicationId applicationId, String suffix) {
String name = dnsParts(systemName, cluster, applicationId)
.filter(Objects::nonNull) // remove null values that were "default"
@@ -162,11 +158,6 @@ public class ApplicationClusterEndpoint {
return new DnsName(sanitize(name) + suffix); // Need to sanitize name since it is considered one label
}
- // TODO remove this method when 7.508 is latest version
- public static DnsName sharedL4NameFrom(ClusterSpec.Id cluster, ApplicationId applicationId, String suffix) {
- return sharedL4NameFrom(SystemName.main, cluster, applicationId, suffix);
- }
-
public static DnsName sharedL4NameFrom(SystemName systemName, ClusterSpec.Id cluster, ApplicationId applicationId, String suffix) {
String name = dnsParts(systemName, cluster, applicationId)
.filter(Objects::nonNull) // remove null values that were "default"
diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterInfo.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterInfo.java
index 2cd2e980761..20fcb6b599b 100644
--- a/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterInfo.java
+++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterInfo.java
@@ -5,5 +5,11 @@ package com.yahoo.config.model.api;
import java.util.List;
public interface ApplicationClusterInfo {
+
List<ApplicationClusterEndpoint> endpoints();
+
+ boolean getDeferChangesUntilRestart();
+
+ String name();
+
}
diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
index e1707a56825..b4ece2dc28b 100644
--- a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
+++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
@@ -82,37 +82,36 @@ public interface ModelContext {
@ModelFeatureFlag(owners = {"baldersheim"}) default boolean skipMbusReplyThread() { throw new UnsupportedOperationException("TODO specify default value"); }
@ModelFeatureFlag(owners = {"baldersheim"}) default boolean useAsyncMessageHandlingOnSchedule() { throw new UnsupportedOperationException("TODO specify default value"); }
@ModelFeatureFlag(owners = {"baldersheim"}) default double feedConcurrency() { throw new UnsupportedOperationException("TODO specify default value"); }
- @ModelFeatureFlag(owners = {"baldersheim"}) default int metricsproxyNumThreads() { throw new UnsupportedOperationException("TODO specify default value"); }
- @ModelFeatureFlag(owners = {"baldersheim"}, removeAfter = "7.527") default int largeRankExpressionLimit() { return 8192; }
+ @ModelFeatureFlag(owners = {"baldersheim"}) default int defaultPoolNumThreads() { return 2; }
+ @ModelFeatureFlag(owners = {"baldersheim"}) default int availableProcessors() { return 2; }
@ModelFeatureFlag(owners = {"baldersheim"}) default int maxUnCommittedMemory() { return 130000; }
@ModelFeatureFlag(owners = {"baldersheim"}) default int maxConcurrentMergesPerNode() { return 16; }
@ModelFeatureFlag(owners = {"baldersheim"}) default int maxMergeQueueSize() { return 100; }
- @ModelFeatureFlag(owners = {"vekterli", "geirst"}) default boolean ignoreMergeQueueLimit() { return true; }
@ModelFeatureFlag(owners = {"baldersheim"}) default boolean containerDumpHeapOnShutdownTimeout() { throw new UnsupportedOperationException("TODO specify default value"); }
@ModelFeatureFlag(owners = {"baldersheim"}) default double containerShutdownTimeout() { throw new UnsupportedOperationException("TODO specify default value"); }
- @ModelFeatureFlag(owners = {"baldersheim"}, removeAfter = "7.527") default double diskBloatFactor() { return 0.25; }
- @ModelFeatureFlag(owners = {"baldersheim"}, removeAfter = "7.527") default int docstoreCompressionLevel() { return 3; }
- @ModelFeatureFlag(owners = {"geirst"}) default boolean enableFeedBlockInDistributor() { return true; }
+ @ModelFeatureFlag(owners = {"geirst"}, removeAfter = "7.541") default boolean enableFeedBlockInDistributor() { return true; }
@ModelFeatureFlag(owners = {"bjorncs", "tokle"}) default List<String> allowedAthenzProxyIdentities() { return List.of(); }
@ModelFeatureFlag(owners = {"vekterli"}) default int maxActivationInhibitedOutOfSyncGroups() { return 0; }
@ModelFeatureFlag(owners = {"hmusum"}) default String jvmOmitStackTraceInFastThrowOption(ClusterSpec.Type type) { return ""; }
- @ModelFeatureFlag(owners = {"hmusum"}) default double resourceLimitDisk() { return 0.8; }
+ @ModelFeatureFlag(owners = {"hmusum"}) default double resourceLimitDisk() { return 0.75; }
@ModelFeatureFlag(owners = {"hmusum"}) default double resourceLimitMemory() { return 0.8; }
@ModelFeatureFlag(owners = {"geirst", "vekterli"}) default double minNodeRatioPerGroup() { return 0.0; }
- @ModelFeatureFlag(owners = {"geirst", "vekterli"}) default int distributorMergeBusyWait() { return 1; }
- @ModelFeatureFlag(owners = {"vekterli", "geirst"}) default boolean distributorEnhancedMaintenanceScheduling() { return true; }
@ModelFeatureFlag(owners = {"arnej"}) default boolean forwardIssuesAsErrors() { return true; }
- @ModelFeatureFlag(owners = {"geirst", "vekterli"}) default boolean asyncApplyBucketDiff() { return true; }
@ModelFeatureFlag(owners = {"arnej"}) default boolean ignoreThreadStackSizes() { return false; }
@ModelFeatureFlag(owners = {"vekterli", "geirst"}) default boolean unorderedMergeChaining() { return true; }
@ModelFeatureFlag(owners = {"arnej"}) default boolean useV8GeoPositions() { return false; }
@ModelFeatureFlag(owners = {"arnej", "baldersheim"}) default boolean useV8DocManagerCfg() { return false; }
@ModelFeatureFlag(owners = {"baldersheim", "geirst", "toregge"}) default int maxCompactBuffers() { return 1; }
@ModelFeatureFlag(owners = {"hmusum"}) default boolean failDeploymentWithInvalidJvmOptions() { return false; }
- @ModelFeatureFlag(owners = {"baldersheim"}, removeAfter = "7.527") default double tlsSizeFraction() { return 0.02; }
@ModelFeatureFlag(owners = {"arnej", "andreer"}) default List<String> ignoredHttpUserAgents() { return List.of(); }
@ModelFeatureFlag(owners = {"bjorncs"}) default boolean enableServerOcspStapling() { return false; }
- @ModelFeatureFlag(owners = {"vekterli"}) default String persistenceAsyncThrottling() { throw new UnsupportedOperationException("TODO specify default value"); }
+ @ModelFeatureFlag(owners = {"vekterli"}) default String persistenceAsyncThrottling() { throw new UnsupportedOperationException("TODO specify default value"); }
+ @ModelFeatureFlag(owners = {"vekterli"}) default String mergeThrottlingPolicy() { throw new UnsupportedOperationException("TODO specify default value"); }
+ @ModelFeatureFlag(owners = {"vekterli"}) default double persistenceThrottlingWsDecrementFactor() { throw new UnsupportedOperationException("TODO specify default value"); }
+ @ModelFeatureFlag(owners = {"vekterli"}) default double persistenceThrottlingWsBackoff() { throw new UnsupportedOperationException("TODO specify default value"); }
+ @ModelFeatureFlag(owners = {"geirst", "vekterli"}) default boolean inhibitDefaultMergesWhenGlobalMergesPending() { return false; }
+ @ModelFeatureFlag(owners = {"arnej"}) default boolean useQrserverServiceName() { return true; }
+ @ModelFeatureFlag(owners = {"bjorncs", "baldersheim"}) default boolean enableJdiscPreshutdownCommand() { return true; }
@ModelFeatureFlag(owners = {"arnej"}) default boolean avoidRenamingSummaryFeatures() { return false; }
}
@@ -159,6 +158,7 @@ public interface ModelContext {
default List<String> tlsCiphersOverride() { return List.of(); }
default List<String> zoneDnsSuffixes() { return List.of(); }
+ List<String> environmentVariables();
}
@Retention(RetentionPolicy.RUNTIME)
diff --git a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java
index 2fa2ba83291..f6af155ffc2 100644
--- a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java
+++ b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecTest.java
@@ -121,6 +121,7 @@ public class DeploymentSpecTest {
assertFalse(spec.requireInstance("default").globalServiceId().isPresent());
assertEquals(DeploymentSpec.UpgradePolicy.defaultPolicy, spec.requireInstance("default").upgradePolicy());
+ assertEquals(DeploymentSpec.UpgradeRevision.separate, spec.requireInstance("default").upgradeRevision());
assertEquals(DeploymentSpec.UpgradeRollout.separate, spec.requireInstance("default").upgradeRollout());
}
@@ -364,18 +365,37 @@ public class DeploymentSpecTest {
}
@Test
+ public void productionSpecWithUpgradeRevision() {
+ StringReader r = new StringReader(
+ "<deployment>" +
+ " <instance id='default'>" +
+ " <upgrade revision='latest' />" +
+ " </instance>" +
+ " <instance id='custom'/>" +
+ "</deployment>"
+ );
+ DeploymentSpec spec = DeploymentSpec.fromXml(r);
+ assertEquals("latest", spec.requireInstance("default").upgradeRevision().toString());
+ assertEquals("separate", spec.requireInstance("custom").upgradeRevision().toString());
+ }
+
+ @Test
public void productionSpecWithUpgradeRollout() {
StringReader r = new StringReader(
"<deployment>" +
" <instance id='default'>" +
" <upgrade rollout='leading' />" +
" </instance>" +
+ " <instance id='aggressive'>" +
+ " <upgrade rollout='simultaneous' />" +
+ " </instance>" +
" <instance id='custom'/>" +
"</deployment>"
);
DeploymentSpec spec = DeploymentSpec.fromXml(r);
assertEquals("leading", spec.requireInstance("default").upgradeRollout().toString());
assertEquals("separate", spec.requireInstance("custom").upgradeRollout().toString());
+ assertEquals("simultaneous", spec.requireInstance("aggressive").upgradeRollout().toString());
}
@Test
@@ -397,10 +417,10 @@ public class DeploymentSpecTest {
public void upgradePolicyDefault() {
StringReader r = new StringReader(
"<deployment version='1.0'>" +
- " <upgrade policy='canary' rollout='leading'/>" +
+ " <upgrade policy='canary' rollout='leading' revision='latest' />" +
" <instance id='instance1'/>" +
" <instance id='instance2'>" +
- " <upgrade policy='conservative' rollout='separate'/>" +
+ " <upgrade policy='conservative' rollout='separate' revision='separate'/>" +
" </instance>" +
"</deployment>"
);
@@ -408,6 +428,8 @@ public class DeploymentSpecTest {
DeploymentSpec spec = DeploymentSpec.fromXml(r);
assertEquals("canary", spec.requireInstance("instance1").upgradePolicy().toString());
assertEquals("conservative", spec.requireInstance("instance2").upgradePolicy().toString());
+ assertEquals("latest", spec.requireInstance("instance1").upgradeRevision().toString());
+ assertEquals("separate", spec.requireInstance("instance2").upgradeRevision().toString());
assertEquals("leading", spec.requireInstance("instance1").upgradeRollout().toString());
assertEquals("separate", spec.requireInstance("instance2").upgradeRollout().toString());
}