diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2022-11-05 08:06:00 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-05 08:06:00 +0100 |
commit | 36374eb2d3cc94c3792dd0a70963244abb6284b4 (patch) | |
tree | 1be3a49a4facf363a5d6eba23f4ea5733c9b0361 | |
parent | cc18a4e5ce94ad1567f91b87c8924fc836b9f746 (diff) | |
parent | 9b2aaa0eda6d0a04161e753747e364a3dd6664c0 (diff) |
Merge pull request #24766 from vespa-engine/jonmv/close-streams-and-add-spammy-log
Jonmv/close streams and add spammy log
3 files changed, 21 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 diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/utils/MultiPartFormParser.java b/container-core/src/main/java/com/yahoo/container/jdisc/utils/MultiPartFormParser.java index 104d2f8ae4a..964cadb8065 100644 --- a/container-core/src/main/java/com/yahoo/container/jdisc/utils/MultiPartFormParser.java +++ b/container-core/src/main/java/com/yahoo/container/jdisc/utils/MultiPartFormParser.java @@ -9,6 +9,8 @@ import java.io.IOException; import java.io.InputStream; import java.util.Map; import java.util.TreeMap; +import java.util.logging.Level; +import java.util.logging.Logger; /** * Wrapper around Jetty's {@link MultiPartFormInputStream}. @@ -44,6 +46,7 @@ public class MultiPartFormParser { private PartItem(Part servletPart) throws IOException { this(servletPart.getName(), servletPart.getInputStream(), servletPart.getContentType()); + Logger.getLogger(MultiPartFormParser.class.getName()).log(Level.INFO, servletPart.toString()); } public PartItem(String name, InputStream data, String contentType) { |