diff options
author | jonmv <venstad@gmail.com> | 2022-09-15 11:02:29 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2022-09-15 11:02:29 +0200 |
commit | 9aacbcb64e8919461290c771960c14faf2eb24a4 (patch) | |
tree | 8f0f2110e80629a7f37c14e58f1c9dc1f284f9a1 /controller-server | |
parent | 0b14387a4ff0166ca6c1df34ff702dc4387f617b (diff) |
Include all known deployments among "all version" in version status
Diffstat (limited to 'controller-server')
4 files changed, 35 insertions, 9 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java index 76925241c1e..3000c37ad1e 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java @@ -1,6 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.restapi.deployment; +import com.yahoo.component.Version; import com.yahoo.config.application.api.DeploymentInstanceSpec; import com.yahoo.config.application.api.DeploymentSpec; import com.yahoo.config.provision.ApplicationId; @@ -96,9 +97,9 @@ public class DeploymentApiHandler extends ThreadedHttpRequestHandler { var versionStatus = controller.readVersionStatus(); ApplicationList applications = ApplicationList.from(controller.applications().asList()).withJobs(); var deploymentStatuses = controller.jobController().deploymentStatuses(applications, versionStatus); - var deploymentStatistics = DeploymentStatistics.compute(versionStatus.versions().stream().map(VespaVersion::versionNumber).collect(toList()), - deploymentStatuses) - .stream().collect(toMap(DeploymentStatistics::version, identity())); + Map<Version, DeploymentStatistics> deploymentStatistics = DeploymentStatistics.compute(versionStatus.versions().stream().map(VespaVersion::versionNumber).collect(toList()), + deploymentStatuses) + .stream().collect(toMap(DeploymentStatistics::version, identity())); for (VespaVersion version : versionStatus.versions()) { Cursor versionObject = platformArray.addObject(); versionObject.setString("version", version.versionNumber().toString()); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java index 95cb7de3443..4002da4699a 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java @@ -3,10 +3,13 @@ package com.yahoo.vespa.hosted.controller.versions; import com.yahoo.component.Version; import com.yahoo.config.provision.HostName; +import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.hosted.controller.Controller; +import com.yahoo.vespa.hosted.controller.Instance; import com.yahoo.vespa.hosted.controller.api.identifiers.ControllerVersion; import com.yahoo.vespa.hosted.controller.api.integration.configserver.NodeFilter; import com.yahoo.vespa.hosted.controller.application.ApplicationList; +import com.yahoo.vespa.hosted.controller.application.Deployment; import com.yahoo.vespa.hosted.controller.application.SystemApplication; import com.yahoo.vespa.hosted.controller.maintenance.SystemUpgrader; import com.yahoo.vespa.hosted.controller.versions.VespaVersion.Confidence; @@ -15,6 +18,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; @@ -131,8 +135,13 @@ public record VersionStatus(List<VespaVersion> versions) { systemVersion = newSystemVersion; } + Set<Version> allVersions = new HashSet<>(infrastructureVersions.keySet()); + for (Application application : controller.applications().asList()) + for (Instance instance : application.instances().values()) + for (Deployment deployment : instance.deployments().values()) + allVersions.add(deployment.version()); - List<DeploymentStatistics> deploymentStatistics = DeploymentStatistics.compute(infrastructureVersions.keySet(), + List<DeploymentStatistics> deploymentStatistics = DeploymentStatistics.compute(allVersions, controller.jobController().deploymentStatuses(ApplicationList.from(controller.applications().asList()) .withProjectId() .withJobs())); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java index f0402eb764b..bd43a9dafbc 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java @@ -209,8 +209,8 @@ public class DeploymentContext { public DeploymentContext deployPlatform(Version version) { assertEquals(instance().change().platform().get(), version); assertFalse(application().instances().values().stream() - .anyMatch(instance -> instance.deployments().values().stream() - .anyMatch(deployment -> deployment.version().equals(version)))); + .anyMatch(instance -> instance.deployments().values().stream() + .anyMatch(deployment -> deployment.version().equals(version)))); assertEquals(version, instance().change().platform().get()); assertFalse(instance().change().revision().isPresent()); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java index 1bafbe8d464..ab262a1a3c5 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java @@ -5,6 +5,7 @@ import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.zone.ZoneApi; +import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.api.identifiers.ControllerVersion; @@ -132,6 +133,10 @@ public class VersionStatusTest { DeploymentTester tester = new DeploymentTester(); ApplicationPackage applicationPackage = applicationPackage("default"); + Version version0 = new Version("6.1"); + tester.controllerTester().upgradeSystem(version0); + var context0 = tester.newDeploymentContext("tenant1", "app0", "default").runJob(JobType.dev("us-east-1"), applicationPackage); + Version version1 = new Version("6.2"); Version version2 = new Version("6.3"); tester.controllerTester().upgradeSystem(version1); @@ -158,8 +163,13 @@ public class VersionStatusTest { tester.triggerJobs(); tester.controllerTester().computeVersionStatus(); + VersionStatus status = tester.controller().readVersionStatus(); + assertEquals(3, status.versions().size(), "The three versions above exist"); + + tester.controller().applications().deactivate(context0.instanceId(), JobType.dev("us-east-1").zone()); + tester.controllerTester().computeVersionStatus(); List<VespaVersion> versions = tester.controller().readVersionStatus().versions(); - assertEquals(2, versions.size(), "The two versions above exist"); + assertEquals(2, versions.size(), "The two last versions above exist after dev deployment is gone"); VespaVersion v1 = versions.get(0); assertEquals(version1, v1.versionNumber()); @@ -265,6 +275,7 @@ public class VersionStatusTest { .submit(conservativePolicy) .deploy(); + var devApp = tester.newDeploymentContext("dev", "app", "on-version-1"); // Applications that do not affect confidence calculation: // Application without deployment @@ -278,11 +289,16 @@ public class VersionStatusTest { tester.upgrader().maintain(); tester.triggerJobs(); - // Canaries upgrade to new versions and fail + // Dev app deploys to the new versions, and canaries also upgrade, and fail. + devApp.runJob(JobType.dev("us-east-1"), canaryApplicationPackage); + tester.controllerTester().computeVersionStatus(); + assertEquals(Confidence.low, confidence(tester.controller(), version1), "Just the dev app: Low"); + canary0.deployPlatform(version1); canary1.runJob(systemTest) .runJob(stagingTest) .failDeployment(productionUsWest1); + tester.controllerTester().computeVersionStatus(); assertEquals(Confidence.broken, confidence(tester.controller(), version1), "One canary failed: Broken"); @@ -297,7 +313,7 @@ public class VersionStatusTest { canary0.deployPlatform(version2); canary1.deployPlatform(version2); - assertEquals(Confidence.broken, confidence(tester.controller(), version1), "Confidence for remains unchanged for version1: Broken"); + assertEquals(Confidence.broken, confidence(tester.controller(), version1), "Confidence remains unchanged for version1: Broken"); assertEquals(Confidence.low, confidence(tester.controller(), version2), "Nothing has failed but not all canaries have upgraded: Low"); // Remaining canary upgrades to version2 which raises confidence to normal and more apps upgrade |