Caused by: java.lang.NoClassDefFoundError: Could not initialize class io.netty.util.internal.shaded.org.jctools.queues.unpadded.MpscUnpaddedArrayQueue
Version: 3.3.6 When application start up with aot, error happen(It's normal in 3.3.5):
2024-11-22T10:25:52.501+08:00 WARN 1 --- [oundedElastic-1] o.s.b.a.d.r.RedisReactiveHealthIndicator : Redis health check failed
org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.translateException(LettuceConnectionFactory.java:1849) ~[na:na]
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1780) ~[na:na]
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:1582) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:3.3.6]
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.lambda$getConnection$0(LettuceConnectionFactory.java:1562) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:3.3.6]
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.doInLock(LettuceConnectionFactory.java:1523) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:3.3.6]
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getConnection(LettuceConnectionFactory.java:1559) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:3.3.6]
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getSharedReactiveConnection(LettuceConnectionFactory.java:1270) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:3.3.6]
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getReactiveConnection(LettuceConnectionFactory.java:1145) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:3.3.6]
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getReactiveConnection(LettuceConnectionFactory.java:118) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:3.3.6]
at reactor.core.publisher.MonoSupplier.call(MonoSupplier.java:67) ~[na:na]
at reactor.core.publisher.FluxSubscribeOnCallable$CallableSubscribeOnSubscription.run(FluxSubscribeOnCallable.java:228) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:3.6.12]
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:3.6.12]
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:3.6.12]
at java.base@23.0.1/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:na]
at java.base@23.0.1/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[na:na]
at java.base@23.0.1/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:na]
at java.base@23.0.1/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[na:na]
at java.base@23.0.1/java.lang.Thread.runWith(Thread.java:1588) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:na]
at java.base@23.0.1/java.lang.Thread.run(Thread.java:1575) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:na]
at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:832) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:na]
at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:808) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:na]
Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to redis/<unresolved>:6379
at io.lettuce.core.AbstractRedisClient.getConnection(AbstractRedisClient.java:350) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:6.3.2.RELEASE/8941aea]
at io.lettuce.core.RedisClient.connect(RedisClient.java:215) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:6.3.2.RELEASE/8941aea]
at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.lambda$getConnection$1(StandaloneConnectionProvider.java:112) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:3.3.6]
at java.base@23.0.1/java.util.Optional.orElseGet(Optional.java:364) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:na]
at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.getConnection(StandaloneConnectionProvider.java:112) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:3.3.6]
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1778) ~[na:na]
... 19 common frames omitted
Caused by: io.netty.handler.codec.EncoderException: java.lang.NoClassDefFoundError: Could not initialize class io.netty.util.internal.shaded.org.jctools.queues.unpadded.MpscUnpaddedArrayQueue
at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:125) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:893) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:875) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:984) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:868) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.lettuce.core.protocol.CommandHandler.writeSingleCommand(CommandHandler.java:421) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:6.3.2.RELEASE/8941aea]
at io.lettuce.core.protocol.CommandHandler.write(CommandHandler.java:387) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:6.3.2.RELEASE/8941aea]
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:891) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:956) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:982) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:950) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:1000) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:974) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:305) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.lettuce.core.RedisHandshake.dispatch(RedisHandshake.java:290) ~[na:na]
at io.lettuce.core.RedisHandshake.dispatchHello(RedisHandshake.java:227) ~[na:na]
at io.lettuce.core.RedisHandshake.initiateHandshakeResp3(RedisHandshake.java:215) ~[na:na]
at io.lettuce.core.RedisHandshake.tryHandshakeResp3(RedisHandshake.java:105) ~[na:na]
at io.lettuce.core.RedisHandshake.initialize(RedisHandshake.java:92) ~[na:na]
at io.lettuce.core.protocol.RedisHandshakeHandler.channelActive(RedisHandshakeHandler.java:100) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:6.3.2.RELEASE/8941aea]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:260) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:238) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:231) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.ChannelInboundHandlerAdapter.channelActive(ChannelInboundHandlerAdapter.java:69) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.lettuce.core.ChannelGroupListener.channelActive(ChannelGroupListener.java:57) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:6.3.2.RELEASE/8941aea]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:260) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:238) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:231) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelActive(DefaultChannelPipeline.java:1345) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:258) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:238) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelActive(DefaultChannelPipeline.java:844) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:310) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) ~[na:na]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) ~[na:na]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) ~[na:na]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[na:na]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[na:na]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[na:na]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[na:na]
... 4 common frames omitted
Caused by: java.lang.NoClassDefFoundError: Could not initialize class io.netty.util.internal.shaded.org.jctools.queues.unpadded.MpscUnpaddedArrayQueue
at io.netty.util.internal.PlatformDependent.newFixedMpscUnpaddedQueue(PlatformDependent.java:1102) ~[na:na]
at io.netty.buffer.PoolThreadCache$MemoryRegionCache.<init>(PoolThreadCache.java:337) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.buffer.PoolThreadCache$SubPageMemoryRegionCache.<init>(PoolThreadCache.java:302) ~[na:na]
at io.netty.buffer.PoolThreadCache.createSubPageCaches(PoolThreadCache.java:113) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.buffer.PoolThreadCache.<init>(PoolThreadCache.java:77) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.buffer.PooledByteBufAllocator$PoolThreadLocalCache.initialValue(PooledByteBufAllocator.java:541) ~[na:na]
at io.netty.buffer.PooledByteBufAllocator$PoolThreadLocalCache.initialValue(PooledByteBufAllocator.java:518) ~[na:na]
at io.netty.util.concurrent.FastThreadLocal.initialize(FastThreadLocal.java:177) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.util.concurrent.FastThreadLocal.get(FastThreadLocal.java:142) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.buffer.PooledByteBufAllocator.newDirectBuffer(PooledByteBufAllocator.java:398) ~[na:na]
at io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:188) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:179) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.netty.buffer.AbstractByteBufAllocator.ioBuffer(AbstractByteBufAllocator.java:132) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
at io.lettuce.core.protocol.CommandEncoder.allocateBuffer(CommandEncoder.java:65) ~[na:na]
at io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:105) ~[wiki.chiu.micro.websocket.MicroWebSocketApplication:4.1.115.Final]
... 44 common frames omitted
Comment From: mhalbritter
Hello - i assume this is in a native image?
You need to use reachability metadata version 0.3.14, which has updated metadata for netty: https://github.com/oracle/graalvm-reachability-metadata/releases/tag/0.3.14
There hasn't been a Native Build Tools release yet - as soon as Oracle releases one, Boot will pick it up and this issue goes away automatically.
Comment From: mhalbritter
Here are the instructions how to do that for Maven: https://graalvm.github.io/native-build-tools/latest/maven-plugin.html#metadata-support and here for gradle: https://graalvm.github.io/native-build-tools/latest/gradle-plugin.html#metadata-support
I'll add something to the release notes.
Comment From: mingchiuli
Hello - i assume this is in a native image?
You need to use reachability metadata version 0.3.14, which has updated metadata for netty: https://github.com/oracle/graalvm-reachability-metadata/releases/tag/0.3.14
There hasn't been a Native Build Tools release yet - as soon as Oracle releases one, Boot will pick it up and this issue goes away automatically.
Yes, It is native image. Thanks.
Comment From: mhalbritter
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.4-Release-Notes#netty-in-native-image
Comment From: jianyun
我也遇到了,不是Native 的
Comment From: mhalbritter
我也遇到了,不是Native 的
Translates to: It happened to me, too. It wasn't Native.
If this happens on a JVM, please create a small sample so that we can reproduce it: https://github.com/spring-projects/spring-boot/wiki/How-To-Get-Help
Comment From: aprochko
Hello @mhalbritter thank you for the link, but it's related to 3.4.0. The problem is that 3.3.6 (same as for @mingchiuli) this problem also exist. https://github.com/spring-projects/spring-boot/issues/43148 So it's also a kind of breaking changes for me, which are not described.
Comment From: wilkinsona
Unfortunately, it was a patch release of Netty that introduced the problem when using it in a native image and Spring Boot 3.3.6 upgraded to that patch release. Using 0.3.14 of the reachability metadata should address the problem with 3.3.6 as well.