Jan Hallonsten created CXF-7881:
-----------------------------------
Summary: HttpConduit.handleResponseOnWorkqueue will always handle
response on current thread when allowCurrentThread is false and the work queue
rejects the execution
Key: CXF-7881
URL: https://issues.apache.org/jira/browse/CXF-7881
Project: CXF
Issue Type: Bug
Components: Transports
Affects Versions: 3.2.6
Reporter: Jan Hallonsten
Creating this Jira according to the discussion [here|http://example.com/]
In the method
[org.apache.cxf.transport.http.HTTPConduit.handleResponseOnWorkqueue(boolean
allowCurrentThread, boolean
forceWQ)|https://github.com/apache/cxf/blob/540bb76f6f3d3d23944c566905f9f395c6f86b79/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java#L1190]
If the work queue is full so that RejectedExecutionException is thrown and
allowCurrentThread is false like when called from
[AsyncHttpConduit|https://github.com/apache/cxf/blob/6db38f9984b9c0bf6309a3d7e26d5a9ab8055d1f/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java#L600]
the expression in the if statement below will always return false and the
response will be handled on the current thread via the call to
handleResponseInternal. When used from AsyncHttpConduit this will be the IO
core thread which is not a good idea.
{code:java}
} catch (RejectedExecutionException rex) {
if (allowCurrentThread
&& policy != null
&& policy.isSetAsyncExecuteTimeoutRejection()
&& policy.isAsyncExecuteTimeoutRejection()) {
throw rex;
}
if (!hasLoggedAsyncWarning) {
LOG.warning("EXECUTOR_FULL_WARNING");
hasLoggedAsyncWarning = true;
}
LOG.fine("EXECUTOR_FULL");
handleResponseInternal();
}
{code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)