summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2020-04-09 15:48:14 +0200
committerJon Marius Venstad <venstad@gmail.com>2020-04-09 15:48:14 +0200
commita5b22190b5b3617d626e2c9425ae32131bfbafcf (patch)
treeaa08e50fa6fc824e5c6b93af15815cc3e8891f48 /controller-server
parentaf1a26a9030cd50ed849475fe796b4d5e5305a4d (diff)
Add some more job data in deployment API
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiHandler.java46
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json90
2 files changed, 107 insertions, 29 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 ec1ff1ebc99..f17b61ed01a 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
@@ -18,7 +18,9 @@ import com.yahoo.slime.Slime;
import com.yahoo.vespa.hosted.controller.Controller;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType;
import com.yahoo.vespa.hosted.controller.application.ApplicationList;
+import com.yahoo.vespa.hosted.controller.application.Change;
import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId;
+import com.yahoo.vespa.hosted.controller.deployment.DeploymentStatus;
import com.yahoo.vespa.hosted.controller.deployment.Run;
import com.yahoo.vespa.hosted.controller.restapi.application.EmptyResponse;
import com.yahoo.vespa.hosted.controller.versions.DeploymentStatistics;
@@ -26,7 +28,8 @@ import com.yahoo.vespa.hosted.controller.versions.VespaVersion;
import com.yahoo.yolean.Exceptions;
import java.util.LinkedHashMap;
-import java.util.List;
+import java.util.Map;
+import java.util.Optional;
import java.util.logging.Level;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -121,9 +124,13 @@ public class DeploymentApiHandler extends LoggingRequestHandler {
applicationObject.setString("status", run.status().name());
}
- var jobsByInstance = deploymentStatuses.asList().stream()
- .flatMap(status -> status.instanceJobs().entrySet().stream())
- .collect(toUnmodifiableMap(jobs -> jobs.getKey(), jobs -> jobs.getValue()));
+ var statusByInstance = deploymentStatuses.asList().stream()
+ .flatMap(status -> status.instanceJobs().keySet().stream()
+ .map(instance -> Map.entry(instance, status)))
+ .collect(toUnmodifiableMap(entry -> entry.getKey(), entry -> entry.getValue()));
+ var jobsByInstance = statusByInstance.entrySet().stream()
+ .collect(toUnmodifiableMap(entry -> entry.getKey(),
+ entry -> entry.getValue().instanceJobs().get(entry.getKey())));
Cursor productionArray = versionObject.setArray("productionApplications");
statistics.productionSuccesses().stream()
.collect(groupingBy(run -> run.id().application()))
@@ -160,22 +167,33 @@ public class DeploymentApiHandler extends LoggingRequestHandler {
LinkedHashMap::new,
toList())))
.forEach((instance, runs) -> {
+ var status = statusByInstance.get(instance);
Cursor instanceObject = instancesArray.addObject();
instanceObject.setString("tenant", instance.tenant().value());
instanceObject.setString("application", instance.application().value());
instanceObject.setString("instance", instance.instance().value());
- instanceObject.setLong("productionJobCount", jobsByInstance.get(instance).production().size());
- instanceObject.setString("upgradePolicy", toString(deploymentStatuses.matching(status -> status.application().id().equals(TenantAndApplicationId.from(instance)))
- .first().map(status -> status.application().deploymentSpec())
- .flatMap(spec -> spec.instance(instance.instance()).map(DeploymentInstanceSpec::upgradePolicy))
- .orElse(DeploymentSpec.UpgradePolicy.defaultPolicy)));
- Cursor allJobsObject = instanceObject.setObject("allJobs");
- Cursor upgradeJobsObject = instanceObject.setObject("upgradeJobs");
+ instanceObject.setBool("upgrading", status.application().require(instance.instance()).change().platform().equals(Optional.of(statistics.version())));
+ status.instanceSteps().get(instance.instance()).blockedUntil(Change.of(statistics.version()))
+ .ifPresent(until -> instanceObject.setLong("blockedUntil", until.toEpochMilli()));
+ instanceObject.setString("upgradePolicy", toString(status.application().deploymentSpec().instance(instance.instance())
+ .map(DeploymentInstanceSpec::upgradePolicy)
+ .orElse(DeploymentSpec.UpgradePolicy.defaultPolicy)));
+ Cursor jobsArray = instanceObject.setArray("jobs");
+ status.jobSteps().forEach((job, jobStatus) -> {
+ if ( ! job.application().equals(instance)) return;
+ Cursor jobObject = jobsArray.addObject();
+ jobObject.setString("name", job.type().jobName());
+ jobStatus.pausedUntil().ifPresent(until -> jobObject.setLong("pausedUntil", until.toEpochMilli()));
+ jobStatus.coolingDownUntil(status.application().require(instance.instance()).change())
+ .ifPresent(until -> jobObject.setLong("coolingDownUntil", until.toEpochMilli()));
+ });
+ Cursor allRunsObject = instanceObject.setObject("allRuns");
+ Cursor upgradeRunsObject = instanceObject.setObject("upgradeRuns");
runs.forEach((type, rs) -> {
- Cursor jobObject = allJobsObject.setObject(type.jobName());
- Cursor upgradeObject = upgradeJobsObject.setObject(type.jobName());
+ Cursor runObject = allRunsObject.setObject(type.jobName());
+ Cursor upgradeObject = upgradeRunsObject.setObject(type.jobName());
for (RunInfo run : rs) {
- toSlime(jobObject, run.run);
+ toSlime(runObject, run.run);
if (run.upgrade)
toSlime(upgradeObject, run.run);
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json
index f44c3bce8a8..8a455dc6e78 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json
@@ -35,9 +35,22 @@
"tenant": "tenant1",
"application": "application1",
"instance": "default",
- "productionJobCount": 1,
+ "upgrading": false,
"upgradePolicy": "default",
- "allJobs": {
+ "jobs": [
+ {
+ "name": "system-test",
+ "coolingDownUntil": "(ignore)"
+ },
+ {
+ "name": "staging-test",
+ "coolingDownUntil": "(ignore)"
+ },
+ {
+ "name": "production-us-west-1"
+ }
+ ],
+ "allRuns": {
"production-us-west-1": {
"success": {
"number": 1,
@@ -47,7 +60,7 @@
}
}
},
- "upgradeJobs": {
+ "upgradeRuns": {
"production-us-west-1": {
"success": {
"number": 1,
@@ -62,9 +75,20 @@
"tenant": "tenant2",
"application": "application2",
"instance": "i2",
- "productionJobCount": 1,
+ "upgrading": false,
"upgradePolicy": "default",
- "allJobs": {
+ "jobs": [
+ {
+ "name": "system-test"
+ },
+ {
+ "name": "staging-test"
+ },
+ {
+ "name": "production-us-west-1"
+ }
+ ],
+ "allRuns": {
"production-us-west-1": {
"success": {
"number": 1,
@@ -74,7 +98,7 @@
}
}
},
- "upgradeJobs": {
+ "upgradeRuns": {
"production-us-west-1": {
"success": {
"number": 1,
@@ -164,9 +188,22 @@
"tenant": "tenant1",
"application": "application1",
"instance": "default",
- "productionJobCount": 1,
+ "upgrading": true,
"upgradePolicy": "default",
- "allJobs": {
+ "jobs": [
+ {
+ "name": "system-test",
+ "coolingDownUntil": "(ignore)"
+ },
+ {
+ "name": "staging-test",
+ "coolingDownUntil": "(ignore)"
+ },
+ {
+ "name": "production-us-west-1"
+ }
+ ],
+ "allRuns": {
"system-test": {
"failing": {
"number": 2,
@@ -194,7 +231,7 @@
}
}
},
- "upgradeJobs": {
+ "upgradeRuns": {
"system-test": {
"failing": {
"number": 2,
@@ -227,9 +264,21 @@
"tenant": "tenant2",
"application": "application2",
"instance": "i1",
- "productionJobCount": 1,
+ "upgrading": false,
"upgradePolicy": "default",
- "allJobs": {
+ "jobs": [
+ {
+ "name": "system-test",
+ "coolingDownUntil": "(ignore)"
+ },
+ {
+ "name": "staging-test"
+ },
+ {
+ "name": "production-us-west-1"
+ }
+ ],
+ "allRuns": {
"system-test": {
"failing": {
"number": 3,
@@ -254,7 +303,7 @@
}
}
},
- "upgradeJobs": {
+ "upgradeRuns": {
"system-test": {},
"staging-test": {},
"production-us-west-1": {
@@ -271,9 +320,20 @@
"tenant": "tenant2",
"application": "application2",
"instance": "i2",
- "productionJobCount": 1,
+ "upgrading": true,
"upgradePolicy": "default",
- "allJobs": {
+ "jobs": [
+ {
+ "name": "system-test"
+ },
+ {
+ "name": "staging-test"
+ },
+ {
+ "name": "production-us-west-1"
+ }
+ ],
+ "allRuns": {
"production-us-west-1": {
"running": {
"number": 2,
@@ -296,7 +356,7 @@
}
}
},
- "upgradeJobs": {
+ "upgradeRuns": {
"production-us-west-1": {
"running": {
"number": 2,