summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java9
-rw-r--r--config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecDeprecatedAPITest.java33
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ApplicationList.java3
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployer.java5
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java12
6 files changed, 16 insertions, 50 deletions
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 446dc8d1fc3..0fc76e26d34 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
@@ -170,15 +170,6 @@ public class DeploymentSpec {
/** Returns the major version this application is pinned to, or empty (default) to allow all major versions */
public Optional<Integer> majorVersion() { return majorVersion; }
- // TODO: Remove after November 2019
- public boolean canUpgradeAt(Instant instant) { return singleInstance().canUpgradeAt(instant); }
-
- // TODO: Remove after November 2019
- public boolean canChangeRevisionAt(Instant instant) { return singleInstance().canChangeRevisionAt(instant); }
-
- // TODO: Remove after November 2019
- public List<ChangeBlocker> changeBlocker() { return singleInstance().changeBlocker(); }
-
/** Returns the deployment steps of this in the order they will be performed */
public List<Step> steps() {
if (hasSingleInstance(steps)) return singleInstance().steps(); // TODO: Remove line after November 2019
diff --git a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecDeprecatedAPITest.java b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecDeprecatedAPITest.java
index 5a8358e65c3..b0ebc98e12b 100644
--- a/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecDeprecatedAPITest.java
+++ b/config-model-api/src/test/java/com/yahoo/config/application/api/DeploymentSpecDeprecatedAPITest.java
@@ -380,38 +380,7 @@ public class DeploymentSpecDeprecatedAPITest {
" </prod>\n" +
"</deployment>"
);
- DeploymentSpec spec = DeploymentSpec.fromXml(r);
- }
-
- @Test
- public void deploymentSpecWithChangeBlocker() {
- StringReader r = new StringReader(
- "<deployment>\n" +
- " <block-change revision='false' days='mon,tue' hours='15-16'/>\n" +
- " <block-change days='sat' hours='10' time-zone='CET'/>\n" +
- " <prod>\n" +
- " <region active='true'>us-west-1</region>\n" +
- " </prod>\n" +
- "</deployment>"
- );
- DeploymentSpec spec = DeploymentSpec.fromXml(r);
- assertEquals(2, spec.changeBlocker().size());
- assertTrue(spec.changeBlocker().get(0).blocksVersions());
- assertFalse(spec.changeBlocker().get(0).blocksRevisions());
- assertEquals(ZoneId.of("UTC"), spec.changeBlocker().get(0).window().zone());
-
- assertTrue(spec.changeBlocker().get(1).blocksVersions());
- assertTrue(spec.changeBlocker().get(1).blocksRevisions());
- assertEquals(ZoneId.of("CET"), spec.changeBlocker().get(1).window().zone());
-
- assertTrue(spec.canUpgradeAt(Instant.parse("2017-09-18T14:15:30.00Z")));
- assertFalse(spec.canUpgradeAt(Instant.parse("2017-09-18T15:15:30.00Z")));
- assertFalse(spec.canUpgradeAt(Instant.parse("2017-09-18T16:15:30.00Z")));
- assertTrue(spec.canUpgradeAt(Instant.parse("2017-09-18T17:15:30.00Z")));
-
- assertTrue(spec.canUpgradeAt(Instant.parse("2017-09-23T09:15:30.00Z")));
- assertFalse(spec.canUpgradeAt(Instant.parse("2017-09-23T08:15:30.00Z"))); // 10 in CET
- assertTrue(spec.canUpgradeAt(Instant.parse("2017-09-23T10:15:30.00Z")));
+ DeploymentSpec.fromXml(r);
}
@Test
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ApplicationList.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ApplicationList.java
index a2487e8a0d1..638f406409f 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ApplicationList.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ApplicationList.java
@@ -177,7 +177,8 @@ public class ApplicationList {
/** Returns the subset of applications that are allowed to upgrade at the given time */
public ApplicationList canUpgradeAt(Instant instant) {
- return filteredOn(application -> application.deploymentSpec().canUpgradeAt(instant));
+ return filteredOn(application -> application.deploymentSpec().instances().stream()
+ .allMatch(instance -> instance.canUpgradeAt(instant)));
}
/** Returns the subset of applications that have at least one assigned rotation */
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployer.java
index 95e1c53f10c..b130f7107dd 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/OutstandingChangeDeployer.java
@@ -21,8 +21,9 @@ public class OutstandingChangeDeployer extends Maintainer {
@Override
protected void maintain() {
for (Application application : controller().applications().asList()) {
- if (application.outstandingChange().hasTargets()
- && application.deploymentSpec().canChangeRevisionAt(controller().clock().instant())) {
+ if ( application.outstandingChange().hasTargets()
+ && application.deploymentSpec().instances().stream()
+ .allMatch(instance -> instance.canChangeRevisionAt(controller().clock().instant()))) {
controller().applications().deploymentTrigger().triggerChange(application.id(),
application.outstandingChange());
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
index e55b08d0b4a..9de0e753ee7 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
@@ -737,7 +737,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
// Change blockers
Cursor changeBlockers = object.setArray("changeBlockers");
- deploymentSpec.changeBlocker().forEach(changeBlocker -> {
+ deploymentSpec.requireInstance(instance.name()).changeBlocker().forEach(changeBlocker -> {
Cursor changeBlockerObject = changeBlockers.addObject();
changeBlockerObject.setBool("versions", changeBlocker.blocksVersions());
changeBlockerObject.setBool("revisions", changeBlocker.blocksRevisions());
@@ -843,7 +843,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
// Change blockers
Cursor changeBlockers = object.setArray("changeBlockers");
- application.deploymentSpec().changeBlocker().forEach(changeBlocker -> {
+ application.deploymentSpec().requireInstance(instance.name()).changeBlocker().forEach(changeBlocker -> {
Cursor changeBlockerObject = changeBlockers.addObject();
changeBlockerObject.setBool("versions", changeBlocker.blocksVersions());
changeBlockerObject.setBool("revisions", changeBlocker.blocksRevisions());
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java
index 23d2646acd7..08d6b5602fe 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java
@@ -177,8 +177,10 @@ class JobControllerApiHandlerHelper {
lastPlatformObject.setString("deploying", completed + " of " + steps.productionJobs().size() + " complete");
else if (completed == steps.productionJobs().size())
lastPlatformObject.setString("completed", completed + " of " + steps.productionJobs().size() + " complete");
- else if ( ! application.deploymentSpec().canUpgradeAt(controller.clock().instant())) {
- lastPlatformObject.setString("blocked", application.deploymentSpec().changeBlocker().stream()
+ else if ( ! application.deploymentSpec().instances().stream()
+ .allMatch(spec -> spec.canUpgradeAt(controller.clock().instant()))) {
+ lastPlatformObject.setString("blocked", application.deploymentSpec().instances().stream()
+ .flatMap(spec -> spec.changeBlocker().stream())
.filter(blocker -> blocker.blocksVersions())
.filter(blocker -> blocker.window().includes(controller.clock().instant()))
.findAny().map(blocker -> blocker.window().toString()).get());
@@ -200,8 +202,10 @@ class JobControllerApiHandlerHelper {
lastApplicationObject.setString("deploying", completed + " of " + steps.productionJobs().size() + " complete");
else if (completed == steps.productionJobs().size())
lastApplicationObject.setString("completed", completed + " of " + steps.productionJobs().size() + " complete");
- else if ( ! application.deploymentSpec().canChangeRevisionAt(controller.clock().instant())) {
- lastApplicationObject.setString("blocked", application.deploymentSpec().changeBlocker().stream()
+ else if ( ! application.deploymentSpec().instances().stream()
+ .allMatch(spec -> spec.canChangeRevisionAt(controller.clock().instant()))) {
+ lastApplicationObject.setString("blocked", application.deploymentSpec().instances().stream()
+ .flatMap(spec -> spec.changeBlocker().stream())
.filter(blocker -> blocker.blocksRevisions())
.filter(blocker -> blocker.window().includes(controller.clock().instant()))
.findAny().map(blocker -> blocker.window().toString()).get());