Max Rozhkov created HTTPASYNC-145:
-------------------------------------
Summary: Eliminate a deadlock in IOReactor
Key: HTTPASYNC-145
URL: https://issues.apache.org/jira/browse/HTTPASYNC-145
Project: HttpComponents HttpAsyncClient
Issue Type: Bug
Affects Versions: 4.1.4
Reporter: Max Rozhkov
*User Story*
We use async http client in very high load environment where several thousands
of http requests are sent per second. It is an SSP service where timeout has to
be measured and a request to be voided after timeout.
We set up usual timeouts configured in IO Reactor and control timeouts
externally as well. When time is out the request will be cancelled explicitly
with _AbstractExecutionAwareRequest.abort()_.
*Problem description*
Deadlock could happen in very highload environment. See stack information below.
*Stack trace*
"timeout-controller-0-00":
at
java.nio.channels.spi.AbstractInterruptibleChannel.close([email protected]/AbstractInterruptibleChannel.java:108)
- waiting to lock <0x000000112c420bd0> (a java.lang.Object)
at org.apache.http.impl.nio.reactor.IOSessionImpl.close(IOSessionImpl.java:227)
- locked <0x000000112c420be0> (a sun.nio.ch.SelectionKeyImpl)
at
org.apache.http.impl.nio.reactor.IOSessionImpl.shutdown(IOSessionImpl.java:255)
at
org.apache.http.impl.nio.NHttpConnectionBase.shutdown(NHttpConnectionBase.java:579)
at
org.apache.http.impl.nio.conn.CPoolEntry.shutdownConnection(CPoolEntry.java:80)
at org.apache.http.impl.nio.conn.CPoolProxy.shutdown(CPoolProxy.java:91)
at
org.apache.http.impl.nio.client.AbstractClientExchangeHandler.discardConnection(AbstractClientExchangeHandler.java:267)
at
org.apache.http.impl.nio.client.AbstractClientExchangeHandler.cancel(AbstractClientExchangeHandler.java:447)
at
org.apache.http.client.methods.AbstractExecutionAwareRequest.abort(AbstractExecutionAwareRequest.java:90)
at
net.thumbtack.ssp.requester.AsyncHttpClient.lambda$execute$1(AsyncHttpClient.java:83)
at
net.thumbtack.ssp.requester.AsyncHttpClient$$Lambda$1768/0x00000017c29f6440.run(Unknown
Source)
at
net.thumbtack.adtech.concurrent.TimeLimitedExecution.lambda$future$1(TimeLimitedExecution.java:70)
at
net.thumbtack.adtech.concurrent.TimeLimitedExecution$$Lambda$1770/0x00000017c29f6c40.run(Unknown
Source)
at
net.thumbtack.adtech.concurrent.TimeoutController.check(TimeoutController.java:47)
at
net.thumbtack.adtech.concurrent.TimeoutController$$Lambda$1022/0x00000017c28acc40.run(Unknown
Source)
at
java.util.concurrent.Executors$RunnableAdapter.call([email protected]/Executors.java:515)
at
java.util.concurrent.FutureTask.runAndReset([email protected]/FutureTask.java:305)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run([email protected]/ScheduledThreadPoolExecutor.java:305)
at
java.util.concurrent.ThreadPoolExecutor.runWorker([email protected]/ThreadPoolExecutor.java:1128)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run([email protected]/ThreadPoolExecutor.java:628)
at java.lang.Thread.run([email protected]/Thread.java:834)
"pool-21-thread-1":
at
java.nio.channels.spi.AbstractSelectionKey.cancel([email protected]/AbstractSelectionKey.java:70)
- waiting to lock <0x000000112c420be0> (a sun.nio.ch.SelectionKeyImpl)
at
java.nio.channels.spi.AbstractSelectableChannel.implCloseChannel([email protected]/AbstractSelectableChannel.java:255)
at
java.nio.channels.spi.AbstractInterruptibleChannel.close([email protected]/AbstractInterruptibleChannel.java:112)
- locked <0x000000112c420bd0> (a java.lang.Object)
at
org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor.doShutdown(AbstractMultiworkerIOReactor.java:414)
at
org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor.execute(AbstractMultiworkerIOReactor.java:374)
at
org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.execute(PoolingNHttpClientConnectionManager.java:221)
at
org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase$1.run(CloseableHttpAsyncClientBase.java:64)
at java.lang.Thread.run([email protected]/Thread.java:834)
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]