On Mon, 2016-05-30 at 21:37 +0000, John Price wrote: > We're using the HttpAsyncClient to make calls from within our own server > application. Periodically (once a week or less), our service stops being > able to make requests and we see errors of the form: > > 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) > ... > > Digging further into the logs, it seems these begin after we see an > exception that I've included at the bottom but basically seems to boil down > to "I/O dispatch worker terminated abnormally" caused by "IOException: > Connection reset by peer" in the depths of SSLIOSession. > > I guess I've got two questions: first, is this a bug? I'm not sure how much > additional info I can provide into the root cause of the IOException since > it happens so infrequently, but I'll try to provide what I can if it's > relevant. > > Second, how should we be handling this issue? Some of the Apache > documentation and older mailing list posts talk about "restarting the I/O > Reactor" but I'm not clear what means in this context since I'm not > interacting with it directly. Should I just be throwing away my instance of > HttpAsyncClient and creating a new one? > > We're using: > httpclient 4.5.2 > httpasyncclient 4.1.1 > httpcore.nio4.4.4 > > John. > > org.apache.http.nio.reactor.IOReactorException: I/O dispatch worker > terminated abnormally > at > org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor.execute(AbstractMultiworkerIOReactor.java:358) > > at > org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.execute(PoolingNHttpClientConnectionManager.java:191) > > at > org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase$1.run(CloseableHttpAsyncClientBase.java:64) > > at java.lang.Thread.run(Thread.java:745) [na:1.8.0_65] > Caused by: rx.exceptions.OnErrorNotImplementedException: Connection reset > by peer
The original 'java.io.IOException: Connection reset by peer' exception was re-thrown as OnErrorNotImplementedException from inside the FutureCallback#failed method, which killed the i/o dispatch thread and caused the i/o reactor to shut down. This issue needs to be addressed either in your application code or in the RX library. Hope this helps Oleg > at rx.Observable$27.onError(Observable.java:7923) > at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:159) > at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:120) > at > rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:71) > at OurCode.SessionManager.lambda$null$10(SessionManager.java:174) > at rx.Observable$10.onError(Observable.java:4407) > at > rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:65) > at rx.internal.operators.OperatorMap$1.onError(OperatorMap.java:48) > at > rx.internal.operators.OperatorMerge$MergeSubscriber.reportError(OperatorMerge.java:240) > at > rx.internal.operators.OperatorMerge$MergeSubscriber.checkTerminate(OperatorMerge.java:776) > at > rx.internal.operators.OperatorMerge$MergeSubscriber.emitLoop(OperatorMerge.java:537) > at > rx.internal.operators.OperatorMerge$MergeSubscriber.emit(OperatorMerge.java:526) > at > rx.internal.operators.OperatorMerge$MergeSubscriber.onError(OperatorMerge.java:250) > at rx.internal.operators.OperatorMap$1.onError(OperatorMap.java:48) > at > rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:71) > at rx.apache.http.ObservableHttp$2$1.failed(ObservableHttp.java:195) > at org.apache.http.concurrent.BasicFuture.failed(BasicFuture.java:134) > at > org.apache.http.impl.nio.client.AbstractClientExchangeHandler.failed(AbstractClientExchangeHandler.java:419) > > at > org.apache.http.nio.protocol.HttpAsyncRequestExecutor.exception(HttpAsyncRequestExecutor.java:152) > > at > org.apache.http.impl.nio.client.InternalIODispatch.onException(InternalIODispatch.java:76) > > at > org.apache.http.impl.nio.client.InternalIODispatch.onException(InternalIODispatch.java:39) > > at > org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:127) > > at > org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:164) > > at > org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:339) > > at > org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:317) > > at > org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:278) > > at > org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:106) > > at > org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:590) > Caused by: java.io.IOException: Connection reset by peer > at sun.nio.ch.FileDispatcherImpl.read0(Native Method) ~[na:1.8.0_65] > at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) ~[na:1.8.0_65] > at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) ~[na:1.8.0_65] > at sun.nio.ch.IOUtil.read(IOUtil.java:197) ~[na:1.8.0_65] > at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380) > ~[na:1.8.0_65] > at > org.apache.http.nio.reactor.ssl.SSLIOSession.receiveEncryptedData(SSLIOSession.java:449) > ~[antelope-server.jar:na] > at > org.apache.http.nio.reactor.ssl.SSLIOSession.isAppInputReady(SSLIOSession.java:503) > ~[antelope-server.jar:na] > at > org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:122) > ~[antelope-server.jar:na] > ... 7 common frames omitted --------------------------------------------------------------------- To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org