aboutsummaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2023-05-25 09:40:39 +0200
committerHarald Musum <musum@yahooinc.com>2023-05-25 09:40:39 +0200
commitced4920c7eee03bcf5d1c081ec96c18d776878a9 (patch)
tree66f34a8e5b67d34f25f595c37a932c193281d68c /configserver
parent6a66fbde67c747ee6492cffa33ee2e8cfca28d97 (diff)
Log more when parsing multipart deployment fails
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/v2/ApplicationApiHandler.java14
1 files changed, 10 insertions, 4 deletions
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 8891f108af9..1ce6902abd0 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
@@ -30,11 +30,13 @@ import java.time.Duration;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import java.util.logging.Level;
import static com.yahoo.vespa.config.server.application.CompressedApplicationInputStream.createFromCompressedStream;
import static com.yahoo.vespa.config.server.http.Utils.checkThatTenantExists;
import static com.yahoo.vespa.config.server.http.v2.SessionCreateHandler.validateDataAndHeader;
+import static java.util.logging.Level.FINE;
+import static java.util.logging.Level.INFO;
+import static java.util.logging.Level.WARNING;
/**
* * The implementation of the /application/v2 API.
@@ -81,18 +83,22 @@ public class ApplicationApiHandler extends SessionHandler {
.map(contentType -> contentType.getMimeType().equalsIgnoreCase(MULTIPART_FORM_DATA))
.orElse(false);
if (multipartRequest) {
+ Map<String, PartItem> parts = Map.of();
try {
- Map<String, PartItem> parts = new MultiPartFormParser(request).readParts();
+ parts = new MultiPartFormParser(request).readParts();
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));
+ log.log(FINE, "Deploy parameters: [{0}]", new String(params, StandardCharsets.UTF_8));
prepareParams = PrepareParams.fromJson(params, tenantName, zookeeperBarrierTimeout);
PartItem appPackagePart = parts.get(MULTIPART_APPLICATION_PACKAGE);
compressedStream = createFromCompressedStream(appPackagePart.data(), appPackagePart.contentType(), maxApplicationPackageSize);
} catch (IOException e) {
// Multipart exception happens when controller abandons the request due to other exceptions while deploying.
- log.log(e instanceof MultiPartFormParser.MultiPartException ? Level.INFO : Level.WARNING,
+ log.log(e instanceof MultiPartFormParser.MultiPartException ? INFO : WARNING,
"Unable to parse multipart in deploy from tenant '" + tenantName.value() + "': " + Exceptions.toMessageString(e));
+
+ var message = "Deploy request from '" + tenantName.value() + "' contains invalid data: " + e.getMessage();
+ log.log(INFO, message + ", parts: " + parts, e);
throw new BadRequestException("Deploy request from '" + tenantName.value() + "' contains invalid data: " + e.getMessage());
}
} else {