maggie created CXF-9166:
---------------------------

             Summary: RejectedExecutionException thrown by CXF WebClient due to 
terminated ThreadPoolExecutor in HTTPConduit
                 Key: CXF-9166
                 URL: https://issues.apache.org/jira/browse/CXF-9166
             Project: CXF
          Issue Type: Bug
    Affects Versions: 4.1.2
            Reporter: maggie


We encountered a {{RejectedExecutionException}} when invoking a RESTful web 
service using CXF WebClient. The error appears to originate from 
{{HTTPConduit}} when attempting to send an asynchronous request via Java's 
{{{}HttpClient{}}}. The underlying {{ThreadPoolExecutor}} is in a terminated 
state, causing the task to be rejected.

This issue occurs intermittently under load and appears to be related to CXF's 
use of {{CompletableFuture.completeAsync()}} and the lifecycle of the internal 
executor.

 

The stack trace:

] PhaseInterceptorChain - Interceptor for \{https:// xxx.abc.com:443}WebClient 
has thrown exception, unwinding now 
java.util.concurrent.RejectedExecutionException: RejectedExecutionException 
invoking https://xxx.abc.com:443/test: Task 
java.util.concurrent.CompletableFuture$AsyncSupply@bbffb919 rejected from 
java.util.concurrent.ThreadPoolExecutor@fb02c6e9[Terminated, pool size = 0, 
active threads = 0, queued tasks = 0, completed tasks = 12387] at 
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
 Method) ~[?:?] at 
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown
 Source) ~[?:?] at 
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown
 Source) ~[?:?] at 
java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Unknown Source) 
~[?:?] at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source) 
~[?:?] at 
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1452)
 ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] at 
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1438)
 ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] at 
org.apache.cxf.transport.http.HttpClientHTTPConduit$HttpClientWrappedOutputStream.close(HttpClientHTTPConduit.java:839)
 ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] at 
org.apache.cxf.io.AbstractWrappedOutputStream.close(AbstractWrappedOutputStream.java:77)
 ~[cxf-core-4.1.2.jar:4.1.2] at 
org.apache.cxf.ext.logging.LoggingOutputStream.postClose(LoggingOutputStream.java:53)
 ~[cxf-rt-features-logging-4.1.2.jar:4.1.2] at 
org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:243) 
~[cxf-core-4.1.2.jar:4.1.2] at 
org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) 
~[cxf-core-4.1.2.jar:4.1.2] at 
org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:717) 
~[cxf-rt-transports-http-4.1.2.jar:4.1.2] at 
org.apache.cxf.transport.http.HttpClientHTTPConduit.close(HttpClientHTTPConduit.java:264)
 ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] at 
org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:63)
 ~[cxf-core-4.1.2.jar:4.1.2] at 
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
 ~[cxf-core-4.1.2.jar:4.1.2] at 
org.apache.cxf.jaxrs.client.AbstractClient.doRunInterceptorChain(AbstractClient.java:760)
 ~[cxf-rt-rs-client-4.1.2.jar:4.1.2] at 
org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1088) 
~[cxf-rt-rs-client-4.1.2.jar:4.1.2] at 
org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:934) 
~[cxf-rt-rs-client-4.1.2.jar:4.1.2] at 
org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:903) 
~[cxf-rt-rs-client-4.1.2.jar:4.1.2] at 
org.apache.cxf.jaxrs.client.WebClient.invoke(WebClient.java:366) 
~[cxf-rt-rs-client-4.1.2.jar:4.1.2] at 
org.apache.camel.component.cxf.jaxrs.CxfRsProducer.invokeHttpClient(CxfRsProducer.java:339)
 ~[camel-cxf-rest-4.10.6.jar:4.10.6] at 
org.apache.camel.component.cxf.jaxrs.CxfRsProducer.process(CxfRsProducer.java:103)
 ~[camel-cxf-rest-4.10.6.jar:4.10.6] at 
org.apache.camel.support.SynchronousDelegateProducer.process(SynchronousDelegateProducer.java:48)
 ~[camel-support-4.10.6.jar:4.10.6] at 
org.apache.camel.support.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:65)
 ~[camel-support-4.10.6.jar:4.10.6] at 
org.apache.camel.processor.SendProcessor.sendUsingProducer(SendProcessor.java:252)
 ~[camel-core-processor-4.10.6.jar:4.10.6] at 
org.apache.camel.processor.SendProcessor.process(SendProcessor.java:157) 
~[camel-core-processor-4.10.6.jar:4.10.6] at 
org.apache.camel.impl.engine.CamelInternalProcessor.processNonTransacted(CamelInternalProcessor.java:347)
 ~[camel-base-engine-4.10.6.jar:4.10.6] at 
org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:323)
 ~[camel-base-engine-4.10.6.jar:4.10.6] at 
