summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2019-01-08 13:28:35 +0100
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2019-01-08 13:28:35 +0100
commit33bcfb52271adbfe50078c5f6d84a9ff2749c80d (patch)
tree8b963ddb3b7da29db1672dcc8d229863a20c8cd9
parent3222d0f3b289fe63c80ec092384231a2b9b2f7dd (diff)
Make Upgrader leave pinned applications alone
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ApplicationList.java5
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Change.java3
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Upgrader.java6
3 files changed, 12 insertions, 2 deletions
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 9e8b2495616..64664842e85 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
@@ -63,6 +63,11 @@ public class ApplicationList {
return listOf(list.stream().filter(application -> isUpgradingTo(version, application)));
}
+ /** Returns the subset of applications which are not pinned to a certain Vespa version. */
+ public ApplicationList notPinned() {
+ return listOf(list.stream().filter(application -> ! application.change().isPinning()));
+ }
+
/** Returns the subset of applications which are currently not upgrading to the given version */
public ApplicationList notUpgradingTo(Version version) {
return listOf(list.stream().filter(application -> ! isUpgradingTo(version, application)));
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Change.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Change.java
index 02ae9829b65..00db08c668a 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Change.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Change.java
@@ -67,6 +67,9 @@ public final class Change {
/** Returns a version of this change which replaces or adds this platform change */
public Change with(Version platformVersion) {
+ if (pinning)
+ throw new IllegalArgumentException("Not allowed to set a platform version when pinned.");
+
return new Change(Optional.of(platformVersion), application, pinning);
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Upgrader.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Upgrader.java
index c1665dfba42..3aa61fe8370 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Upgrader.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/Upgrader.java
@@ -92,8 +92,10 @@ public class Upgrader extends Maintainer {
return reversed;
}
- /** Returns a list of all applications */
- private ApplicationList applications() { return ApplicationList.from(controller().applications().asList()); }
+ /** Returns a list of all applications, except those which are pinned — these should not be manipulated by the Upgrader */
+ private ApplicationList applications() {
+ return ApplicationList.from(controller().applications().asList()).notPinned();
+ }
private void upgrade(ApplicationList applications, Version version) {
applications = applications.hasProductionDeployment();