HI, we faced some deadlock in Vertx event loops. It happens in HttpClient, some time after we restart server side of connection. It actually happens couple of hours after it. I have JStack log of this deadlock:
"vert.x-eventloop-thread-0":
at io.vertx.core.http.impl.HttpClientRequestImpl.getLock(HttpClientRequestImpl.java:554)
- waiting to lock <0x00000006d43d04c8> (a io.vertx.core.http.impl.HttpClientRequestImpl)
at io.vertx.core.http.impl.HttpClientRequestBase.handleResponse(HttpClientRequestBase.java:144)
at io.vertx.core.http.impl.Http2ClientConnection$Http2ClientStream.handleHeaders(Http2ClientConnection.java:267)
at io.vertx.core.http.impl.Http2ClientConnection.lambda$onHeadersRead$0(Http2ClientConnection.java:120)
at io.vertx.core.http.impl.Http2ClientConnection$$Lambda$104/1578241090.run(Unknown Source)
at io.vertx.core.impl.ContextImpl.lambda$wrapTask$2(ContextImpl.java:335)
at io.vertx.core.impl.ContextImpl$$Lambda$100/543140181.run(Unknown Source)
at io.vertx.core.impl.ContextImpl.executeFromIO(ContextImpl.java:193)
at io.vertx.core.http.impl.Http2ClientConnection.onHeadersRead(Http2ClientConnection.java:119)
- locked <0x00000006ed05dd88> (a io.vertx.core.http.impl.Http2ClientConnection)
at io.vertx.core.http.impl.Http2ConnectionBase.onHeadersRead(Http2ConnectionBase.java:197)
at io.netty.handler.codec.http2.DefaultHttp2ConnectionDecoder$FrameReadListener.onHeadersRead(DefaultHttp2ConnectionDecoder.java:319)
at io.netty.handler.codec.http2.DefaultHttp2FrameReader$1.processFragment(DefaultHttp2FrameReader.java:461)
at io.netty.handler.codec.http2.DefaultHttp2FrameReader.readHeadersFrame(DefaultHttp2FrameReader.java:468)
at io.netty.handler.codec.http2.DefaultHttp2FrameReader.processPayloadState(DefaultHttp2FrameReader.java:253)
at io.netty.handler.codec.http2.DefaultHttp2FrameReader.readFrame(DefaultHttp2FrameReader.java:160)
at io.netty.handler.codec.http2.DefaultHttp2ConnectionDecoder.decodeFrame(DefaultHttp2ConnectionDecoder.java:118)
at io.netty.handler.codec.http2.Http2ConnectionHandler$FrameDecoder.decode(Http2ConnectionHandler.java:341)
at io.netty.handler.codec.http2.Http2ConnectionHandler.decode(Http2ConnectionHandler.java:401)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:411)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:248)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:341)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:363)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:349)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:129)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:642)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:565)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:479)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:441)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
at java.lang.Thread.run(Thread.java:745)
"vert.x-eventloop-thread-1":
at io.vertx.core.net.impl.ConnectionBase.metric(ConnectionBase.java:177)
- waiting to lock <0x00000006ed05dd88> (a io.vertx.core.http.impl.Http2ClientConnection)
at io.vertx.core.net.impl.ConnectionBase.reportBytesWritten(ConnectionBase.java:233)
at io.vertx.core.http.impl.HttpClientRequestImpl.connected(HttpClientRequestImpl.java:773)
- locked <0x00000006d43d04c8> (a io.vertx.core.http.impl.HttpClientRequestImpl)
at io.vertx.core.http.impl.HttpClientRequestImpl.access$100(HttpClientRequestImpl.java:51)
at io.vertx.core.http.impl.HttpClientRequestImpl$2.handleStream(HttpClientRequestImpl.java:719)
at io.vertx.core.http.impl.ConnectionManager$ConnQueue.deliverStream(ConnectionManager.java:277)
at io.vertx.core.http.impl.ConnectionManager$ConnQueue.lambda$getConnection$0(ConnectionManager.java:237)
at io.vertx.core.http.impl.ConnectionManager$ConnQueue$$Lambda$153/318536498.handle(Unknown Source)
at io.vertx.core.impl.ContextImpl.lambda$wrapTask$2(ContextImpl.java:337)
at io.vertx.core.impl.ContextImpl$$Lambda$100/543140181.run(Unknown Source)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:445)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
at java.lang.Thread.run(Thread.java:745)