diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2018-05-25 16:50:29 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-25 16:50:29 +0200 |
commit | c1b5e51d5a122dcfcb7a4481e91f58224490833d (patch) | |
tree | 526bc77232dd0e44fd592d75070553d468927314 | |
parent | 12e22159388f9b4514cee372ddfd86c618872f1b (diff) | |
parent | cd2f1f807dbcd4a84b309380eeedcabf557852b5 (diff) |
Merge pull request #5945 from vespa-engine/jvenstad/deblock-system-app-order-across-parallel-zones
Jvenstad/deblock system app order across parallel zones
2 files changed, 23 insertions, 18 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgrader.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgrader.java index 9965d88c64e..516cd52d710 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgrader.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgrader.java @@ -50,11 +50,16 @@ public class SystemUpgrader extends Maintainer { private void deploy(List<SystemApplication> applications, Version target) { for (List<ZoneId> zones : controller().zoneRegistry().upgradePolicy().asList()) { boolean converged = true; - for (SystemApplication application : applications) { - if (application.dependencies().stream().allMatch(dep -> convergedOn(target, dep, zones))) { - deploy(zones, application, target); + for (ZoneId zone : zones) { + for (SystemApplication application : applications) { + boolean dependenciesConverged = application.dependencies().stream() + .filter(applications::contains) // TODO: Remove when all() is used. + .allMatch(dependency -> currentVersion(zone, dependency.id()).equals(target)); + if (dependenciesConverged) { + deploy(target, application, zone); + } + converged &= currentVersion(zone, application.id()).equals(target); } - converged &= convergedOn(target, application, zones); } if (!converged) { break; @@ -63,25 +68,19 @@ public class SystemUpgrader extends Maintainer { } /** Deploy application on given version idempotently */ - private void deploy(List<ZoneId> zones, SystemApplication application, Version target) { - for (ZoneId zone : zones) { - if (!wantedVersion(zone, application.id(), target).equals(target)) { - log.info(String.format("Deploying %s version %s in %s", application.id(), target, zone)); - controller().applications().deploy(application, zone, target); - } + private void deploy(Version target, SystemApplication application, ZoneId zone) { + if (!wantedVersion(zone, application.id(), target).equals(target)) { + log.info(String.format("Deploying %s version %s in %s", application.id(), target, zone)); + controller().applications().deploy(application, zone, target); } } - private boolean convergedOn(Version target, SystemApplication application, List<ZoneId> zones) { - return zones.stream().allMatch(zone -> currentVersion(zone, application.id(), target).equals(target)); - } - private Version wantedVersion(ZoneId zone, ApplicationId application, Version defaultVersion) { return minVersion(zone, application, Node::wantedVersion).orElse(defaultVersion); } - private Version currentVersion(ZoneId zone, ApplicationId application, Version defaultVersion) { - return minVersion(zone, application, Node::currentVersion).orElse(defaultVersion); + private Version currentVersion(ZoneId zone, ApplicationId application) { + return minVersion(zone, application, Node::currentVersion).orElse(Version.emptyVersion); } private Optional<Version> minVersion(ZoneId zone, ApplicationId application, Function<Node, Version> versionField) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgraderTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgraderTest.java index 3fbda16cb4a..1ec64f8d478 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgraderTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemUpgraderTest.java @@ -79,12 +79,18 @@ public class SystemUpgraderTest { assertWantedVersion(SystemApplication.configServer, version1, zone2, zone3, zone4); assertWantedVersion(SystemApplication.zone, version1, zone2, zone3, zone4); - // zone 2 and 3: zone-config-server upgrades in parallel + // zone 2 and 3: zone-config-server upgrades, first in zone 2, then in zone 3 tester.systemUpgrader().maintain(); assertWantedVersion(SystemApplication.configServer, version2, zone2, zone3); assertWantedVersion(SystemApplication.configServer, version1, zone4); assertWantedVersion(SystemApplication.zone, version1, zone2, zone3, zone4); - completeUpgrade(SystemApplication.configServer, version2, zone2, zone3); + completeUpgrade(SystemApplication.configServer, version2, zone2); + + // zone-application starts upgrading in zone 2, while zone-config-server completes upgrade in zone 3 + tester.systemUpgrader().maintain(); + assertWantedVersion(SystemApplication.zone, version2, zone2); + assertWantedVersion(SystemApplication.zone, version1, zone3); + completeUpgrade(SystemApplication.configServer, version2, zone3); // zone 2 and 3: zone-application upgrades in parallel tester.systemUpgrader().maintain(); |