diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2020-03-09 09:52:09 +0100 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2020-03-09 09:52:09 +0100 |
commit | 1871cb38829dcf43d64141ce4747a8b984a83397 (patch) | |
tree | f95e67b1cc5d3b749a8b92b662008727d9d7716e /controller-server | |
parent | 238581e9723fd2340192e7cd48c452286a25cd6b (diff) |
Expose compile version on separate path
Diffstat (limited to 'controller-server')
2 files changed, 31 insertions, 15 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index ddce8ee17c4..69c19caf086 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -48,7 +48,6 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId; import com.yahoo.vespa.hosted.controller.api.integration.configserver.ConfigServerException; import com.yahoo.vespa.hosted.controller.api.integration.configserver.Log; import com.yahoo.vespa.hosted.controller.api.integration.configserver.Node; -import com.yahoo.vespa.hosted.controller.api.integration.configserver.NotFoundException; import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationVersion; import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobId; import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType; @@ -85,6 +84,7 @@ import com.yahoo.vespa.hosted.controller.security.Credentials; import com.yahoo.vespa.hosted.controller.tenant.AthenzTenant; import com.yahoo.vespa.hosted.controller.tenant.CloudTenant; import com.yahoo.vespa.hosted.controller.tenant.Tenant; +import com.yahoo.vespa.hosted.controller.versions.VersionStatus; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; import com.yahoo.vespa.serviceview.bindings.ApplicationView; import com.yahoo.yolean.Exceptions; @@ -212,6 +212,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler { if (path.matches("/application/v4/tenant/{tenant}/cost/{month}")) return tenantCost(path.get("tenant"), path.get("month"), request); if (path.matches("/application/v4/tenant/{tenant}/application")) return applications(path.get("tenant"), Optional.empty(), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}")) return application(path.get("tenant"), path.get("application"), request); + if (path.matches("/application/v4/tenant/{tenant}/application/{application}/compile-version")) return compileVersion(path.get("tenant"), path.get("application")); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/deployment")) return JobControllerApiHandlerHelper.overviewResponse(controller, TenantAndApplicationId.from(path.get("tenant"), path.get("application")), request.getUri()); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/package")) return applicationPackage(path.get("tenant"), path.get("application"), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/deploying")) return deploying(path.get("tenant"), path.get("application"), "default", request); @@ -500,6 +501,13 @@ public class ApplicationApiHandler extends LoggingRequestHandler { return new SlimeJsonResponse(slime); } + private HttpResponse compileVersion(String tenantName, String applicationName) { + Slime slime = new Slime(); + slime.setObject().setString("compileVersion", + compileVersion(TenantAndApplicationId.from(tenantName, applicationName)).toFullString()); + return new SlimeJsonResponse(slime); + } + private HttpResponse instance(String tenantName, String applicationName, String instanceName, HttpRequest request) { Slime slime = new Slime(); toSlime(slime.setObject(), getInstance(tenantName, applicationName, instanceName), @@ -754,6 +762,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler { toSlime(object.setObject("outstandingChange"), status.outstandingChange(instance.name())); }); + // TODO jonmv: remove once clients use new path // Compile version. The version that should be used when building an application object.setString("compileVersion", compileVersion(application.id()).toFullString()); @@ -938,6 +947,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler { })); } + // TODO jonmv: remove once clients use new path // Compile version. The version that should be used when building an application object.setString("compileVersion", compileVersion(application.id()).toFullString()); @@ -1176,20 +1186,21 @@ public class ApplicationApiHandler extends LoggingRequestHandler { */ private Version compileVersion(TenantAndApplicationId id) { Version oldestPlatform = controller.applications().oldestInstalledPlatform(id); - return controller.versionStatus().versions().stream() - .filter(version -> version.confidence().equalOrHigherThan(VespaVersion.Confidence.low)) - .filter(VespaVersion::isReleased) - .map(VespaVersion::versionNumber) - .filter(version -> ! version.isAfter(oldestPlatform)) - .max(Comparator.naturalOrder()) - .orElseGet(() -> controller.mavenRepository().metadata().versions().stream() - .filter(version -> ! version.isAfter(oldestPlatform)) - .filter(version -> ! controller.versionStatus().versions().stream() - .map(VespaVersion::versionNumber) - .collect(Collectors.toSet()).contains(version)) - .max(Comparator.naturalOrder()) - .orElseThrow(() -> new IllegalStateException("No available releases of " + - controller.mavenRepository().artifactId()))); + VersionStatus versionStatus = controller.versionStatus(); + return versionStatus.versions().stream() + .filter(version -> version.confidence().equalOrHigherThan(VespaVersion.Confidence.low)) + .filter(VespaVersion::isReleased) + .map(VespaVersion::versionNumber) + .filter(version -> ! version.isAfter(oldestPlatform)) + .max(Comparator.naturalOrder()) + .orElseGet(() -> controller.mavenRepository().metadata().versions().stream() + .filter(version -> ! version.isAfter(oldestPlatform)) + .filter(version -> ! versionStatus.versions().stream() + .map(VespaVersion::versionNumber) + .collect(Collectors.toSet()).contains(version)) + .max(Comparator.naturalOrder()) + .orElseThrow(() -> new IllegalStateException("No available releases of " + + controller.mavenRepository().artifactId()))); } private HttpResponse setGlobalRotationOverride(String tenantName, String applicationName, String instanceName, String environment, String region, boolean inService, HttpRequest request) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java index 90254825f4c..b6f4fa22984 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java @@ -444,6 +444,11 @@ public class ApplicationApiTest extends ControllerContainerTest { .data("{\"majorVersion\":null}"), "{\"message\":\"Set major version to empty\"}"); + // GET compile version for an application + tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2/compile-version", GET) + .userIdentity(USER_ID), + "{\"compileVersion\":\"6.1.0\"}"); + // DELETE the pem deploy key tester.assertResponse(request("/application/v4/tenant/tenant2/application/application2/key", DELETE) .userIdentity(USER_ID) |