grpc / grpc/grpc-java

blocking stub v2 server streaming calls sometimes require .read() to initiate request

Offen
#12,073 6 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Java
Sterne
12.1k
Forks
4k
Ø Merge
2 T. 17 Std.
Gemergte PRs (30 T.)
37

Beschreibung

If the channel is in an idle state when `ClientCalls.blockingV2ServerStreamingCall` is invoked, sending the request will be queued up in `DelayedClientTransport`. When the connection is set up, `DelayedClientTransport` will run all the deferred request initiation steps on the call executor: https://github.com/grpc/grpc-java/blob/b88536a17d320065a972858e17e44e1e5c656a0f/core/src/main/java/io/grpc/internal/DelayedClientTransport.java#L306-L312 Unfortunately, the call executor for the blocking v2 stubs is a `ThreadSafeThreadlessExecutor`, which means the headers and request aren't actually sent until the client calls `.read()` on the `BlockingClientCall`.

In contrast, the blocking v1 stub always sent the request as soon as possible.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne in core/src/main/java/io/grpc/internal/DelayedClientTransport.java bei den Schritten zur verzögerten Anforderungsinitiierung in den Zeilen 306–312 und verfolge dann den ThreadSafeThreadlessExecutor, der von blockierenden v2-Stubs verwendet wird. Reproduziere den Fall eines inaktiven Kanals und überprüfe, dass die Header und die Anfrage gesendet werden, ohne dass BlockingClientCall.read() erforderlich ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java
Bereich
api
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
42/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.