Skip to content

Repeated requests in a loop with a timeout. GRPC DEADLINE_EXCEEDED -> Next request HTTP/2 error: (errorCode: 1) #688

@RubenGarcia

Description

@RubenGarcia
- I am using dart both for server and client. - I am awaiting repeated GRPC requests with a timeout of 200ms in a for loop - I am creating a new request after a response, a timeout or an error is provided by GRPC

After receiving a timeout (GRPC code 4, codeName DEADLINE_EXCEEDED)
The next request almost always errors with

<version of the grpc-dart packages used; see your pubspec.lock file>
grpc version: both "3.2.3" and "3.2.4" tested, both present the issue.

Tested with two Android phones connected to the same wifi.

Repro steps

Create a server, run it and run this code in the client:

Request request = Request();
for (int i = 0; i< size; i++) {
    try {
       CallOptions callOptions=CallOptions(timeout: Duration (milliseconds: 50));
       MyResponse response = await myGRPC!.getResponse(request, options: callOptions);
       // log response
    } on GrpcError catch (e) {
          // log e
    }
}

Expected result: Some good responses, some timeouts, but no consistent HTTP/2 protocol errors after a timeout

Actual result: Every timeout

GRPC code 4, codeName DEADLINE_EXCEEDED

is followed by an HTTP/2 error

HTTP/2 error: Connection error: Connection is being forcefully terminated. (errorCode: 1)

Details

I suspect the dart GRPC libraries need to verify that on the event of a timeout, the HTTP/2 protocol is still being followed so no PROTOCOL_ERROR is produced on subsequent calls.

Otherwise, if this is desired behaviour, it should be documented at CallOptions class in package:grpc/src/client/call.dart

Any input is appreciated regarding this.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions