jooby-project / jooby

The modular web framework for Java and Kotlin
https://jooby.io
Apache License 2.0
1.68k stars 199 forks source link

[netty] Broken swagger-ui #3433

Closed kliushnichenko closed 1 month ago

kliushnichenko commented 1 month ago

After upgrading to 3.1.0 observe the following errors:

[2024-05-22 16:03:12,896] [eventloop-4-3] [WARN] [i.n.util.ReferenceCountUtil]: Failed to release a message: PooledUnsafeDirectByteBuf(freed)
io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1
        at jars//io.netty.util.internal.ReferenceCountUpdater.toLiveRealRefCnt(ReferenceCountUpdater.java:83)
        at jars//io.netty.util.internal.ReferenceCountUpdater.release(ReferenceCountUpdater.java:148)
        at jars//io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:101)
        at jars//io.netty.util.ReferenceCountUtil.release(ReferenceCountUtil.java:90)
        at jars//io.netty.util.ReferenceCountUtil.safeRelease(ReferenceCountUtil.java:116)
        at jars//io.netty.channel.ChannelOutboundBuffer.remove0(ChannelOutboundBuffer.java:337)
        at jars//io.netty.channel.ChannelOutboundBuffer.failFlushed(ChannelOutboundBuffer.java:691)
        at jars//io.netty.channel.AbstractChannel$AbstractUnsafe.closeOutboundBufferForShutdown(AbstractChannel.java:672)
        at jars//io.netty.channel.AbstractChannel$AbstractUnsafe.shutdownOutput(AbstractChannel.java:666)
        at jars//io.netty.channel.AbstractChannel$AbstractUnsafe.handleWriteError(AbstractChannel.java:953)
        at jars//io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:933)
        at jars//io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.flush0(AbstractNioChannel.java:359)
        at jars//io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:895)
        at jars//io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1372)
        at jars//io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:935)
        at jars//io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:921)
        at jars//io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:907)
        at jars//io.netty.handler.flush.FlushConsolidationHandler.flushNow(FlushConsolidationHandler.java:204)
        at jars//io.netty.handler.flush.FlushConsolidationHandler.flushIfNeeded(FlushConsolidationHandler.java:197)
        at jars//io.netty.handler.flush.FlushConsolidationHandler.channelWritabilityChanged(FlushConsolidationHandler.java:180)
        at jars//io.netty.channel.AbstractChannelHandlerContext.invokeChannelWritabilityChanged(AbstractChannelHandlerContext.java:526)
        at jars//io.netty.channel.AbstractChannelHandlerContext.invokeChannelWritabilityChanged(AbstractChannelHandlerContext.java:505)
        at jars//io.netty.channel.AbstractChannelHandlerContext.fireChannelWritabilityChanged(AbstractChannelHandlerContext.java:498)
        at jars//io.netty.channel.DefaultChannelPipeline$HeadContext.channelWritabilityChanged(DefaultChannelPipeline.java:1433)
        at jars//io.netty.channel.AbstractChannelHandlerContext.invokeChannelWritabilityChanged(AbstractChannelHandlerContext.java:524)
        at jars//io.netty.channel.AbstractChannelHandlerContext.invokeChannelWritabilityChanged(AbstractChannelHandlerContext.java:505)
        at jars//io.netty.channel.DefaultChannelPipeline.fireChannelWritabilityChanged(DefaultChannelPipeline.java:931)
        at jars//io.netty.channel.ChannelOutboundBuffer.fireChannelWritabilityChanged(ChannelOutboundBuffer.java:659)
        at jars//io.netty.channel.ChannelOutboundBuffer.setUnwritable(ChannelOutboundBuffer.java:638)
        at jars//io.netty.channel.ChannelOutboundBuffer.incrementPendingOutboundBytes(ChannelOutboundBuffer.java:188)
        at jars//io.netty.channel.ChannelOutboundBuffer.addMessage(ChannelOutboundBuffer.java:140)
        at jars//io.netty.channel.AbstractChannel$AbstractUnsafe.write(AbstractChannel.java:882)
        at jars//io.netty.channel.DefaultChannelPipeline$HeadContext.write(DefaultChannelPipeline.java:1367)
        at jars//io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:889)
        at jars//io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:875)
        at jars//io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:984)
        at jars//io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:868)
        at jars//io.netty.handler.codec.http.HttpObjectEncoder.writeOutList(HttpObjectEncoder.java:121)
        at jars//io.netty.handler.codec.http.HttpObjectEncoder.write(HttpObjectEncoder.java:113)
        at jars//io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:893)
        at jars//io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:956)
        at jars//io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:982)
        at jars//io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:950)
        at jars//io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:1000)
        at jars//io.netty.handler.stream.ChunkedWriteHandler.doFlush(ChunkedWriteHandler.java:286)
        at jars//io.netty.handler.stream.ChunkedWriteHandler.flush(ChunkedWriteHandler.java:146)
        at jars//io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:937)
        at jars//io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:957)
        at jars//io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:982)
        at jars//io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:950)
        at jars//io.jooby.internal.netty.NettyContext.lambda$send$1(NettyContext.java:676)
        at jars//io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
        at jars//io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
        at jars//io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasksFrom(SingleThreadEventExecutor.java:426)
        at jars//io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:375)
        at jars//io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:557)
        at jars//io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
        at jars//io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at jars//io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:1583)
[2024-05-22 16:03:12,914] [eventloop-4-3] [ERROR] GET /swagger/swagger-ui-bundle.js 500 Server Error

Swagger page is broken.
Probably a side-effect of the latest Netty performance improvements https://github.com/jooby-project/jooby/commit/f30a43248141c3f592582113c7d02a4be244a8e0

jknack commented 1 month ago

will fix soon. mean while you can switch to undertow or jetty.