summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-11-05 08:00:33 +0100
committerjonmv <venstad@gmail.com>2022-11-05 08:00:33 +0100
commitfb23ab48306c0099afde67731a070723441b250a (patch)
treec138689ac3036b142556944648feda38a55ef8e7
parent62f86b1196d6f7a616b3b69d701258ed35d00bf0 (diff)
Close streams when deploying
-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
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