diff options
author | Martin Polden <mpolden@mpolden.no> | 2018-08-21 13:52:27 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2018-08-21 13:52:27 +0200 |
commit | 6965e262220ea213a527e15e33a9c61787d45c47 (patch) | |
tree | 439ce5afd51fd11fbf6dcee87d9a961c4754906a | |
parent | f4111fd96a963621453f7580b4272b1c9bdaf028 (diff) |
Remove cloud from ZoneId.equals
Region and environment pairs are unique across clouds.
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()); |