From 3a495a015c1c4acdcf00b9bd3c601b170fbef5d7 Mon Sep 17 00:00:00 2001 From: Jon Marius Venstad Date: Tue, 8 Mar 2022 17:57:48 +0100 Subject: Fix API response --- .../application/JobControllerApiHandlerHelper.java | 27 ++++++++++++---------- .../application/responses/deployment-overview.json | 8 ------- .../restapi/playground/DeploymentPlayground.java | 1 - 3 files changed, 15 insertions(+), 21 deletions(-) diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java index 2b52143f574..189192d8d9a 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java @@ -266,10 +266,12 @@ class JobControllerApiHandlerHelper { stepObject.setBool("declared", stepStatus.isDeclared()); stepObject.setString("instance", stepStatus.instance().value()); - stepStatus.readyAt(change).ifPresent(ready -> stepObject.setLong("readyAt", ready.toEpochMilli())); - stepStatus.readyAt(change) - .filter(controller.clock().instant()::isBefore) - .ifPresent(until -> stepObject.setLong("delayedUntil", until.toEpochMilli())); + // TODO: recursively search dependents for what is the relevant partial change when this is a delay step ... + Optional readyAt = stepStatus.job().map(jobsToRun::get).map(jobs -> jobs.get(0).readyAt()) + .orElse(stepStatus.readyAt(change)); + readyAt.ifPresent(ready -> stepObject.setLong("readyAt", ready.toEpochMilli())); + readyAt.filter(controller.clock().instant()::isBefore) + .ifPresent(until -> stepObject.setLong("delayedUntil", until.toEpochMilli())); stepStatus.pausedUntil().ifPresent(until -> stepObject.setLong("pausedUntil", until.toEpochMilli())); stepStatus.coolingDownUntil(change).ifPresent(until -> stepObject.setLong("coolingDownUntil", until.toEpochMilli())); stepStatus.blockedUntil(Change.of(controller.systemVersion(versionStatus))) // Dummy version — just anything with a platform. @@ -304,17 +306,17 @@ class JobControllerApiHandlerHelper { for (VespaVersion available : availablePlatforms) { if ( deployments.stream().anyMatch(deployment -> deployment.version().isAfter(available.versionNumber())) || deployments.stream().noneMatch(deployment -> deployment.version().isBefore(available.versionNumber())) && ! deployments.isEmpty() - || change.platform().map(available.versionNumber()::compareTo).orElse(1) < 0) + || status.hasCompleted(stepStatus.instance(), Change.of(available.versionNumber())) + || change.platform().map(available.versionNumber()::compareTo).orElse(1) <= 0) break; - Cursor availableObject = availableArray.addObject(); - availableObject.setString("platform", available.versionNumber().toFullString()); + availableArray.addObject().setString("platform", available.versionNumber().toFullString()); } + change.platform().ifPresent(version -> availableArray.addObject().setString("platform", version.toFullString())); toSlime(latestPlatformObject.setArray("blockers"), blockers.stream().filter(ChangeBlocker::blocksVersions)); } - List availableApplications = new ArrayList<>(application.versions()); + List availableApplications = new ArrayList<>(application.deployableVersions(false)); if ( ! availableApplications.isEmpty()) { - Collections.reverse(availableApplications); var latestApplication = availableApplications.get(0); Cursor latestApplicationObject = latestVersionsObject.setObject("application"); toSlime(latestApplicationObject.setObject("application"), latestApplication); @@ -326,12 +328,13 @@ class JobControllerApiHandlerHelper { for (ApplicationVersion available : availableApplications) { if ( deployments.stream().anyMatch(deployment -> deployment.applicationVersion().compareTo(available) > 0) || deployments.stream().noneMatch(deployment -> deployment.applicationVersion().compareTo(available) < 0) && ! deployments.isEmpty() - || change.application().map(available::compareTo).orElse(1) < 0) + || status.hasCompleted(stepStatus.instance(), Change.of(available)) + || change.application().map(available::compareTo).orElse(1) <= 0) break; - Cursor availableObject = availableArray.addObject(); - toSlime(availableObject.setObject("application"), available); + toSlime(availableArray.addObject().setObject("application"), available); } + change.application().ifPresent(version -> toSlime(availableArray.addObject().setObject("application"), version)); toSlime(latestApplicationObject.setArray("blockers"), blockers.stream().filter(ChangeBlocker::blocksRevisions)); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json index 8677b621f0d..c0a6829b026 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json @@ -577,14 +577,6 @@ "commit": "commit1" } }, - { - "application": { - "build": 3, - "compileVersion": "6.1.0", - "sourceUrl": "repository1/tree/commit1", - "commit": "commit1" - } - }, { "application": { "build": 2, diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/playground/DeploymentPlayground.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/playground/DeploymentPlayground.java index bf41a34c62b..2c91aceb8b0 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/playground/DeploymentPlayground.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/playground/DeploymentPlayground.java @@ -61,7 +61,6 @@ public class DeploymentPlayground extends ControllerContainerTest { domainMock.markAsVespaTenant(); domainMock.admin(AllowingFilter.user.getIdentity()); - Map instances = new LinkedHashMap<>(); for (String name : List.of("alpha", "beta", "prod5", "prod25", "prod100")) instances.put(name, deploymentTester.newDeploymentContext("gemini", "core", name)); -- cgit v1.2.3