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]

Reply via email to