diff options
author | Harald Musum <musum@yahooinc.com> | 2023-05-25 09:40:39 +0200 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2023-05-25 09:40:39 +0200 |
commit | ced4920c7eee03bcf5d1c081ec96c18d776878a9 (patch) | |
tree | 66f34a8e5b67d34f25f595c37a932c193281d68c /configserver | |
parent | 6a66fbde67c747ee6492cffa33ee2e8cfca28d97 (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.java | 14 |
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 { |