summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2022-11-05 08:06:00 +0100
committerGitHub <noreply@github.com>2022-11-05 08:06:00 +0100
commit36374eb2d3cc94c3792dd0a70963244abb6284b4 (patch)
tree1be3a49a4facf363a5d6eba23f4ea5733c9b0361
parentcc18a4e5ce94ad1567f91b87c8924fc836b9f746 (diff)
parent9b2aaa0eda6d0a04161e753747e364a3dd6664c0 (diff)
Merge pull request #24766 from vespa-engine/jonmv/close-streams-and-add-spammy-log
Jonmv/close streams and add spammy log
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/application/CompressedApplicationInputStream.java15
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandler.java14
-rw-r--r--container-core/src/main/java/com/yahoo/container/jdisc/utils/MultiPartFormParser.java3
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) {