diff options
4 files changed, 33 insertions, 11 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionUtil.java b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionUtil.java index c06e4da2b7b..de3a2b47233 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionUtil.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionUtil.java @@ -1,6 +1,7 @@ package com.yahoo.vespa.config.server.filedistribution; import com.yahoo.cloud.config.ConfigserverConfig; +import com.yahoo.config.FileReference; import com.yahoo.config.subscription.ConfigSourceSet; import com.yahoo.jrt.Supervisor; import com.yahoo.jrt.Transport; @@ -50,6 +51,10 @@ public class FileDistributionUtil { return configServers.size() > 0 ? new JRTConnectionPool(new ConfigSourceSet(configServers)) : emptyConnectionPool(); } + public static boolean fileReferenceExistsOnDisk(File downloadDirectory, FileReference applicationPackageReference) { + return getFileReferencesOnDisk(downloadDirectory).contains(applicationPackageReference.value()); + } + static ConnectionPool emptyConnectionPool() { return new EmptyConnectionPool(); } 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 d1861184c24..749f57b3104 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 @@ -3,6 +3,7 @@ package com.yahoo.vespa.config.server.http.v2; import com.google.inject.Inject; import com.yahoo.component.Version; +import com.yahoo.config.FileReference; import com.yahoo.config.application.api.ApplicationFile; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationName; @@ -24,8 +25,11 @@ 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.session.RemoteSession; import com.yahoo.vespa.config.server.tenant.Tenant; +import com.yahoo.vespa.defaults.Defaults; +import java.io.File; import java.io.IOException; import java.time.Duration; import java.util.List; @@ -34,6 +38,8 @@ import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; +import static com.yahoo.vespa.config.server.filedistribution.FileDistributionUtil.fileReferenceExistsOnDisk; + /** * Operations on applications (delete, wait for config convergence, restart, application content etc.) * @@ -154,11 +160,25 @@ public class ApplicationHandler extends HttpHandler { } } + return getApplicationResponse(applicationId); + } + + GetApplicationResponse getApplicationResponse(ApplicationId applicationId) { Tenant tenant = applicationRepository.getTenant(applicationId); Optional<ApplicationSet> applicationSet = applicationRepository.getCurrentActiveApplicationSet(tenant, applicationId); + String applicationPackage = ""; + RemoteSession session = applicationRepository.getActiveSession(applicationId); + if (session != null) { + FileReference applicationPackageReference = session.getApplicationPackageReference(); + File downloadDirectory = new File(Defaults.getDefaults().underVespaHome(applicationRepository.configserverConfig().fileReferencesDir())); + if (applicationPackageReference != null && ! fileReferenceExistsOnDisk(downloadDirectory, applicationPackageReference)) + applicationPackage = applicationPackageReference.value(); + } + return new GetApplicationResponse(Response.Status.OK, applicationRepository.getApplicationGeneration(applicationId), - applicationSet.get().getAllVersions(applicationId)); + applicationSet.get().getAllVersions(applicationId), + applicationPackage); } @Override @@ -316,9 +336,10 @@ public class ApplicationHandler extends HttpHandler { } private static class GetApplicationResponse extends JSONResponse { - GetApplicationResponse(int status, long generation, List<Version> modelVersions) { + GetApplicationResponse(int status, long generation, List<Version> modelVersions, String applicationPackageReference) { super(status); object.setLong("generation", generation); + object.setString("applicationPackageFileReference", applicationPackageReference); Cursor modelVersionArray = object.setArray("modelVersions"); modelVersions.forEach(version -> modelVersionArray.addString(version.toFullString())); } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java index 7c983ab48a0..ccbad4e21c7 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java @@ -16,11 +16,10 @@ import com.yahoo.vespa.flags.Flags; import java.io.File; import java.time.Duration; -import java.util.Set; import java.util.logging.Logger; -import static com.yahoo.vespa.config.server.filedistribution.FileDistributionUtil.getFileReferencesOnDisk; import static com.yahoo.vespa.config.server.filedistribution.FileDistributionUtil.createConnectionPool; +import static com.yahoo.vespa.config.server.filedistribution.FileDistributionUtil.fileReferenceExistsOnDisk; /** * Verifies that all active sessions has an application package on local disk. @@ -65,7 +64,7 @@ public class ApplicationPackageMaintainer extends ConfigServerMaintainer { log.fine(() -> "Verifying application package file reference " + applicationPackage + " for session " + sessionId); if (applicationPackage != null) { - if (missingOnDisk(applicationPackage)) { + if (! fileReferenceExistsOnDisk(downloadDirectory, applicationPackage)) { log.fine(() -> "Downloading missing application package for application " + applicationId + " - session " + sessionId); if (fileDownloader.getFile(applicationPackage).isEmpty()) { @@ -86,9 +85,4 @@ public class ApplicationPackageMaintainer extends ConfigServerMaintainer { sessionRepository.createLocalSessionUsingDistributedApplicationPackage(sessionId); } - private boolean missingOnDisk(FileReference applicationPackageReference) { - Set<String> fileReferencesOnDisk = getFileReferencesOnDisk(downloadDirectory); - return ! fileReferencesOnDisk.contains(applicationPackageReference.value()); - } - } 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 eca32cd364a..1a558f89284 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 @@ -353,7 +353,9 @@ public class ApplicationHandlerTest { HttpResponse response = createApplicationHandler().handle(HttpRequest.createTestRequest(url, GET)); assertEquals(200, response.getStatus()); String renderedString = SessionHandlerTest.getRenderedString(response); - assertEquals("{\"generation\":" + expectedGeneration + ",\"modelVersions\":[\"" + expectedVersion.toFullString() + "\"]}", renderedString); + assertEquals("{\"generation\":" + expectedGeneration + + ",\"applicationPackageFileReference\":\"\"" + + ",\"modelVersions\":[\"" + expectedVersion.toFullString() + "\"]}", renderedString); } private void assertApplicationExists(ApplicationId applicationId, Zone zone) throws IOException { |