summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-09-15 11:02:29 +0200
committerjonmv <venstad@gmail.com>2022-09-15 11:02:29 +0200
commit9aacbcb64e8919461290c771960c14faf2eb24a4 (patch)
tree8f0f2110e80629a7f37c14e58f1c9dc1f284f9a1 /controller-server
parent0b14387a4ff0166ca6c1df34ff702dc4387f617b (diff)
Include all known deployments among "all version" in version status
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java7
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java11
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java4
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java22
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