summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2018-08-21 13:52:27 +0200
committerMartin Polden <mpolden@mpolden.no>2018-08-21 13:52:27 +0200
commit6965e262220ea213a527e15e33a9c61787d45c47 (patch)
tree439ce5afd51fd11fbf6dcee87d9a961c4754906a
parentf4111fd96a963621453f7580b4272b1c9bdaf028 (diff)
Remove cloud from ZoneId.equals
Region and environment pairs are unique across clouds.
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneId.java5
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java7
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java10
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsVersionStatusUpdaterTest.java8
4 files changed, 26 insertions, 4 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneId.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneId.java
index 91cf478d1cc..1b13d9a5760 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneId.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneId.java
@@ -80,13 +80,12 @@ public class ZoneId {
if (o == null || getClass() != o.getClass()) return false;
ZoneId zoneId = (ZoneId) o;
return environment == zoneId.environment &&
- Objects.equals(region, zoneId.region) &&
- Objects.equals(cloud, zoneId.cloud);
+ Objects.equals(region, zoneId.region);
}
@Override
public int hashCode() {
- return Objects.hash(environment, region, cloud);
+ return Objects.hash(environment, region);
}
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java
index 4fbad88df8d..419e532c531 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java
@@ -9,6 +9,7 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId;
import java.net.URI;
import java.time.Duration;
+import java.util.Collections;
import java.util.List;
import java.util.Optional;
@@ -58,6 +59,12 @@ public interface ZoneRegistry {
return upgradePolicy();
}
+ // TODO: Remove default implementation
+ /** Returns all OS upgrade policies */
+ default List<UpgradePolicy> osUpgradePolicies() {
+ return Collections.singletonList(upgradePolicy());
+ }
+
/** Returns the OS upgrade policy to use for zones belonging to given cloud, in this registry */
default UpgradePolicy osUpgradePolicy(CloudName cloud) {
return osUpgradePolicy(); // TODO: Remove default implementation
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java
index 8ad21fee2f1..871a7872a9c 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/OsVersionStatus.java
@@ -13,6 +13,7 @@ import com.yahoo.vespa.hosted.controller.application.SystemApplication;
import com.yahoo.vespa.hosted.controller.maintenance.OsUpgrader;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -62,7 +63,7 @@ public class OsVersionStatus {
if (application.nodeTypesWithUpgradableOs().isEmpty()) {
continue; // Avoid querying applications that do not contain nodes with upgradable OS
}
- for (ZoneId zone : controller.zoneRegistry().zones().controllerUpgraded().ids()) {
+ for (ZoneId zone : zonesToUpgrade(controller)) {
controller.configServer().nodeRepository().list(zone, application.id()).stream()
.filter(node -> OsUpgrader.eligibleForUpgrade(node, application))
.map(node -> new Node(node.hostname(), node.currentOsVersion(), zone.environment(), zone.region()))
@@ -79,6 +80,13 @@ public class OsVersionStatus {
return new OsVersionStatus(versions);
}
+ private static List<ZoneId> zonesToUpgrade(Controller controller) {
+ return controller.zoneRegistry().osUpgradePolicies().stream()
+ .flatMap(upgradePolicy -> upgradePolicy.asList().stream())
+ .flatMap(Collection::stream)
+ .collect(Collectors.toList());
+ }
+
/** A node in this system and its current OS version */
public static class Node {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsVersionStatusUpdaterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsVersionStatusUpdaterTest.java
index 04e0f67753e..98ed64ba879 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsVersionStatusUpdaterTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsVersionStatusUpdaterTest.java
@@ -4,6 +4,8 @@ package com.yahoo.vespa.hosted.controller.maintenance;
import com.yahoo.component.Version;
import com.yahoo.vespa.hosted.controller.ControllerTester;
import com.yahoo.vespa.hosted.controller.api.integration.zone.CloudName;
+import com.yahoo.vespa.hosted.controller.api.integration.zone.UpgradePolicy;
+import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId;
import com.yahoo.vespa.hosted.controller.persistence.MockCuratorDb;
import com.yahoo.vespa.hosted.controller.versions.OsVersion;
import com.yahoo.vespa.hosted.controller.versions.OsVersionStatus;
@@ -28,6 +30,12 @@ public class OsVersionStatusUpdaterTest {
ControllerTester tester = new ControllerTester();
OsVersionStatusUpdater statusUpdater = new OsVersionStatusUpdater(tester.controller(), Duration.ofDays(1),
new JobControl(new MockCuratorDb()));
+ // Add all zones to upgrade policy
+ UpgradePolicy upgradePolicy = UpgradePolicy.create();
+ for (ZoneId zone : tester.zoneRegistry().zones().controllerUpgraded().ids()) {
+ upgradePolicy = upgradePolicy.upgrade(zone);
+ }
+ tester.zoneRegistry().setUpgradePolicy(upgradePolicy);
// Initially empty
assertSame(OsVersionStatus.empty, tester.controller().osVersionStatus());