diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2023-06-09 09:13:32 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-09 09:13:32 +0200 |
commit | 838f918baf2f64b5cb737a59e624f20773d95baa (patch) | |
tree | d2f93f358f2e3494dc3eaf5c44d163c88bc6476e | |
parent | e3bda63e89a8b75edba41ec589de5b7ce1c934ba (diff) | |
parent | 221bc016ff8ac18f5639dd663f6c5ef7109406fd (diff) |
Merge pull request #27358 from vespa-engine/jonmv/stream-packages-down
Stream app packages for download
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); } } |