diff options
author | jonmv <venstad@gmail.com> | 2022-11-05 08:00:33 +0100 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2022-11-05 08:00:33 +0100 |
commit | fb23ab48306c0099afde67731a070723441b250a (patch) | |
tree | c138689ac3036b142556944648feda38a55ef8e7 | |
parent | 62f86b1196d6f7a616b3b69d701258ed35d00bf0 (diff) |
Close streams when deploying
2 files changed, 18 insertions, 11 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/application/CompressedApplicationInputStream.java b/configserver/src/main/java/com/yahoo/vespa/config/server/application/CompressedApplicationInputStream.java index 1ac52213323..01dd47765d2 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/application/CompressedApplicationInputStream.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/application/CompressedApplicationInputStream.java @@ -45,14 +45,13 @@ public class CompressedApplicationInputStream implements AutoCloseable { public static CompressedApplicationInputStream createFromCompressedStream(InputStream is, String contentType, long maxSizeInBytes) { try { Options options = Options.standard().maxSize(maxSizeInBytes).allowDotSegment(true); - switch (contentType) { - case ApplicationApiHandler.APPLICATION_X_GZIP: - return new CompressedApplicationInputStream(ArchiveStreamReader.ofTarGzip(is, options)); - case ApplicationApiHandler.APPLICATION_ZIP: - return new CompressedApplicationInputStream(ArchiveStreamReader.ofZip(is, options)); - default: - throw new BadRequestException("Unable to decompress"); - } + return switch (contentType) { + case ApplicationApiHandler.APPLICATION_X_GZIP -> + new CompressedApplicationInputStream(ArchiveStreamReader.ofTarGzip(is, options)); + case ApplicationApiHandler.APPLICATION_ZIP -> + new CompressedApplicationInputStream(ArchiveStreamReader.ofZip(is, options)); + default -> throw new BadRequestException("Unable to decompress"); + }; } catch (UncheckedIOException e) { throw new InternalServerException("Unable to create compressed application stream", e); } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandler.java index ad68073053d..60c1d75406a 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandler.java @@ -22,6 +22,8 @@ import com.yahoo.vespa.config.server.tenant.TenantRepository; import org.apache.hc.core5.http.ContentType; import java.io.IOException; +import java.io.InputStream; +import java.io.UncheckedIOException; import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.List; @@ -80,7 +82,8 @@ public class ApplicationApiHandler extends SessionHandler { if (multipartRequest) { try { Map<String, PartItem> parts = new MultiPartFormParser(request).readParts(); - byte[] params = parts.get(MULTIPART_PARAMS).data().readAllBytes(); + byte[] params; + try (InputStream part = parts.get(MULTIPART_PARAMS).data()) { params = part.readAllBytes(); } ; log.log(Level.FINE, "Deploy parameters: [{0}]", new String(params, StandardCharsets.UTF_8)); prepareParams = PrepareParams.fromJson(params, tenantName, zookeeperBarrierTimeout); PartItem appPackagePart = parts.get(MULTIPART_APPLICATION_PACKAGE); @@ -94,8 +97,13 @@ public class ApplicationApiHandler extends SessionHandler { compressedStream = createFromCompressedStream(request.getData(), request.getHeader(contentTypeHeader), maxApplicationPackageSize); } - PrepareResult result = applicationRepository.deploy(compressedStream, prepareParams); - return new SessionPrepareAndActivateResponse(result, request, prepareParams.getApplicationId(), zone); + try (compressedStream) { + PrepareResult result = applicationRepository.deploy(compressedStream, prepareParams); + return new SessionPrepareAndActivateResponse(result, request, prepareParams.getApplicationId(), zone); + } + catch (IOException e) { + throw new UncheckedIOException(e); + } } @Override |