diff options
6 files changed, 24 insertions, 8 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java index c8b99e2c3a0..0f5540b8a12 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java @@ -405,6 +405,14 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye return getApplication(applicationId).getApplicationGeneration(); } + public List<Version> getApplicationVersions(ApplicationId applicationId) { + Tenant tenant = tenantRepository.getTenant(applicationId.tenant()); + if (tenant == null) throw new NotFoundException("Tenant '" + applicationId.tenant() + "' not found"); + long sessionId = getSessionIdForApplication(tenant, applicationId); + RemoteSession session = tenant.getRemoteSessionRepo().getSession(sessionId); + return session.applicationSet().getAllApplicationVersions(); + } + public void restart(ApplicationId applicationId, HostFilter hostFilter) { hostProvisioner.ifPresent(provisioner -> provisioner.restart(applicationId, hostFilter)); } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/application/ApplicationSet.java b/configserver/src/main/java/com/yahoo/vespa/config/server/application/ApplicationSet.java index 41119077b28..7c429ed9dcd 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/application/ApplicationSet.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/application/ApplicationSet.java @@ -96,4 +96,8 @@ public final class ApplicationSet { return new ArrayList<>(applications.values()); } + public List<Version> getAllApplicationVersions() { + return new ArrayList<>(applications.keySet()); + } + } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java index e18c6ad6c56..c9657175eaf 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java @@ -13,6 +13,7 @@ import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.jdisc.Response; import com.yahoo.jdisc.application.BindingMatch; +import com.yahoo.slime.Cursor; import com.yahoo.vespa.config.server.ApplicationRepository; import com.yahoo.vespa.config.server.http.ContentHandler; import com.yahoo.vespa.config.server.http.ContentRequest; @@ -20,9 +21,9 @@ import com.yahoo.vespa.config.server.http.HttpErrorResponse; import com.yahoo.vespa.config.server.http.HttpHandler; import com.yahoo.vespa.config.server.http.JSONResponse; import com.yahoo.vespa.config.server.http.NotFoundException; -import com.yahoo.vespa.config.server.tenant.Tenant; import java.time.Duration; +import java.util.List; import java.util.Optional; /** @@ -112,7 +113,9 @@ public class ApplicationHandler extends HttpHandler { return new ApplicationSuspendedResponse(applicationRepository.isSuspended(applicationId)); } - return new GetApplicationResponse(Response.Status.OK, applicationRepository.getApplicationGeneration(applicationId)); + return new GetApplicationResponse(Response.Status.OK, + applicationRepository.getApplicationGeneration(applicationId), + applicationRepository.getApplicationVersions(applicationId)); } @Override @@ -244,9 +247,11 @@ public class ApplicationHandler extends HttpHandler { } private static class GetApplicationResponse extends JSONResponse { - GetApplicationResponse(int status, long generation) { + GetApplicationResponse(int status, long generation, List<Version> versions) { super(status); object.setLong("generation", generation); + Cursor versionsArray = object.setArray("configModelVersions"); + versions.forEach(version -> versionsArray.addString(version.toFullString())); } } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/RemoteSession.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/RemoteSession.java index 26f437920ad..b8320ea865e 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/RemoteSession.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/RemoteSession.java @@ -134,4 +134,7 @@ public class RemoteSession extends Session { transaction.close(); } + public ApplicationSet applicationSet() { + return applicationSet; + } } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandler.java index 2f9a5eb9277..5926f64cf87 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRequestHandler.java @@ -2,7 +2,6 @@ package com.yahoo.vespa.config.server.tenant; import com.yahoo.component.Version; -import com.yahoo.concurrent.StripedExecutor; import com.yahoo.config.FileReference; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.TenantName; @@ -20,13 +19,11 @@ import com.yahoo.vespa.config.server.application.ApplicationMapper; import com.yahoo.vespa.config.server.application.ApplicationSet; import com.yahoo.vespa.config.server.application.TenantApplications; import com.yahoo.vespa.config.server.application.VersionDoesNotExistException; -import com.yahoo.vespa.config.server.host.HostRegistries; import com.yahoo.vespa.config.server.host.HostRegistry; import com.yahoo.vespa.config.server.host.HostValidator; import com.yahoo.vespa.config.server.monitoring.MetricUpdater; import com.yahoo.vespa.config.server.monitoring.Metrics; import com.yahoo.vespa.config.server.rpc.ConfigResponseFactory; -import com.yahoo.vespa.curator.Curator; import com.yahoo.vespa.curator.Lock; import java.time.Clock; @@ -35,7 +32,6 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Optional; import java.util.Set; -import java.util.concurrent.ExecutorService; import static java.util.stream.Collectors.toSet; diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java index 41db57ab1e0..ee9ab5c3af5 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java @@ -270,7 +270,7 @@ public class ApplicationHandlerTest { private void assertApplicationGeneration(String url, long expectedGeneration) throws IOException { HttpResponse response = createApplicationHandler().handle(HttpRequest.createTestRequest(url, com.yahoo.jdisc.http.HttpRequest.Method.GET)); - HandlerTest.assertHttpStatusCodeAndMessage(response, 200, "{\"generation\":" + expectedGeneration + "}"); + HandlerTest.assertHttpStatusCodeAndMessage(response, 200, "{\"generation\":" + expectedGeneration + ",\"configModelVersions\":[\"7.0.0\"]}"); } private void assertApplicationExists(ApplicationId applicationId, Zone zone) throws IOException { |