-
Notifications
You must be signed in to change notification settings - Fork 19
Accidental StacklessClosedChannelException when using AsyncHttpClient #193
Copy link
Copy link
Open
Labels
bugSomething isn't workingSomething isn't workinglang: kotlinRelated for Kotlin languageRelated for Kotlin languagemodule: http-clientRelated to module - httpRelated to module - http
Description
When I use the following Koltin extension for AsyncHttpClient:
client.execute(request) { resp ->
// ...
}
sometimes requests are failed with this error:
ru.tinkoff.kora.http.client.common.HttpClientConnectionException: io.netty.channel.StacklessClosedChannelException
at ru.tinkoff.kora.http.client.async.AsyncHttpClient.lambda$execute$1(AsyncHttpClient.java:39)
at reactor.core.publisher.Mono.lambda$onErrorMap$28(Mono.java:3763)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94)
at ru.tinkoff.kora.common.util.ReactorContextHook$ContextPropagator.onError(ReactorContextHook.java:80)
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onError(FluxContextWrite.java:121)
at ru.tinkoff.kora.common.util.ReactorContextHook$ContextPropagator.onError(ReactorContextHook.java:75)
at reactor.core.publisher.MonoCreate$DefaultMonoSink.error(MonoCreate.java:201)
at ru.tinkoff.kora.http.client.async.MonoSinkStreamAsyncHandler.onThrowable(MonoSinkStreamAsyncHandler.java:66)
at org.asynchttpclient.netty.NettyResponseFuture.abort(NettyResponseFuture.java:277)
at org.asynchttpclient.netty.request.WriteListener.abortOnThrowable(WriteListener.java:50)
at org.asynchttpclient.netty.request.WriteListener.operationComplete(WriteListener.java:61)
at org.asynchttpclient.netty.request.WriteCompleteListener.operationComplete(WriteCompleteListener.java:28)
at org.asynchttpclient.netty.request.WriteCompleteListener.operationComplete(WriteCompleteListener.java:20)
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:552)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)
at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)
at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:609)
at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:117)
at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetFailure(AbstractChannel.java:999)
at io.netty.channel.AbstractChannel$AbstractUnsafe.write(AbstractChannel.java:860)
at io.netty.channel.DefaultChannelPipeline$HeadContext.write(DefaultChannelPipeline.java:1367)
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:877)
at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:940)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:966)
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:934)
at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:943)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:966)
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:934)
at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:943)
at io.netty.channel.AbstractChannelHandlerContext$WriteTask.run(AbstractChannelHandlerContext.java:1247)
at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:566)
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 java.base/java.lang.Thread.run(Unknown Source)
Caused by: io.netty.channel.StacklessClosedChannelException: null
at io.netty.channel.AbstractChannel$AbstractUnsafe.write(Object, ChannelPromise)(Unknown Source)
I don't know how to reproduce this, it just happens time to time.
Versions
JVM: corretto-17.0.6
Kora: 0.11.10
Kotlin: 1.8.22
kotlinx-coroutines: 1.7.1
KSP: 1.8.22-1.0.11
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workinglang: kotlinRelated for Kotlin languageRelated for Kotlin languagemodule: http-clientRelated to module - httpRelated to module - http