[
https://issues.apache.org/jira/browse/HTTPCORE-629?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Kristof Jozsa updated HTTPCORE-629:
-----------------------------------
Description:
We run a Camel/CXFRS project with httpcore-nio 4.4.12 and we experience
IOReactor shutdowns which seem to happen on ConnectionClosedExceptions in our
production environment.
We found this spamming in our logs:
{{Caused by: java.lang.IllegalStateException: Request cannot be executed; I/O
reactor status: STOPPED}}
{{ at org.apache.http.util.Asserts.check(Asserts.java:46)}}
{{ at
org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase.ensureRunning(CloseableHttpAsyncClientBase.java:90)}}
{{ at
org.apache.http.impl.nio.client.InternalHttpAsyncClient.execute(InternalHttpAsyncClient.java:123)}}
{{ at
org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.connect(AsyncHTTPConduit.java:596)}}
{{ at
org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.setupWrappedStream(AsyncHTTPConduit.java:442)}}
{{ at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1343)}}
{{ at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1304)}}
{{ at
org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.onFirstWrite(AsyncHTTPConduit.java:435)}}
Hunting for reasons we first found `ConnectionClosedException`s - these are
completely fine:
{{}}{{Caused by: org.apache.http.ConnectionClosedException:
ConnectionClosedException invoking
[https://target-host-masked.com/api/rest/v1/products/21110363:] Connection
closed unexpectedly at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method) at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at
java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1400)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1384)
at
org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.close(AsyncHTTPConduit.java:429)
at
org.apache.cxf.io.AbstractWrappedOutputStream.close(AbstractWrappedOutputStream.java:77)
at
org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:56)
at org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:228) at
org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) at
org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:671) at
org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:63)}}
but these following traces:
{{Caused by: org.apache.http.ConnectionClosedException: Connection closed
unexpectedlyCaused by: org.apache.http.ConnectionClosedException: Connection
closed unexpectedly at
org.apache.http.nio.protocol.HttpAsyncRequestExecutor.closed(HttpAsyncRequestExecutor.java:146)
at
org.apache.http.impl.nio.client.InternalIODispatch.onClosed(InternalIODispatch.java:71)
at
org.apache.http.impl.nio.client.InternalIODispatch.onClosed(InternalIODispatch.java:39)
at
org.apache.http.impl.nio.reactor.AbstractIODispatch.disconnected(AbstractIODispatch.java:100)
at
org.apache.http.impl.nio.reactor.BaseIOReactor.sessionClosed(BaseIOReactor.java:277)
at
org.apache.http.impl.nio.reactor.AbstractIOReactor.processClosedSessions(AbstractIOReactor.java:449)
at
org.apache.http.impl.nio.reactor.AbstractIOReactor.hardShutdown(AbstractIOReactor.java:590)
at
org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:305)
at
org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
at
org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591)}}
seem to show that the IOReactor went to hardShutdown upon the
ConnectionClosedException?
We tried digging into the source to understand how this can happen and we
believe that if the {{processClosedSessions()}} method in {{AbstractIOReactor}}
class shows any uncaught exceptions (like a ConnectionClosedException?), it
will indeed cause the reactor to stop outside its infinite loop in the finally
block.
Can you please double check and confirm this behaviour? How can we avoid
getting this problem? I would assume if a certain connection gets broken on the
server side, it's handled gracefully. The fact that the whole reactor shuts
down leaves us no other option then to restart our service - clearly we need a
proper way to manage this somehow.
I hope I'm not horribly mistaken with the drawn consequences above - if so,
please point out my errors. Thanks really much in advance!
EDIT: fixed formatting of stacktraces
was:
We run a Camel/CXFRS project with httpcore-nio 4.4.12 and we experience
IOReactor shutdowns which seem to happen on ConnectionClosedExceptions in our
production environment.
We found this spamming in our logs:
{{Caused by: java.lang.IllegalStateException: Request cannot be executed; I/O
reactor status: STOPPED}}
{{ at org.apache.http.util.Asserts.check(Asserts.java:46)}}
{{ at
org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase.ensureRunning(CloseableHttpAsyncClientBase.java:90)}}
{{ at
org.apache.http.impl.nio.client.InternalHttpAsyncClient.execute(InternalHttpAsyncClient.java:123)}}
{{ at
org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.connect(AsyncHTTPConduit.java:596)}}
{{ at
org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.setupWrappedStream(AsyncHTTPConduit.java:442)}}
{{ at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1343)}}
{{ at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1304)}}
{{ at
org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.onFirstWrite(AsyncHTTPConduit.java:435)}}
Hunting for reasons we first found `ConnectionClosedException`s - these are
completely fine:
{{Caused by: org.apache.http.ConnectionClosedException:
ConnectionClosedException invoking
https://target-host-masked.com/api/rest/v1/products/21110363: Connection closed
unexpectedlyCaused by: org.apache.http.ConnectionClosedException:
ConnectionClosedException invoking
https://target-host-masked.com/api/rest/v1/products/21110363: Connection closed
unexpectedly at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method) at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at
java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1400)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1384)
at
org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.close(AsyncHTTPConduit.java:429)
at
org.apache.cxf.io.AbstractWrappedOutputStream.close(AbstractWrappedOutputStream.java:77)
at
org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:56)
at org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:228) at
org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) at
org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:671) at
org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:63)}}
but these following traces:
{{Caused by: org.apache.http.ConnectionClosedException: Connection closed
unexpectedlyCaused by: org.apache.http.ConnectionClosedException: Connection
closed unexpectedly at
org.apache.http.nio.protocol.HttpAsyncRequestExecutor.closed(HttpAsyncRequestExecutor.java:146)
at
org.apache.http.impl.nio.client.InternalIODispatch.onClosed(InternalIODispatch.java:71)
at
org.apache.http.impl.nio.client.InternalIODispatch.onClosed(InternalIODispatch.java:39)
at
org.apache.http.impl.nio.reactor.AbstractIODispatch.disconnected(AbstractIODispatch.java:100)
at
org.apache.http.impl.nio.reactor.BaseIOReactor.sessionClosed(BaseIOReactor.java:277)
at
org.apache.http.impl.nio.reactor.AbstractIOReactor.processClosedSessions(AbstractIOReactor.java:449)
at
org.apache.http.impl.nio.reactor.AbstractIOReactor.hardShutdown(AbstractIOReactor.java:590)
at
org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:305)
at
org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
at
org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591)}}
seem to show that the IOReactor went to hardShutdown upon the
ConnectionClosedException?
We tried digging into the source to understand how this can happen and we
believe that if the {{processClosedSessions()}} method in {{AbstractIOReactor}}
class shows any uncaught exceptions (like a ConnectionClosedException?), it
will indeed cause the reactor to stop outside its infinite loop in the finally
block.
Can you please double check and confirm this behaviour? How can we avoid
getting this problem? I would assume if a certain connection gets broken on the
server side, it's handled gracefully. The fact that the whole reactor shuts
down leaves us no other option then to restart our service - clearly we need a
proper way to manage this somehow.
I hope I'm not horribly mistaken with the drawn consequences above - if so,
please point out my errors. Thanks really much in advance!
> IOReactor shutdowns on ConnectionClosedException
> ------------------------------------------------
>
> Key: HTTPCORE-629
> URL: https://issues.apache.org/jira/browse/HTTPCORE-629
> Project: HttpComponents HttpCore
> Issue Type: Bug
> Affects Versions: 4.4.12
> Reporter: Kristof Jozsa
> Priority: Critical
>
> We run a Camel/CXFRS project with httpcore-nio 4.4.12 and we experience
> IOReactor shutdowns which seem to happen on ConnectionClosedExceptions in our
> production environment.
> We found this spamming in our logs:
> {{Caused by: java.lang.IllegalStateException: Request cannot be executed; I/O
> reactor status: STOPPED}}
> {{ at org.apache.http.util.Asserts.check(Asserts.java:46)}}
> {{ at
> org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase.ensureRunning(CloseableHttpAsyncClientBase.java:90)}}
> {{ at
> org.apache.http.impl.nio.client.InternalHttpAsyncClient.execute(InternalHttpAsyncClient.java:123)}}
> {{ at
> org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.connect(AsyncHTTPConduit.java:596)}}
> {{ at
> org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.setupWrappedStream(AsyncHTTPConduit.java:442)}}
> {{ at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1343)}}
> {{ at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1304)}}
> {{ at
> org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.onFirstWrite(AsyncHTTPConduit.java:435)}}
>
> Hunting for reasons we first found `ConnectionClosedException`s - these are
> completely fine:
> {{}}{{Caused by: org.apache.http.ConnectionClosedException:
> ConnectionClosedException invoking
> [https://target-host-masked.com/api/rest/v1/products/21110363:] Connection
> closed unexpectedly at
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
> Method) at
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
> at
> java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
> at
> java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
> at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
> at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1400)
> at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1384)
> at
> org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit$AsyncWrappedOutputStream.close(AsyncHTTPConduit.java:429)
> at
> org.apache.cxf.io.AbstractWrappedOutputStream.close(AbstractWrappedOutputStream.java:77)
> at
> org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:56)
> at org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:228)
> at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) at
> org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:671) at
> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:63)}}
>
> but these following traces:
> {{Caused by: org.apache.http.ConnectionClosedException: Connection closed
> unexpectedlyCaused by: org.apache.http.ConnectionClosedException: Connection
> closed unexpectedly at
> org.apache.http.nio.protocol.HttpAsyncRequestExecutor.closed(HttpAsyncRequestExecutor.java:146)
> at
> org.apache.http.impl.nio.client.InternalIODispatch.onClosed(InternalIODispatch.java:71)
> at
> org.apache.http.impl.nio.client.InternalIODispatch.onClosed(InternalIODispatch.java:39)
> at
> org.apache.http.impl.nio.reactor.AbstractIODispatch.disconnected(AbstractIODispatch.java:100)
> at
> org.apache.http.impl.nio.reactor.BaseIOReactor.sessionClosed(BaseIOReactor.java:277)
> at
> org.apache.http.impl.nio.reactor.AbstractIOReactor.processClosedSessions(AbstractIOReactor.java:449)
> at
> org.apache.http.impl.nio.reactor.AbstractIOReactor.hardShutdown(AbstractIOReactor.java:590)
> at
> org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:305)
> at
> org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
> at
> org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591)}}
>
> seem to show that the IOReactor went to hardShutdown upon the
> ConnectionClosedException?
>
> We tried digging into the source to understand how this can happen and we
> believe that if the {{processClosedSessions()}} method in
> {{AbstractIOReactor}} class shows any uncaught exceptions (like a
> ConnectionClosedException?), it will indeed cause the reactor to stop outside
> its infinite loop in the finally block.
>
> Can you please double check and confirm this behaviour? How can we avoid
> getting this problem? I would assume if a certain connection gets broken on
> the server side, it's handled gracefully. The fact that the whole reactor
> shuts down leaves us no other option then to restart our service - clearly we
> need a proper way to manage this somehow.
>
> I hope I'm not horribly mistaken with the drawn consequences above - if so,
> please point out my errors. Thanks really much in advance!
> EDIT: fixed formatting of stacktraces
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]