You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
We found that after upgrading a stack from Spring boot 3.1.6 to 3.3.5 that outbound requests using WebClient fail.
Not sure when the issue appeared, but have tested against Spring Boot 3.3.5 and 3.3.6, and the same code works against 3.1.6
In the attached code, compiled (using spring native) against spring boot 3.1.6, then everything works. (An http request is sent and the response returned)
However, after upgrading to Spring Boot 3.3.6, the request fails to send.
The underlying issue appears to be a problem in Netty's DNS resolution
Caused by: io.netty.resolver.dns.DnsResolveContext$SearchDomainUnknownHostException: Failed to resolve 'catfact.ninja' [A(1)] and search domain query for configured domains failed as well: [cable.virginm.net]
Which in turn seems to have the following linked exceptions:
Caused by: io.netty.resolver.dns.DnsNameResolverException: [394: /194.168.8.100:53] DefaultDnsQuestion(catfact.ninja. IN A) failed to send a query '394' via UDP (no stack trace available)
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.MessageToMessageEncoder.write(MessageToMessageEncoder.java:107)
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:893)
Full stack trace:
Exception in thread "main" org.springframework.web.reactive.function.client.WebClientRequestException: Failed to resolve 'catfact.ninja' [A(1)] and search domain query for configured domains failed as well: [cable.virginm.net]
at org.springframework.web.reactive.function.client.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:136)
Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below:
Error has been observed at the following site(s):
*__checkpoint ⇢ Request to GET https://catfact.ninja/fact [DefaultWebClient]
Original Stack Trace:
at org.springframework.web.reactive.function.client.ExchangeFunctions$DefaultExchangeFunction.lambda$wrapException$9(ExchangeFunctions.java:136)
at reactor.core.publisher.MonoErrorSupplied.subscribe(MonoErrorSupplied.java:55)
at reactor.core.publisher.Mono.subscribe(Mono.java:4576)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)
at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
at reactor.core.publisher.MonoNext$NextSubscriber.onError(MonoNext.java:93)
at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onError(MonoFlatMapMany.java:205)
at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)
at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.whenError(FluxRetryWhen.java:229)
at reactor.core.publisher.FluxRetryWhen$RetryWhenOtherSubscriber.onError(FluxRetryWhen.java:279)
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121)
at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.maybeOnError(FluxConcatMapNoPrefetch.java:327)
at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.onNext(FluxConcatMapNoPrefetch.java:212)
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107)
at reactor.core.publisher.SinkManyEmitterProcessor.drain(SinkManyEmitterProcessor.java:476)
at reactor.core.publisher.SinkManyEmitterProcessor$EmitterInner.drainParent(SinkManyEmitterProcessor.java:620)
at reactor.core.publisher.FluxPublish$PubSubInner.request(FluxPublish.java:874)
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.request(FluxContextWrite.java:136)
at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.request(FluxConcatMapNoPrefetch.java:337)
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.request(FluxContextWrite.java:136)
at reactor.core.publisher.Operators$DeferredSubscription.request(Operators.java:1743)
at reactor.core.publisher.FluxRetryWhen$RetryWhenMainSubscriber.onError(FluxRetryWhen.java:196)
at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:205)
at reactor.netty.http.client.HttpClientConnect$MonoHttpConnect$ClientTransportSubscriber.onError(HttpClientConnect.java:311)
at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:205)
at reactor.netty.resources.DefaultPooledConnectionProvider$DisposableAcquire.onError(DefaultPooledConnectionProvider.java:172)
at reactor.netty.internal.shaded.reactor.pool.AbstractPool$Borrower.fail(AbstractPool.java:480)
at reactor.netty.internal.shaded.reactor.pool.SimpleDequePool.lambda$drainLoop$9(SimpleDequePool.java:436)
at reactor.core.publisher.FluxDoOnEach$DoOnEachSubscriber.onError(FluxDoOnEach.java:186)
at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:205)
at reactor.netty.resources.DefaultPooledConnectionProvider$PooledConnectionAllocator$PooledConnectionInitializer.onError(DefaultPooledConnectionProvider.java:583)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241)
at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106)
at reactor.core.publisher.Operators.error(Operators.java:198)
at reactor.core.publisher.MonoError.subscribe(MonoError.java:53)
at reactor.core.publisher.Mono.subscribe(Mono.java:4576)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)
at reactor.netty.transport.TransportConnector$MonoChannelPromise.tryFailure(TransportConnector.java:576)
at reactor.netty.transport.TransportConnector.lambda$doResolveAndConnect$11(TransportConnector.java:375)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629)
at io.netty.util.concurrent.DefaultPromise.setFailure(DefaultPromise.java:110)
at io.netty.resolver.InetSocketAddressResolver$2.operationComplete(InetSocketAddressResolver.java:86)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629)
at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118)
at io.netty.resolver.dns.DnsResolveContext$1.operationComplete(DnsResolveContext.java:268)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629)
at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118)
at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1158)
at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:1097)
at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:455)
at io.netty.resolver.dns.DnsResolveContext.access$700(DnsResolveContext.java:70)
at io.netty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:524)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:185)
at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:35)
at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:487)
at io.netty.resolver.dns.DnsResolveContext.access$700(DnsResolveContext.java:70)
at io.netty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:524)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:185)
at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:35)
at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:487)
at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:1216)
at io.netty.resolver.dns.DnsResolveContext.internalResolve(DnsResolveContext.java:395)
at io.netty.resolver.dns.DnsResolveContext.doSearchDomainQuery(DnsResolveContext.java:321)
at io.netty.resolver.dns.DnsAddressResolveContext.doSearchDomainQuery(DnsAddressResolveContext.java:99)
at io.netty.resolver.dns.DnsResolveContext.resolve(DnsResolveContext.java:283)
at io.netty.resolver.dns.DnsNameResolver.resolveNow(DnsNameResolver.java:1302)
at io.netty.resolver.dns.DnsNameResolver.doResolveAllUncached0(DnsNameResolver.java:1286)
at io.netty.resolver.dns.DnsNameResolver.doResolveAllUncached(DnsNameResolver.java:1227)
at io.netty.resolver.dns.DnsNameResolver.doResolveAllNow(DnsNameResolver.java:1156)
at io.netty.resolver.dns.DnsNameResolver.access$600(DnsNameResolver.java:96)
at io.netty.resolver.dns.DnsNameResolver$7.operationComplete(DnsNameResolver.java:1145)
at io.netty.resolver.dns.DnsNameResolver$7.operationComplete(DnsNameResolver.java:1142)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625)
at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105)
at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)
at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:988)
at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:577)
at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1281)
at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:600)
at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:579)
at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:922)
at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:259)
at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:380)
at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:405)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
at [email protected]/java.lang.Thread.run(Thread.java:1583)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:902)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:878)
Suppressed: java.lang.Exception: #block terminated with an error
at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:104)
at reactor.core.publisher.Mono.block(Mono.java:1779)
at com.example.graal_netty_reproducer.GraalNettyReproducerApplicationKt.main(GraalNettyReproducerApplication.kt:29)
at [email protected]/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)
Caused by: io.netty.resolver.dns.DnsResolveContext$SearchDomainUnknownHostException: Failed to resolve 'catfact.ninja' [A(1)] and search domain query for configured domains failed as well: [cable.virginm.net]
at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1150)
at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:1097)
at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:455)
at io.netty.resolver.dns.DnsResolveContext.access$700(DnsResolveContext.java:70)
at io.netty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:524)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:185)
at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:35)
at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:487)
at io.netty.resolver.dns.DnsResolveContext.access$700(DnsResolveContext.java:70)
at io.netty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:524)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:185)
at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:35)
at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:487)
at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:1216)
at io.netty.resolver.dns.DnsResolveContext.internalResolve(DnsResolveContext.java:395)
at io.netty.resolver.dns.DnsResolveContext.doSearchDomainQuery(DnsResolveContext.java:321)
at io.netty.resolver.dns.DnsAddressResolveContext.doSearchDomainQuery(DnsAddressResolveContext.java:99)
at io.netty.resolver.dns.DnsResolveContext.resolve(DnsResolveContext.java:283)
at io.netty.resolver.dns.DnsNameResolver.resolveNow(DnsNameResolver.java:1302)
at io.netty.resolver.dns.DnsNameResolver.doResolveAllUncached0(DnsNameResolver.java:1286)
at io.netty.resolver.dns.DnsNameResolver.doResolveAllUncached(DnsNameResolver.java:1227)
at io.netty.resolver.dns.DnsNameResolver.doResolveAllNow(DnsNameResolver.java:1156)
at io.netty.resolver.dns.DnsNameResolver.access$600(DnsNameResolver.java:96)
at io.netty.resolver.dns.DnsNameResolver$7.operationComplete(DnsNameResolver.java:1145)
at io.netty.resolver.dns.DnsNameResolver$7.operationComplete(DnsNameResolver.java:1142)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625)
at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105)
at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)
at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:988)
at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:577)
at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1281)
at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:600)
at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:579)
at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:922)
at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:259)
at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:380)
at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:405)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
at [email protected]/java.lang.Thread.run(Thread.java:1583)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:902)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:878)
Caused by: io.netty.resolver.dns.DnsNameResolverException: [394: /194.168.8.100:53] DefaultDnsQuestion(catfact.ninja. IN A) failed to send a query '394' via UDP (no stack trace available)
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.MessageToMessageEncoder.write(MessageToMessageEncoder.java:107)
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:893)
at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:956)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:982)
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:950)
at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:969)
at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:310)
at io.netty.resolver.dns.DnsQueryContext.writeQuery(DnsQueryContext.java:247)
at io.netty.resolver.dns.DnsQueryContext.sendQuery(DnsQueryContext.java:241)
at io.netty.resolver.dns.DnsQueryContext.writeQuery(DnsQueryContext.java:230)
at io.netty.resolver.dns.DnsNameResolver.doQuery(DnsNameResolver.java:1440)
at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:482)
at io.netty.resolver.dns.DnsResolveContext.access$700(DnsResolveContext.java:70)
at io.netty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:524)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:185)
at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:35)
at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:487)
at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:1216)
at io.netty.resolver.dns.DnsResolveContext.internalResolve(DnsResolveContext.java:395)
at io.netty.resolver.dns.DnsResolveContext.doSearchDomainQuery(DnsResolveContext.java:321)
at io.netty.resolver.dns.DnsAddressResolveContext.doSearchDomainQuery(DnsAddressResolveContext.java:99)
at io.netty.resolver.dns.DnsResolveContext.resolve(DnsResolveContext.java:283)
at io.netty.resolver.dns.DnsNameResolver.resolveNow(DnsNameResolver.java:1302)
at io.netty.resolver.dns.DnsNameResolver.doResolveAllUncached0(DnsNameResolver.java:1286)
at io.netty.resolver.dns.DnsNameResolver.doResolveAllUncached(DnsNameResolver.java:1227)
at io.netty.resolver.dns.DnsNameResolver.doResolveAllNow(DnsNameResolver.java:1156)
at io.netty.resolver.dns.DnsNameResolver.access$600(DnsNameResolver.java:96)
at io.netty.resolver.dns.DnsNameResolver$7.operationComplete(DnsNameResolver.java:1145)
at io.netty.resolver.dns.DnsNameResolver$7.operationComplete(DnsNameResolver.java:1142)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625)
at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105)
at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)
at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:988)
at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:577)
at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1281)
at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:600)
at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:579)
at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:922)
at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:259)
at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:380)
at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:405)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at [email protected]/java.lang.Thread.runWith(Thread.java:1596)
at [email protected]/java.lang.Thread.run(Thread.java:1583)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:902)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:878)
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)
at io.netty.buffer.PoolThreadCache$MemoryRegionCache.<init>(PoolThreadCache.java:337)
at io.netty.buffer.PoolThreadCache$SubPageMemoryRegionCache.<init>(PoolThreadCache.java:302)
at io.netty.buffer.PoolThreadCache.createSubPageCaches(PoolThreadCache.java:113)
at io.netty.buffer.PoolThreadCache.<init>(PoolThreadCache.java:77)
at io.netty.buffer.PooledByteBufAllocator$PoolThreadLocalCache.initialValue(PooledByteBufAllocator.java:541)
at io.netty.buffer.PooledByteBufAllocator$PoolThreadLocalCache.initialValue(PooledByteBufAllocator.java:518)
at io.netty.util.concurrent.FastThreadLocal.initialize(FastThreadLocal.java:177)
at io.netty.util.concurrent.FastThreadLocal.get(FastThreadLocal.java:142)
at io.netty.buffer.PooledByteBufAllocator.newDirectBuffer(PooledByteBufAllocator.java:398)
at io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:188)
at io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:179)
at io.netty.buffer.AbstractByteBufAllocator.ioBuffer(AbstractByteBufAllocator.java:140)
at io.netty.handler.codec.dns.DatagramDnsQueryEncoder.allocateBuffer(DatagramDnsQueryEncoder.java:80)
at io.netty.handler.codec.dns.DatagramDnsQueryEncoder.encode(DatagramDnsQueryEncoder.java:58)
at io.netty.handler.codec.dns.DatagramDnsQueryEncoder.encode(DatagramDnsQueryEncoder.java:32)
at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:90)
... 57 more
The text was updated successfully, but these errors were encountered:
Versions
Reproducer project: graal-netty-reproducer.zip
We found that after upgrading a stack from Spring boot 3.1.6 to 3.3.5 that outbound requests using WebClient fail.
Not sure when the issue appeared, but have tested against Spring Boot 3.3.5 and 3.3.6, and the same code works against 3.1.6
In the attached code, compiled (using spring native) against spring boot 3.1.6, then everything works. (An http request is sent and the response returned)
However, after upgrading to Spring Boot 3.3.6, the request fails to send.
The underlying issue appears to be a problem in Netty's DNS resolution
Which in turn seems to have the following linked exceptions:
Full stack trace:
The text was updated successfully, but these errors were encountered: