aboutsummaryrefslogtreecommitdiffstats
path: root/container-core/src/main/java/com/yahoo/container/jdisc/ThreadedRequestHandler.java
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2020-09-21 14:53:47 +0200
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2020-09-21 14:53:47 +0200
commit92943d8b47a907c4a5c3058ee8e6ca52b2c7ac0e (patch)
treefd1a4688dd2efbd3ba02ee946feb23fc53f2a055 /container-core/src/main/java/com/yahoo/container/jdisc/ThreadedRequestHandler.java
parent37028564a00ed82c3ae2a90f005fcbbf19066a08 (diff)
Allow error response for worker pool overload to be customized by handler
Diffstat (limited to 'container-core/src/main/java/com/yahoo/container/jdisc/ThreadedRequestHandler.java')
-rw-r--r--container-core/src/main/java/com/yahoo/container/jdisc/ThreadedRequestHandler.java17
1 files changed, 12 insertions, 5 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/ThreadedRequestHandler.java b/container-core/src/main/java/com/yahoo/container/jdisc/ThreadedRequestHandler.java
index c198e0e8b32..0e8865538ee 100644
--- a/container-core/src/main/java/com/yahoo/container/jdisc/ThreadedRequestHandler.java
+++ b/container-core/src/main/java/com/yahoo/container/jdisc/ThreadedRequestHandler.java
@@ -16,13 +16,11 @@ import com.yahoo.jdisc.handler.ReadableContentChannel;
import com.yahoo.jdisc.handler.ResponseDispatch;
import com.yahoo.jdisc.handler.ResponseHandler;
-import java.util.Objects;
-import java.util.logging.Level;
-
import java.net.URI;
import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
+import java.util.Objects;
import java.util.concurrent.Executor;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.TimeUnit;
@@ -163,6 +161,14 @@ public abstract class ThreadedRequestHandler extends AbstractRequestHandler {
protected abstract void handleRequest(Request request, BufferedContentChannel requestContent,
ResponseHandler responseHandler);
+ /**
+ * Invoked to write an error response when the worker pool is overloaded.
+ * A subclass may override this method to define a custom response.
+ */
+ protected void writeErrorResponseOnOverload(Request request, ResponseHandler responseHandler) {
+ ResponseDispatch.newInstance(Response.Status.SERVICE_UNAVAILABLE).dispatch(responseHandler);
+ }
+
private class RequestTask implements ResponseHandler, Runnable {
final Request request;
@@ -237,14 +243,15 @@ public abstract class ThreadedRequestHandler extends AbstractRequestHandler {
}
}
+
/**
* Clean up when the task can not be executed because no worker thread is available.
*/
- public void failOnOverload() {
+ void failOnOverload() {
try (ResourceReference reference = requestReference) {
incrementRejectedRequests();
logRejectedRequests();
- ResponseDispatch.newInstance(Response.Status.SERVICE_UNAVAILABLE).dispatch(responseHandler);
+ writeErrorResponseOnOverload(request, responseHandler);
}
}
}