aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2023-06-09 09:13:32 +0200
committerGitHub <noreply@github.com>2023-06-09 09:13:32 +0200
commit838f918baf2f64b5cb737a59e624f20773d95baa (patch)
treed2f93f358f2e3494dc3eaf5c44d163c88bc6476e
parente3bda63e89a8b75edba41ec589de5b7ce1c934ba (diff)
parent221bc016ff8ac18f5639dd663f6c5ef7109406fd (diff)
Merge pull request #27358 from vespa-engine/jonmv/stream-packages-down
Stream app packages for download
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java22
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ZipResponse.java7
2 files changed, 20 insertions, 9 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 426c89ff20e..bead0663316 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
@@ -135,6 +135,7 @@ import com.yahoo.yolean.Exceptions;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.io.UncheckedIOException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -985,8 +986,12 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
private HttpResponse devApplicationPackage(ApplicationId id, JobType type) {
ZoneId zone = type.zone();
RevisionId revision = controller.jobController().last(id, type).get().versions().targetRevision();
- byte[] applicationPackage = controller.applications().applicationStore().get(new DeploymentId(id, zone), revision);
- return new ZipResponse(id.toFullString() + "." + zone.value() + ".zip", applicationPackage);
+ try (InputStream applicationPackage = controller.applications().applicationStore().stream(new DeploymentId(id, zone), revision)) {
+ return new ZipResponse(id.toFullString() + "." + zone.value() + ".zip", applicationPackage);
+ }
+ catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
}
private HttpResponse devApplicationPackageDiff(RunId runId) {
@@ -1019,11 +1024,16 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
}
RevisionId revision = RevisionId.forProduction(build);
boolean tests = request.getBooleanProperty("tests");
- byte[] applicationPackage = tests ?
- controller.applications().applicationStore().getTester(tenantAndApplication.tenant(), tenantAndApplication.application(), revision) :
- controller.applications().applicationStore().get(new DeploymentId(tenantAndApplication.defaultInstance(), ZoneId.defaultId()), revision);
String filename = tenantAndApplication + (tests ? "-tests" : "-build") + revision.number() + ".zip";
- return new ZipResponse(filename, applicationPackage);
+ InputStream applicationPackage = tests ?
+ controller.applications().applicationStore().streamTester(tenantAndApplication.tenant(), tenantAndApplication.application(), revision) :
+ controller.applications().applicationStore().stream(new DeploymentId(tenantAndApplication.defaultInstance(), ZoneId.defaultId()), revision);
+ try (applicationPackage) {
+ return new ZipResponse(filename, applicationPackage);
+ }
+ catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
}
private HttpResponse applicationPackageDiff(String tenant, String application, String number) {
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ZipResponse.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ZipResponse.java
index ffbe12ba1b2..5262d36ef11 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ZipResponse.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ZipResponse.java
@@ -4,6 +4,7 @@ package com.yahoo.vespa.hosted.controller.restapi.application;
import com.yahoo.container.jdisc.HttpResponse;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStream;
/**
@@ -13,9 +14,9 @@ import java.io.OutputStream;
*/
public class ZipResponse extends HttpResponse {
- private final byte[] zipContent;
+ private final InputStream zipContent;
- public ZipResponse(String filename, byte[] zipContent) {
+ public ZipResponse(String filename, InputStream zipContent) {
super(200);
this.zipContent = zipContent;
this.headers().add("Content-Disposition", "attachment; filename=\"" + filename + "\"");
@@ -28,7 +29,7 @@ public class ZipResponse extends HttpResponse {
@Override
public void render(OutputStream outputStream) throws IOException {
- outputStream.write(zipContent);
+ zipContent.transferTo(outputStream);
}
}