org.apache.camel.processor.TryProcessor$TryState.run(TryProcessor.java:115) 
~[camel-core-processor-4.10.6.jar:4.10.6] at 
org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:199)
 ~[camel-base-engine-4.10.6.jar:4.10.6] at 
org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:189)
 ~[camel-base-engine-4.10.6.jar:4.10.6] at 
org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:166)
 ~[camel-base-engine-4.10.6.jar:4.10.6] at 
org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)
 ~[camel-base-engine-4.10.6.jar:4.10.6] at 
org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:59)
 ~[camel-base-engine-4.10.6.jar:4.10.6] at 
org.apache.camel.processor.Pipeline.process(Pipeline.java:163) 
~[camel-core-processor-4.10.6.jar:4.10.6] at 
org.apache.camel.impl.engine.CamelInternalProcessor.processNonTransacted(CamelInternalProcessor.java:347)
 ~[camel-base-engine-4.10.6.jar:4.10.6] at 
org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:323)
 ~[camel-base-engine-4.10.6.jar:4.10.6] at 
org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:102)
 ~[camel-direct-4.10.6.jar:4.10.6] at 
org.apache.camel.impl.engine.SharedCamelInternalProcessor.processNonTransacted(SharedCamelInternalProcessor.java:156)
 ~[camel-base-engine-4.10.6.jar:4.10.6] at 
org.apache.camel.impl.engine.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:133)
 ~[camel-base-engine-4.10.6.jar:4.10.6] at 
org.apache.camel.support.cache.DefaultProducerCache.asyncDispatchExchange(DefaultProducerCache.java:320)
 ~[camel-support-4.10.6.jar:4.10.6] at 
org.apache.camel.support.cache.DefaultProducerCache.lambda$doAsyncSendExchange$0(DefaultProducerCache.java:217)
 ~[camel-support-4.10.6.jar:4.10.6] at 
org.apache.camel.support.cache.DefaultProducerCache.doInAsyncProducer(DefaultProducerCache.java:281)
 ~[camel-support-4.10.6.jar:4.10.6] at 
org.apache.camel.support.cache.DefaultProducerCache.doAsyncSendExchange(DefaultProducerCache.java:226)
 ~[camel-support-4.10.6.jar:4.10.6] at 
org.apache.camel.support.cache.DefaultProducerCache.asyncSendExchange(DefaultProducerCache.java:207)
 ~[camel-support-4.10.6.jar:4.10.6] at 
org.apache.camel.impl.engine.DefaultProducerTemplate.lambda$asyncSendExchange$3(DefaultProducerTemplate.java:745)
 ~[camel-base-engine-4.10.6.jar:4.10.6] at 
java.base/java.util.concurrent.FutureTask.run(Unknown Source) [?:?] at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
[?:?] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown 
Source) [?:?] at java.base/java.lang.Thread.run(Unknown Source) [?:?] Caused 
by: java.util.concurrent.RejectedExecutionException: Task 
java.util.concurrent.CompletableFuture$AsyncSupply@bbffb919 rejected from 
java.util.concurrent.ThreadPoolExecutor@fb02c6e9[Terminated, pool size = 0, 
active threads = 0, queued tasks = 0, completed tasks = 12387] at 
java.base/java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(Unknown
 Source) ~[?:?] at 
java.base/java.util.concurrent.ThreadPoolExecutor.reject(Unknown Source) ~[?:?] 
at java.base/java.util.concurrent.ThreadPoolExecutor.execute(Unknown Source) 
~[?:?] at 
java.base/java.util.concurrent.CompletableFuture.completeAsync(Unknown Source) 
~[?:?] at 
java.net.http/jdk.internal.net.http.MultiExchange.responseAsync(Unknown Source) 
~[java.net.http:?] at 
java.net.http/jdk.internal.net.http.HttpClientImpl.sendAsync(Unknown Source) 
~[java.net.http:?] at 
java.net.http/jdk.internal.net.http.HttpClientImpl.sendAsync(Unknown Source) 
~[java.net.http:?] at 
java.net.http/jdk.internal.net.http.HttpClientImpl.sendAsync(Unknown Source) 
~[java.net.http:?] at 
java.net.http/jdk.internal.net.http.HttpClientFacade.sendAsync(Unknown Source) 
~[java.net.http:?] at 
org.apache.cxf.transport.http.HttpClientHTTPConduit$HttpClientWrappedOutputStream.setProtocolHeaders(HttpClientHTTPConduit.java:1040)
 ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] at 
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1373)
 ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] at 
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1353)
 ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] at 
org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:47)
 ~[cxf-core-4.1.2.jar:4.1.2] at 
org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69)
 ~[cxf-core-4.1.2.jar:4.1.2] at 
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1405)
 ~[cxf-rt-transports-http-4.1.2.jar:4.1.2] ... 44 more

 
 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to