summaryrefslogtreecommitdiffstats
path: root/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java')
-rw-r--r--vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java22
1 files changed, 18 insertions, 4 deletions
diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java
index 58857d1d8e6..789a2ab537f 100644
--- a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java
+++ b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/DocumentV1ApiHandler.java
@@ -743,11 +743,18 @@ public class DocumentV1ApiHandler extends AbstractRequestHandler {
private static void serverError(HttpRequest request, Throwable t, ResponseHandler handler) {
loggingException(() -> {
- log.log(WARNING, "Uncaught exception handling request " + request.getMethod() + " " + request.getUri().getRawPath() + ":", t);
+ log.log(WARNING, "Uncaught exception handling request " + request.getMethod() + " " + request.getUri().getRawPath(), t);
JsonResponse.create(request, Exceptions.toMessageString(t), handler).respond(Response.Status.INTERNAL_SERVER_ERROR);
});
}
+ private static void badGateway(HttpRequest request, Throwable t, ResponseHandler handler) {
+ loggingException(() -> {
+ log.log(FINE, t, () -> "Document access error handling request " + request.getMethod() + " " + request.getUri().getRawPath());
+ JsonResponse.create(request, Exceptions.toMessageString(t), handler).respond(Response.Status.BAD_GATEWAY);
+ });
+ }
+
private static void timeout(HttpRequest request, String message, ResponseHandler handler) {
loggingException(() -> {
log.log(FINE, () -> "Timeout handling request " + request.getMethod() + " " + request.getUri().getRawPath() + ": " + message);
@@ -803,6 +810,9 @@ public class DocumentV1ApiHandler extends AbstractRequestHandler {
catch (IllegalArgumentException e) {
badRequest(request, e, handler);
}
+ catch (DispatchException e) {
+ badGateway(request, e, handler);
+ }
catch (RuntimeException e) {
serverError(request, e, handler);
}
@@ -821,12 +831,16 @@ public class DocumentV1ApiHandler extends AbstractRequestHandler {
return false;
if (result.type() == Result.ResultType.FATAL_ERROR)
- throw new RuntimeException(result.getError());
+ throw new DispatchException(result.getError());
outstanding.incrementAndGet();
return true;
}
+ private static class DispatchException extends RuntimeException {
+ private DispatchException(Throwable cause) { super(cause); }
+ }
+
/** Readable content channel which forwards data to a reader when closed. */
static class ForwardingContentChannel implements ContentChannel {
@@ -923,7 +937,7 @@ public class DocumentV1ApiHandler extends AbstractRequestHandler {
log.log(WARNING, "Unexpected document API operation outcome '" + response.outcome() + "'");
case ERROR:
log.log(FINE, () -> "Exception performing document operation: " + response.getTextMessage());
- jsonResponse.commit(Response.Status.INTERNAL_SERVER_ERROR);
+ jsonResponse.commit(Response.Status.BAD_GATEWAY);
}
}
}
@@ -1118,7 +1132,7 @@ public class DocumentV1ApiHandler extends AbstractRequestHandler {
if (getVisitorStatistics() != null)
response.writeDocumentCount(getVisitorStatistics().getDocumentsReturned());
- response.respond(Response.Status.INTERNAL_SERVER_ERROR);
+ response.respond(Response.Status.BAD_GATEWAY);
}
});
visitDispatcher.execute(() -> {