BlockingStub call hangs indefinitely in ClientCalls$ThreadlessExecutor.waitAndDrain after server completion
What version of gRPC-Java are you using?
gRPC-Java 1.75
What is your environment?
Linux arm64,JDK 17.0.15
What did you expect to see?
The blocking stub should return once the server sends a grpc-status: 0 completion, or throw a timeout exception if the deadline expires — it should never hang indefinitely.
What did you see instead?
When using a blocking stub with a timeout interceptor, the client occasionally hangs forever in:
io.grpc.stub.ClientCalls$ThreadlessExecutor.waitAndDrain(ClientCalls.java:817)
even though the server has already completed the RPC successfully (grpc-status: 0).
The thread remains parked indefinitely, and the application never proceeds.
This issue seems to occur randomly (low frequency)
Steps to reproduce the bug
###nterceptor
public class TimeoutInterceptor implements ClientInterceptor {
private final long timeout;
/**
* @param timeout ms
*/
public TimeoutInterceptor(long timeout) {
this.timeout = timeout;
}
@Override
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
MethodDescriptor<ReqT, RespT> method,
CallOptions callOptions,
Channel next) {
return next.newCall(method,
callOptions.withDeadlineAfter(timeout, TimeUnit.MILLISECONDS));
}
}
stack
"Test worker" #1 prio=5 os_prio=0 cpu=68854.65ms elapsed=51528.48s tid=0x0000ffffb40311a0 nid=0x321d1c waiting on condition [0x0000ffffb99fb000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park([email protected]/Native Method)
- parking to wait for <0x00000000d69d5a18> (a io.grpc.stub.ClientCalls$ThreadlessExecutor)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:211)
at io.grpc.stub.ClientCalls$ThreadlessExecutor.waitAndDrain(ClientCalls.java:817)
at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:166)
at org.tron.api.DatabaseGrpc$DatabaseBlockingStub.getBlockByNum(DatabaseGrpc.java:343)
at org.tron.common.client.DatabaseGrpcClient.getBlock(DatabaseGrpcClient.java:44)
...
grpc log
12:45:36.755 DEBUG [i.g.n.NettyClientHandler] [id: 0xe05d631e, L:/127.0.0.1:48716 - R:/127.0.0.1:57932] OUTBOUND HEADERS: streamId=5 headers=GrpcHttp2OutboundHeaders[:authority: 127.0.0.1:57932, :path: /protocol.Database/GetBlockByNum, :method: POST, :scheme: http, content-type: application/grpc, te: trailers, user-agent: grpc-java-netty/1.75.0, grpc-accept-encoding: gzip] padding=0 endStream=false
12:45:36.756 DEBUG [i.g.n.NettyClientHandler] [id: 0xe05d631e, L:/127.0.0.1:48716 - R:/127.0.0.1:57932] OUTBOUND DATA: streamId=5 padding=0 endStream=true length=5 bytes=0000000000
12:45:36.756 DEBUG [i.g.n.NettyServerHandler] [id: 0xa59d39e1, L:/127.0.0.1:57932 - R:/127.0.0.1:48716] INBOUND HEADERS: streamId=5 headers=GrpcHttp2RequestHeaders[:path: /protocol.Database/GetBlockByNum, :authority: 127.0.0.1:57932, :method: POST, :scheme: http, te: trailers, content-type: application/grpc, user-agent: grpc-java-netty/1.75.0, grpc-accept-encoding: gzip] padding=0 endStream=false
12:45:36.757 DEBUG [i.g.n.NettyServerHandler] [id: 0xa59d39e1, L:/127.0.0.1:57932 - R:/127.0.0.1:48716] INBOUND DATA: streamId=5 padding=0 endStream=true length=5 bytes=0000000000
12:45:36.758 DEBUG [i.g.n.NettyServerHandler] [id: 0xa59d39e1, L:/127.0.0.1:57932 - R:/127.0.0.1:48716] OUTBOUND HEADERS: streamId=5 headers=GrpcHttp2OutboundHeaders[:status: 200, content-type: application/grpc, grpc-encoding: identity, grpc-accept-encoding: gzip] padding=0 endStream=false
12:45:36.759 DEBUG [i.g.n.NettyServerHandler] [id: 0xa59d39e1, L:/127.0.0.1:57932 - R:/127.0.0.1:48716] OUTBOUND DATA: streamId=5 padding=0 endStream=false length=663 bytes=00000002920a720a705a6e0801126a0a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e74726163741239...
12:45:36.759 DEBUG [i.g.n.NettyServerHandler] [id: 0xa59d39e1, L:/127.0.0.1:57932 - R:/127.0.0.1:48716] OUTBOUND HEADERS: streamId=5 headers=GrpcHttp2OutboundHeaders[grpc-status: 0] padding=0 endStream=true
12:45:36.760 DEBUG [i.g.n.NettyClientHandler] [id: 0xe05d631e, L:/127.0.0.1:48716 - R:/127.0.0.1:57932] INBOUND HEADERS: streamId=5 headers=GrpcHttp2ResponseHeaders[:status: 200, content-type: application/grpc, grpc-encoding: identity, grpc-accept-encoding: gzip] padding=0 endStream=false
12:45:36.760 DEBUG [i.g.n.NettyClientHandler] [id: 0xe05d631e, L:/127.0.0.1:48716 - R:/127.0.0.1:57932] INBOUND DATA: streamId=5 padding=0 endStream=false length=663 bytes=00000002920a720a705a6e0801126a0a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e74726163741239...
12:45:36.761 DEBUG [i.g.n.NettyClientHandler] [id: 0xe05d631e, L:/127.0.0.1:48716 - R:/127.0.0.1:57932] INBOUND HEADERS: streamId=5 headers=GrpcHttp2ResponseHeaders[grpc-status: 0] padding=0 endStream=true
12:46:36.790 DEBUG [i.g.n.NettyServerHandler] [id: 0xa59d39e1, L:/127.0.0.1:57932 - R:/127.0.0.1:48716] OUTBOUND GO_AWAY: lastStreamId=2147483647 errorCode=0 length=8 bytes=6d61785f69646c65
12:46:36.791 DEBUG [i.g.n.NettyServerHandler] [id: 0xa59d39e1, L:/127.0.0.1:57932 - R:/127.0.0.1:48716] OUTBOUND PING: ack=false bytes=40715087873
12:46:36.791 DEBUG [i.g.n.NettyClientHandler] [id: 0xe05d631e, L:/127.0.0.1:48716 - R:/127.0.0.1:57932] INBOUND GO_AWAY: lastStreamId=2147483647 errorCode=0 length=8 bytes=6d61785f69646c65
12:46:36.795 DEBUG [i.g.n.NettyClientHandler] [id: 0xe05d631e, L:/127.0.0.1:48716 - R:/127.0.0.1:57932] INBOUND PING: ack=false bytes=40715087873
12:46:36.795 DEBUG [i.g.n.NettyClientHandler] [id: 0xe05d631e, L:/127.0.0.1:48716 - R:/127.0.0.1:57932] OUTBOUND PING: ack=true bytes=40715087873
12:46:36.795 DEBUG [i.g.n.NettyServerHandler] [id: 0xa59d39e1, L:/127.0.0.1:57932 - R:/127.0.0.1:48716] INBOUND PING: ack=true bytes=40715087873
12:46:36.795 DEBUG [i.g.n.NettyServerHandler] [id: 0xa59d39e1, L:/127.0.0.1:57932 - R:/127.0.0.1:48716] OUTBOUND GO_AWAY: lastStreamId=5 errorCode=0 length=8 bytes=6d61785f69646c65
12:46:36.796 DEBUG [i.g.n.NettyClientHandler] [id: 0xe05d631e, L:/127.0.0.1:48716 - R:/127.0.0.1:57932] INBOUND GO_AWAY: lastStreamId=5 errorCode=0 length=8 bytes=6d61785f69646c65
Do you see any log about uncaught exception from ThreadlessExecutor.runQuietly?
@kannanjgithub No, I added a DebugInterceptor. When it gets stuck, there are no onMessage and onClose logs.
public class DebugInterceptor implements ClientInterceptor {
@Override
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) {
ClientCall<ReqT, RespT> call = next.newCall(method, callOptions);
return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(call) {
@Override
public void start(Listener<RespT> responseListener, Metadata headers) {
super.start(new ForwardingClientCallListener.SimpleForwardingClientCallListener<RespT>(
responseListener) {
@Override
public void onHeaders(Metadata headers) {
logger.debug("onHeaders: {}", headers);
super.onHeaders(headers);
}
@Override
public void onClose(Status status, Metadata trailers) {
logger.debug("onClose: {}, {}", status, trailers);
super.onClose(status, trailers);
}
@Override
public void onMessage(RespT message) {
logger.debug("onMessage: {}", message);
super.onMessage(message);
}
}, headers);
}
};
}
}
There was a fix we made for handling RST_STREAM but that already went into 1.74.0 and you are on 1.75.0. Can you enable io.netty debug logs as well on the client?
@kannanjgithub, client and server both are debug logs
2025-11-07 17:12:54.849 DEBUG [Test worker] [i.n.u.i.InternalThreadLocalMap](InternalThreadLocalMap.java:100) -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
2025-11-07 17:12:54.849 DEBUG [Test worker] [i.n.u.i.InternalThreadLocalMap](InternalThreadLocalMap.java:101) -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
2025-11-07 17:12:54.861 DEBUG [Test worker] [i.n.c.n.NioEventLoop](NioEventLoop.java:110) -Dio.netty.noKeySetOptimization: false
2025-11-07 17:12:54.861 DEBUG [Test worker] [i.n.c.n.NioEventLoop](NioEventLoop.java:111) -Dio.netty.selectorAutoRebuildThreshold: 512
2025-11-07 17:12:54.904 DEBUG [Test worker] [i.n.u.i.PlatformDependent](PlatformDependent.java:1048) org.jctools-core.MpscChunkedArrayQueue: available
2025-11-07 17:13:22.506 DEBUG [Test worker] [i.n.u.ResourceLeakDetector](ResourceLeakDetector.java:129) -Dio.netty.leakDetection.level: simple
2025-11-07 17:13:22.507 DEBUG [Test worker] [i.n.u.ResourceLeakDetector](ResourceLeakDetector.java:130) -Dio.netty.leakDetection.targetRecords: 4
2025-11-07 17:13:22.509 DEBUG [Test worker] [i.n.b.PooledByteBufAllocator](PooledByteBufAllocator.java:161) -Dio.netty.allocator.numHeapArenas: 16
2025-11-07 17:13:22.509 DEBUG [Test worker] [i.n.b.PooledByteBufAllocator](PooledByteBufAllocator.java:162) -Dio.netty.allocator.numDirectArenas: 16
2025-11-07 17:13:22.509 DEBUG [Test worker] [i.n.b.PooledByteBufAllocator](PooledByteBufAllocator.java:164) -Dio.netty.allocator.pageSize: 8192
2025-11-07 17:13:22.509 DEBUG [Test worker] [i.n.b.PooledByteBufAllocator](PooledByteBufAllocator.java:169) -Dio.netty.allocator.maxOrder: 9
2025-11-07 17:13:22.509 DEBUG [Test worker] [i.n.b.PooledByteBufAllocator](PooledByteBufAllocator.java:173) -Dio.netty.allocator.chunkSize: 4194304
2025-11-07 17:13:22.509 DEBUG [Test worker] [i.n.b.PooledByteBufAllocator](PooledByteBufAllocator.java:174) -Dio.netty.allocator.smallCacheSize: 256
2025-11-07 17:13:22.509 DEBUG [Test worker] [i.n.b.PooledByteBufAllocator](PooledByteBufAllocator.java:175) -Dio.netty.allocator.normalCacheSize: 64
2025-11-07 17:13:22.509 DEBUG [Test worker] [i.n.b.PooledByteBufAllocator](PooledByteBufAllocator.java:176) -Dio.netty.allocator.maxCachedBufferCapacity: 32768
2025-11-07 17:13:22.509 DEBUG [Test worker] [i.n.b.PooledByteBufAllocator](PooledByteBufAllocator.java:177) -Dio.netty.allocator.cacheTrimInterval: 8192
2025-11-07 17:13:22.509 DEBUG [Test worker] [i.n.b.PooledByteBufAllocator](PooledByteBufAllocator.java:178) -Dio.netty.allocator.cacheTrimIntervalMillis: 0
2025-11-07 17:13:22.509 DEBUG [Test worker] [i.n.b.PooledByteBufAllocator](PooledByteBufAllocator.java:179) -Dio.netty.allocator.useCacheForAllThreads: false
2025-11-07 17:13:22.509 DEBUG [Test worker] [i.n.b.PooledByteBufAllocator](PooledByteBufAllocator.java:180) -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
2025-11-07 17:13:22.509 DEBUG [Test worker] [i.n.b.PooledByteBufAllocator](PooledByteBufAllocator.java:182) -Dio.netty.allocator.disableCacheFinalizersForFastThreadLocalThreads: false
There is not much in these logs. We need logs like in this comment here with details about the netty streams.
@kannanjgithub How do I configure log output if there are no similar logs during the call? Would you like me to configure something like a LoggingHandler?
By the way, this issue doesn't happen on x86.
12:45:36.760 DEBUG [i.g.n.NettyClientHandler] [id: 0xe05d631e, L:/127.0.0.1:48716 - R:/127.0.0.1:57932] INBOUND DATA: streamId=5 padding=0 endStream=false length=663 bytes=00000002920a720a705a6e0801126a0a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e74726163741239... 12:45:36.761 DEBUG [i.g.n.NettyClientHandler] [id: 0xe05d631e, L:/127.0.0.1:48716 - R:/127.0.0.1:57932] INBOUND HEADERS: streamId=5 headers=GrpcHttp2ResponseHeaders[grpc-status: 0] padding=0 endStream=true
@kannanjgithub Hi, from the grpc logs mentioned above, does the logs as "INBOUND DATA" mean that the response data from the server has been transferred to the grpc-core, such as the grpc netty client?
2025-11-11 07:59:23.821 DEBUG [grpc-nio-worker-ELG-2-5] [i.g.n.NettyServerHandler](AbstractInternalLogger.java:214) [id: 0x457f0d6d, L:/127.0.0.1:15000 - R:/127.0.0.1:404
24] OUTBOUND HEADERS: streamId=33 headers=GrpcHttp2OutboundHeaders[:status: 200, content-type: application/grpc, grpc-encoding: identity, grpc-accept-encoding: gzip] padd
ing=0 endStream=false
2025-11-11 07:59:23.821 DEBUG [grpc-nio-worker-ELG-2-5] [i.g.n.NettyServerHandler](AbstractInternalLogger.java:214) [id: 0x457f0d6d, L:/127.0.0.1:15000 - R:/127.0.0.1:404
24] OUTBOUND DATA: streamId=33 padding=0 endStream=false length=99 bytes=000000005e225c10021a58436f6e74726163742076616c6964617465206572726f72203a20636f6e74726163742074797
065206572726f722c20756e65787065...
2025-11-11 07:59:23.821 DEBUG [grpc-nio-worker-ELG-2-5] [i.g.n.NettyServerHandler](AbstractInternalLogger.java:214) [id: 0x457f0d6d, L:/127.0.0.1:15000 - R:/127.0.0.1:404
24] OUTBOUND HEADERS: streamId=33 headers=GrpcHttp2OutboundHeaders[grpc-status: 0] padding=0 endStream=true
2025-11-11 07:59:23.822 DEBUG [grpc-nio-worker-ELG-2-4] [i.g.n.NettyClientHandler](AbstractInternalLogger.java:214) [id: 0x04ab8366, L:/127.0.0.1:40424 - R:/127.0.0.1:150
00] INBOUND HEADERS: streamId=33 headers=GrpcHttp2ResponseHeaders[:status: 200, content-type: application/grpc, grpc-encoding: identity, grpc-accept-encoding: gzip] paddi
ng=0 endStream=false
2025-11-11 07:59:23.822 DEBUG [grpc-nio-worker-ELG-2-4] [i.g.n.NettyClientHandler](AbstractInternalLogger.java:214) [id: 0x04ab8366, L:/127.0.0.1:40424 - R:/127.0.0.1:150
00] INBOUND DATA: streamId=33 padding=0 endStream=false length=99 bytes=000000005e225c10021a58436f6e74726163742076616c6964617465206572726f72203a20636f6e747261637420747970
65206572726f722c20756e65787065...
2025-11-11 07:59:23.823 DEBUG [grpc-nio-worker-ELG-2-4] [i.g.n.NettyClientHandler](AbstractInternalLogger.java:214) [id: 0x04ab8366, L:/127.0.0.1:40424 - R:/127.0.0.1:150
00] INBOUND HEADERS: streamId=33 headers=GrpcHttp2ResponseHeaders[grpc-status: 0] padding=0 endStream=true
2025-11-11 08:00:23.764 DEBUG [grpc-nio-worker-ELG-2-6] [i.g.n.NettyServerHandler](AbstractInternalLogger.java:214) [id: 0xcd83b03b, L:/127.0.0.1:30265 - R:/127.0.0.1:576
16] OUTBOUND GO_AWAY: lastStreamId=2147483647 errorCode=0 length=8 bytes=6d61785f69646c65
2025-11-11 08:00:23.766 DEBUG [grpc-nio-worker-ELG-2-6] [i.g.n.NettyServerHandler](AbstractInternalLogger.java:214) [id: 0xcd83b03b, L:/127.0.0.1:30265 - R:/127.0.0.1:576
16] OUTBOUND PING: ack=false bytes=40715087873
2025-11-11 08:00:23.766 DEBUG [grpc-nio-worker-ELG-2-5] [i.g.n.NettyClientHandler](AbstractInternalLogger.java:214) [id: 0xd233fc65, L:/127.0.0.1:57616 - R:/127.0.0.1:302
65] INBOUND GO_AWAY: lastStreamId=2147483647 errorCode=0 length=8 bytes=6d61785f69646c65
2025-11-11 08:00:23.768 DEBUG [grpc-nio-worker-ELG-2-5] [i.g.ChannelLogger](ChannelTracer.java:131) [Subchannel<22>: (127.0.0.1:30265)] NettyClientTransport<23>: (/127.0.
0.1:30265) SHUTDOWN with UNAVAILABLE(GOAWAY shut down transport. HTTP/2 error code: NO_ERROR, debug data: max_idle)
2025-11-11 08:00:23.769 DEBUG [grpc-nio-worker-ELG-2-5] [i.g.ChannelLogger](ChannelTracer.java:131) [Channel<3>: (127.0.0.1:30265)] Entering IDLE state with picker: io.gr
pc.internal.PickFirstLoadBalancer$RequestConnectionPicker@2c40c52b
2025-11-11 08:00:23.769 DEBUG [grpc-default-executor-1] [i.g.i.DnsNameResolver](DnsNameResolver.java:305) Attempting DNS resolution of 127.0.0.1
2025-11-11 08:00:23.770 DEBUG [grpc-nio-worker-ELG-2-5] [i.g.n.NettyClientHandler](AbstractInternalLogger.java:214) [id: 0xd233fc65, L:/127.0.0.1:57616 - R:/127.0.0.1:302
65] INBOUND PING: ack=false bytes=40715087873
2025-11-11 08:00:23.770 DEBUG [grpc-nio-worker-ELG-2-5] [i.g.n.NettyClientHandler](AbstractInternalLogger.java:214) [id: 0xd233fc65, L:/127.0.0.1:57616 - R:/127.0.0.1:302
65] OUTBOUND PING: ack=true bytes=40715087873
2025-11-11 08:00:23.770 DEBUG [grpc-nio-worker-ELG-2-6] [i.g.n.NettyServerHandler](AbstractInternalLogger.java:214) [id: 0xcd83b03b, L:/127.0.0.1:30265 - R:/127.0.0.1:576
16] INBOUND PING: ack=true bytes=40715087873
2025-11-11 08:00:23.771 DEBUG [grpc-nio-worker-ELG-2-6] [i.g.n.NettyServerHandler](AbstractInternalLogger.java:214) [id: 0xcd83b03b, L:/127.0.0.1:30265 - R:/127.0.0.1:576
16] OUTBOUND GO_AWAY: lastStreamId=3 errorCode=0 length=8 bytes=6d61785f69646c65
Hi, these are all the logs we have. @kannanjgithub
@kannanjgithub Hi, from the grpc logs mentioned above, does the logs as "INBOUND DATA" mean that the response data from the server has been transferred to the grpc-core, such as the grpc netty client?
Yes.
We are still looking into the issue.
Hang observed on:
- Amazon Linux 2023.6.20241121
- Amazon Linux 2023.7.20250527
- Amazon Linux 2023.7.20250623
- Amazon Linux 2023.4.20240611
There are still no other useful logs.
2025-11-20 14:49:44.098 DEBUG [grpc-nio-worker-ELG-2-1] [i.g.n.NettyServerHandler](AbstractInternalLogger.java:214) [id: 0x6ca6a5c9, L:/127.0.0.1:15305 - R:/127.0.0.1:57270] OUTBOUND HEADERS: streamId=39 headers=GrpcHttp2OutboundHeaders[:status: 200, content-type: application/grpc, grpc-encoding: identity, grpc-accept-encoding: gzip] padding=0 endStream=false
2025-11-20 14:49:44.099 DEBUG [grpc-nio-worker-ELG-2-1] [i.g.n.NettyServerHandler](AbstractInternalLogger.java:214) [id: 0x6ca6a5c9, L:/127.0.0.1:15305 - R:/127.0.0.1:57270] OUTBOUND DATA: streamId=39 padding=0 endStream=false length=5 bytes=0000000000
2025-11-20 14:49:44.099 DEBUG [grpc-nio-worker-ELG-2-1] [i.g.n.NettyServerHandler](AbstractInternalLogger.java:214) [id: 0x6ca6a5c9, L:/127.0.0.1:15305 - R:/127.0.0.1:57270] OUTBOUND HEADERS: streamId=39 headers=GrpcHttp2OutboundHeaders[grpc-status: 0] padding=0 endStream=true
2025-11-20 14:49:44.099 DEBUG [grpc-nio-worker-ELG-2-16] [i.g.n.NettyClientHandler](AbstractInternalLogger.java:214) [id: 0x81e635dc, L:/127.0.0.1:57270 - R:/127.0.0.1:15305] INBOUND HEADERS: streamId=39 headers=GrpcHttp2ResponseHeaders[:status: 200, content-type: application/grpc, grpc-encoding: identity, grpc-accept-encoding: gzip] padding=0 endStream=false
2025-11-20 14:49:44.099 DEBUG [grpc-nio-worker-ELG-2-16] [i.g.n.NettyClientHandler](AbstractInternalLogger.java:214) [id: 0x81e635dc, L:/127.0.0.1:57270 - R:/127.0.0.1:15305] INBOUND DATA: streamId=39 padding=0 endStream=false length=5 bytes=0000000000
2025-11-20 14:49:44.099 DEBUG [grpc-nio-worker-ELG-2-16] [i.g.n.NettyClientHandler](AbstractInternalLogger.java:214) [id: 0x81e635dc, L:/127.0.0.1:57270 - R:/127.0.0.1:15305] INBOUND HEADERS: streamId=39 headers=GrpcHttp2ResponseHeaders[grpc-status: 0] padding=0 endStream=true
2025-11-20 14:50:44.054 DEBUG [grpc-nio-worker-ELG-2-6] [i.g.n.NettyServerHandler](AbstractInternalLogger.java:214) [id: 0x0a325c07, L:/127.0.0.1:11901 - R:/127.0.0.1:59558] OUTBOUND GO_AWAY: lastStreamId=2147483647 errorCode=0 length=8 bytes=6d61785f69646c65
2025-11-20 14:50:44.056 DEBUG [grpc-nio-worker-ELG-2-6] [i.g.n.NettyServerHandler](AbstractInternalLogger.java:214) [id: 0x0a325c07, L:/127.0.0.1:11901 - R:/127.0.0.1:59558] OUTBOUND PING: ack=false bytes=40715087873
2025-11-20 14:50:44.056 DEBUG [grpc-nio-worker-ELG-2-5] [i.g.n.NettyClientHandler](AbstractInternalLogger.java:214) [id: 0x80d08a8a, L:/127.0.0.1:59558 - R:/127.0.0.1:11901] INBOUND GO_AWAY: lastStreamId=2147483647 errorCode=0 length=8 bytes=6d61785f69646c65
2025-11-20 14:50:44.057 DEBUG [grpc-nio-worker-ELG-2-5] [i.g.ChannelLogger](ChannelTracer.java:131) [Subchannel<22>: (127.0.0.1:11901)] NettyClientTransport<23>: (/127.0.0.1:11901) SHUTDOWN with UNAVAILABLE(GOAWAY shut down transport. HTTP/2 error code: NO_ERROR, debug data: max_idle)