-
Notifications
You must be signed in to change notification settings - Fork 227
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
v1.SubscriberClient#streamingPull throws DEADLINE_EXCEEDED error after 15 minutes #1885
Comments
@edosrecki Thanks for the issue. Our intent is that users will use the library's streaming pull facilities instead of calling the gapic-level functions directly. The service will periodically disconnect streams and requires the client side to manage that directly (reconnecting streams on failure, etc). So it's a lot of code work. Is there a use case that requires using the gapic-level streaming pull function? If so, we'd be interested in hearing about that to potentially adapt the higher level one to cover it. |
We have been experiencing the same issue. We are using |
@ik-southpole Are you able to share some details about what's not working about batch processing as it is? Our implementation for our handwritten layer is here, if you can't avoid it: https://github.com/googleapis/nodejs-pubsub/blob/main/src/message-stream.ts Maybe that would help figure out if there's something missing. |
Our process requires buffering |
@ik-southpole Thanks for the info. I know that there's a desire to provide a way to receive chunks of messages as @kamalaboulhosn Do you have thoughts on this? |
We use
v1.SubscriberClient#streamingPull
method to create a bidirectional stream which we use to consume and ack Pub/Sub messages. After 15 minutes client throws theDEADLINE_EXCEEDED
(code 4) error. We have put a lot of effort to investigate why and where this error is thrown.There is a default 15 minute timeout for
streamingPull
RPC call which is defined in@google-cloud/pubsub
library here. It is possible to override this timeout by providing a different value when callingstreamingPull
method like so:However, this only postpones the throwing of the
DEADLINE_EXCEEDED
error.We have tracked down where this error is thrown, and it happens in
@grpc/grpc-js
library inResolvingCall
class inrunDeadline
method. This timer which is set on creation of theResolvingCall
class should be cleared when the response is received in theoutputStatus
method. TheoutputStatus
method is called fromonReceiveStatus
handler, or fromonReceiveMessage
handler if certain conditions are true.However,
onReceiveStatus
handler is NEVER called, which can be seen if you turn on debug logs:Then you can clearly see that
resolving_call
is instantiated and that timer is created.When message is received you also see:
But you never see
Received status
log, which means thatoutputStatus
method never gets called to reset the DEADLINE_EXCEEDED timer.I believe that this is a bug, and keep in mind that this only happens with
v1.SubscriberClient
, but works correctly with latestSubscription
class. When using that class, grpc debug output looks different, and you see 'Received status' logs, which means that timer gets restarted every time you receive the message.Environment details
@google-cloud/pubsub
version: 4.3.0Steps to reproduce
Check the repository with the code and instructions to reproduce the issue:
https://github.com/emartech/pub-sub-deadline-exceeded-repro
The text was updated successfully, but these errors were encountered: