grpc/grpc-dotnet

INTERNAL: Internal error Rst Stream above okhttp 1.47.1 version

polingsky opened this issue · 2 comments

What version of gRPC-Java are you using?
1.47.1

What is your environment?
for Android, grpc verison v1.47.1
Tested with Android 6 to Android 14

app client ManagedChannel = OkHttpChannelBuilder.forAddress(TLS_HOST, TLS_PORT)
.overrideAuthority(TLS_HOST)
.sslSocketFactory(socketFactory)
.maxInboundMetadataSize(Integer.MAX_VALUE)
.maxInboundMessageSize(20 * 1024 * 1024)
.idleTimeout(2, TimeUnit.MINUTES)
.build();

Server side
.net 2.61.0

What did you expect to see?
I expect to be able to reuse the same ManagedChannel for each grpc call.
But it will somtimes fail and trigger INTERNAL: Internal error Rst Stream above okhttp 1.46.1 version (1.47.1 to 1.62.2).
This error not happend below okhttp 1.46.1 version (1.35.0 to 1.46.1)

What did you see instead?
INTERNAL: Internal error Rst Stream

On Android client side
INTERNAL: Internal error
Rst Stream|Status{code=INTERNAL, description=Internal error
Rst Stream, cause=null}

On .net server side
No error

grpc/grpc-java#11051 is the companion bug for grpc-java. There's not much to go on for what could be causing this. I looked through the changes in grpc-java and nothing jumped out. What are the various things that could trigger a RST_STREAM(INTERNAL) in grpc-dotnet? Or is there logging that could be enabled?

You can enable server-side logging. Instructions here: https://learn.microsoft.com/en-us/aspnet/core/grpc/diagnostics?view=aspnetcore-8.0#grpc-services-logging

Getting full information about the HTTP error likely requires capturing most logs, e.g. trace level for Grpc and Microsoft logs (HTTP/2 runs in the underlying Microsoft Kestrel server).