grpc / grpc/grpc-java

BlockingStub returns iterator that cannot be closed

Ouverte
#2,409 10 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
docs
Langage dominant
Java
Étoiles
12.1k
Forks
4k
Merge moyen
2 j 17 h
PR mergées (30 j)
37

Description

I use a blocking sub for a method that returns a stream of messages. The return type of it is `Iterator`. It turns out I cannot make grpc client to end the request (e.g. because of client failure). There are a number of cases where an open connection may stuck in client because of that

The implementation uses
`io.grpc.stub.ClientCalls#blockingServerStreamingCall(io.grpc.Channel, io.grpc.MethodDescriptor, io.grpc.CallOptions, ReqT)`

call, which in turn uses `BlockingResponseStream`. There is no way to reach the `io.grpc.ClientCall#cancel` method form the Iterator. Could be nice to wrap an Iterator or make it implement an interface in the similar way as done with ServerStreamObserver/ClientStreamObserver
The other approach could be to implement `AutoCloseable` from Java with this iterator

There is also a comment on the Iterator implementation class
```
// TODO(ejona86): determine how to allow ClientCall.cancel() in case of application error.
```

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par io.grpc.stub.ClientCalls#blockingServerStreamingCall et l’implémentation de BlockingResponseStream, puis lisez le TODO concernant l’autorisation de ClientCall.cancel() en cas d’erreur de l’application. Comparez les approches proposées avec un wrapper d’Iterator, une interface et AutoCloseable ; le travail est terminé lorsqu’un résultat de streaming bloquant peut exposer l’annulation de la requête sans modifier son comportement Iterator existant.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
java
Domaine
api
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.