diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-09-21 14:53:47 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-09-21 14:53:47 +0200 |
commit | 92943d8b47a907c4a5c3058ee8e6ca52b2c7ac0e (patch) | |
tree | fd1a4688dd2efbd3ba02ee946feb23fc53f2a055 /container-core/src/main/java/com/yahoo/container/jdisc/ThreadedRequestHandler.java | |
parent | 37028564a00ed82c3ae2a90f005fcbbf19066a08 (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.java | 17 |
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); } } } |