[ 
https://issues.apache.org/jira/browse/CXF-7881?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andy McCright reassigned CXF-7881:
----------------------------------

    Assignee: Andy McCright

> 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
>
> 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)

Reply via email to