[
https://issues.apache.org/jira/browse/HTTPASYNC-155?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16979306#comment-16979306
]
Oleg Kalnichevski commented on HTTPASYNC-155:
---------------------------------------------
{quote}As I explained in the above scenario that the cancelled had already been
called which will mark the closed as true, failed won't execute and the
exception will not go anywhere and won't be handled as well by anything else,
it will just be dissolved{quote}
[~altaiezior] Which is precisely the right thing to do, at least with
{{ConnectionShutdownException}}. Anyway, I will update my PR to not rethrow
{{ConnectionShutdownException}}. All other runtime exceptions will be handled
as before.
Oleg
> I/O Reactor Shutdown issues due to race condition in
> AbstractClientExchangeHandler
> ----------------------------------------------------------------------------------
>
> Key: HTTPASYNC-155
> URL: https://issues.apache.org/jira/browse/HTTPASYNC-155
> Project: HttpComponents HttpAsyncClient
> Issue Type: Bug
> Reporter: Anurag Agarwal
> Priority: Major
>
> {code:java}
> HTTP GET http://localhost:8080/AdExchange/healthcheck: 500 Output: Health
> check failed because I/O reactor status STOPPED
> Time: Fri Nov 15 15:52:38 UTC 2019
> org.apache.http.impl.conn.ConnectionShutdownException
> at
> org.apache.http.impl.nio.conn.CPoolProxy.getValidConnection(CPoolProxy.java:74)
> at
> org.apache.http.impl.nio.conn.CPoolProxy.getContext(CPoolProxy.java:219)
> at
> org.apache.http.impl.nio.client.AbstractClientExchangeHandler.connectionAllocated(AbstractClientExchangeHandler.java:328)
> at
> org.apache.http.impl.nio.client.AbstractClientExchangeHandler.access$000(AbstractClientExchangeHandler.java:62)
> at
> org.apache.http.impl.nio.client.AbstractClientExchangeHandler$1.completed(AbstractClientExchangeHandler.java:387)
> at
> org.apache.http.impl.nio.client.AbstractClientExchangeHandler$1.completed(AbstractClientExchangeHandler.java:383)
> at
> org.apache.http.concurrent.BasicFuture.completed(BasicFuture.java:122)
> at
> org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager$1.completed(PoolingNHttpClientConnectionManager.java:306)
> at
> org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager$1.completed(PoolingNHttpClientConnectionManager.java:297)
> at
> org.apache.http.concurrent.BasicFuture.completed(BasicFuture.java:122)
> at
> org.apache.http.nio.pool.RouteSpecificPool.completed(RouteSpecificPool.java:146)
> at
> org.apache.http.nio.pool.AbstractNIOConnPool.requestCompleted(AbstractNIOConnPool.java:563)
> at
> org.apache.http.nio.pool.AbstractNIOConnPool$InternalSessionRequestCallback.completed(AbstractNIOConnPool.java:883)
> at
> org.apache.http.impl.nio.reactor.SessionRequestImpl.completed(SessionRequestImpl.java:154)
> at
> org.apache.http.impl.nio.reactor.AbstractIOReactor.processNewChannels(AbstractIOReactor.java:426)
> at
> org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:287)
> 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)
> at java.lang.Thread.run(Thread.java:748)
> {code}
> I am currently not able to identify the excat source of this issue. But
> somewhere I am getting a hint that before execution of line
> AbstractClientExchnageHandler:328
> {noformat}
> final HttpContext context = managedConn.getContext();
> {noformat}
> Cancel is called which discards the connection and detach the pool entry from
> the proxy. It was difficult to come up with the exact source since there are
> many places from where dicard connection and release connection is being
> called. But since only after adding the cancel workflow such errors are
> coming up, I tried to take that road and it seems possible that the race
> condition can indeed happen.
> We can notice in that method just few lines above this line we are checking
> if the handler is closed or not but even that line may have passed after
> which the connection was actually closed. It was just closed before the
> execution of this line as the line just above this line still has entry or
> else NullPointerException would have come.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]