summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-07-14 16:01:21 +0200
committerHarald Musum <musum@verizonmedia.com>2020-07-14 16:01:21 +0200
commitfb1678058d8fbdc8467c54260c2fd06ab656ed40 (patch)
tree1c56ae51c3bff6aab131f8a8ae098736b573f469 /configserver
parent2aa5abc426c58dbb56791a045ec1b53735cc0551 (diff)
Add application package file reference to response
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionUtil.java5
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandler.java25
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java10
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/ApplicationHandlerTest.java4
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 {