summaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2020-10-01 19:58:40 +0200
committerJon Bratseth <bratseth@gmail.com>2020-10-01 19:58:40 +0200
commitc9335e0efde84cafdbc878fc4c4504e3ce12b93c (patch)
tree5331bbc2140855d97ed1453d803af2de6bbd3a77 /container-core
parentf6a19e89f468e6b4603d46763eee2d720de55776 (diff)
Let handlers dedfine a default request type
Diffstat (limited to 'container-core')
-rw-r--r--container-core/src/main/java/com/yahoo/container/jdisc/ThreadedRequestHandler.java20
1 files changed, 18 insertions, 2 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 323935e2a26..691675dfec9 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
@@ -94,7 +94,7 @@ public abstract class ThreadedRequestHandler extends AbstractRequestHandler {
}
}
BufferedContentChannel content = new BufferedContentChannel();
- final RequestTask command = new RequestTask(request, content, responseHandler);
+ RequestTask command = new RequestTask(request, content, responseHandler);
try {
executor.execute(command);
} catch (RejectedExecutionException e) {
@@ -106,6 +106,18 @@ public abstract class ThreadedRequestHandler extends AbstractRequestHandler {
return content;
}
+ /**
+ * <p>Returns the request type classification to use for requests to this handler.
+ * This overrides the default classification based on request method, and can in turn
+ * be overridden by setting a request type on individual responses in handleRequest
+ * whenever it is invoked (i.e not for requests that are rejected early e.g due to overload).</p>
+ *
+ * <p>This default implementation returns null.</p>
+ *
+ * @return the request type to set, or null to not override the default classification based on request method
+ */
+ protected Request.RequestType getRequestType() { return null; }
+
public Duration getTimeout() {
return TIMEOUT;
}
@@ -145,7 +157,9 @@ public abstract class ThreadedRequestHandler extends AbstractRequestHandler {
* 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);
+ Response response = new Response(Response.Status.SERVICE_UNAVAILABLE);
+ response.setRequestType(getRequestType());
+ ResponseDispatch.newInstance(response).dispatch(responseHandler);
}
private class RequestTask implements ResponseHandler, Runnable {
@@ -188,6 +202,8 @@ public abstract class ThreadedRequestHandler extends AbstractRequestHandler {
@Override
public ContentChannel handleResponse(Response response) {
if ( tryHasResponded()) throw new IllegalStateException("Response already handled");
+ if (response.getRequestType() == null)
+ response.setRequestType(getRequestType());
ContentChannel cc = responseHandler.handleResponse(response);
HandlerMetricContextUtil.onHandled(request, metric, getClass());
return cc;