[
https://issues.apache.org/jira/browse/CXF-7881?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Colm O hEigeartaigh resolved CXF-7881.
--------------------------------------
Resolution: Fixed
> 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
> Assignee: Andy McCright
> Priority: Major
> Fix For: 3.3.0, 3.2.7
>
>
> Creating this Jira according to the discussion
> [here|http://cxf.547215.n5.nabble.com/Response-always-handled-on-current-thread-when-WorkQueue-rejects-execution-tt5793019.html]
> 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}
> I think that the code above should be changed to
> {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)