Skip to content
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

Firestore: Deadline Exceeded, retrying doesn't help #499

Closed
ariofrio opened this issue Apr 5, 2019 · 26 comments · Fixed by googleapis/nodejs-firestore#614 or googleapis/nodejs-firestore#623
Assignees

Comments

@ariofrio
Copy link

ariofrio commented Apr 5, 2019

[READ] Step 1: Are you in the right place?

  • For issues or feature requests related to the code in this repository
    file a Github issue.
    • If this is a feature request make sure the issue title starts with "FR:".
  • For general technical questions, post a question on StackOverflow
    with the firebase tag.
  • For general Firebase discussion, use the firebase-talk
    google group.
  • For help troubleshooting your application that does not fall under one
    of the above categories, reach out to the personalized
    Firebase support channel.

[REQUIRED] Step 2: Describe your environment

  • Operating System version: Ubuntu 18.04.1 LTS or macOS Mojave
  • Firebase SDK version: firebase-admin@^6.2.0
  • Library version: firebase-admin@^6.2.0
  • Firebase Product: Firestore

[REQUIRED] Step 3: Describe the problem

We are running a server on AWS (though this reproduces locally on a MacBook Pro, also). It makes a series of (mostly) sequential operations on Firestore, including onSnapshot, get, set, and delete. When we run it with a reduced data set, it works well. However, when a larger data set is used, we get the DEADLINE_EXCEEDED error after a long delay (a minute or more). Retrying when this error occurs doesn't fix the problem, the next call also takes a long time and throws DEADLINE_EXCEEDED.

Sometimes a new data point comes in and it is processed in parallel (they are mostly batched, so mostly sequential). The new data point operates on a different Firestore document than the data point that keeps failing. Surprisingly, the new data point is processed successfully on the first try, while the data point that keeps failing continues failing over and over.

Error: 4 DEADLINE_EXCEEDED: Deadline Exceeded
    at Object.exports.createStatusError (/home/ubuntu/rectecgrills-alarms/node_modules/grpc/src/common.js:87:15)
    at ClientReadableStream._emitStatusIfDone (/home/ubuntu/rectecgrills-alarms/node_modules/grpc/src/client.js:235:26)
    at ClientReadableStream._receiveStatus (/home/ubuntu/rectecgrills-alarms/node_modules/grpc/src/client.js:213:8)
    at Object.onReceiveStatus (/home/ubuntu/rectecgrills-alarms/node_modules/grpc/src/client_interceptors.js:1256:15)
    at InterceptingListener._callNext (/home/ubuntu/rectecgrills-alarms/node_modules/grpc/src/client_interceptors.js:564:42)
    at InterceptingListener.onReceiveStatus (/home/ubuntu/rectecgrills-alarms/node_modules/grpc/src/client_interceptors.js:614:8)
    at /home/ubuntu/rectecgrills-alarms/node_modules/grpc/src/client_interceptors.js:1019:24

Relevant Code:

It usually happens on this call:

document.set({ myDataFieldName: false }, { merge: true })
@google-oss-bot
Copy link

I couldn't figure out how to label this issue, so I've labeled it for a human to triage. Hang tight.

@ariofrio ariofrio changed the title Deadline Exceeded Firestore: Deadline Exceeded, retrying doesn't help Apr 5, 2019
@FVilli
Copy link

FVilli commented Apr 5, 2019

Just to add my similar experience ... A simple process (ubuntu 18, node 10, pm2 as process manager) that update an object (document.set merge=true), a frequency of one document.set per minute (I think it can be considered as a low frequency). After some hours (8/10) DEADLINE_EXCEEDED exception for every attempts. I do process.exit (and pm2 restart) and process restart working without issue for hours ... the set that fails with DEADLINE_EXCEEDED, takes about 40 seconds to raise the exception. The exception return "code:4"

@ariofrio
Copy link
Author

ariofrio commented Apr 8, 2019

Any news on this? We were able to work around this by splitting our workload among 15 processes and running them in servers other than the one where we got this error.

The worry is that when we restart the servers, this may start happening again.

I tried making it self-heal by sending a data point to another server when deadline exceeded is received. But this requires writing to Firestore and it just received deadline exceeded again.

@hiranya911
Copy link
Contributor

@wilhuff can somebody from your team take a look?

@rsgowman
Copy link
Member

rsgowman commented Apr 9, 2019

Generally, a deadline exceeded error indicates that the rpc took too long to complete. Firestore sets a deadline of 60s, so I'd expect these errors to occur pretty much precisely 60s after the query was initiated. I suppose an exceptionally large query could cause this to occur, or perhaps your process being preempted for 60s(!).

Based on what's been reported here, I wouldn't expect these operations to take that long though.

There's a related issue here: #349. If you're able to reliably reproduce this issue, could you grab the logs by following the debugging instructions there, specifically:

  1. Set the following environment variables:
GRPC_TRACE=all
GRPC_VERBOSITY=DEBUG
  1. Enable logging (https://cloud.google.com/nodejs/docs/reference/firestore/0.8.x/Firestore#.setLogFunction):
admin.firestore.setLogFunction((log) => {
  console.log(log);
});

(Suggestions courtesy of @schmidt-sebastian and @hiranya911).

It's also worthwhile to check out https://firebase.google.com/docs/firestore/quotas to ensure you're within these limits. I think you should be getting a quota exceeded error (rather than deadline exceeded) if one of these are violated, so this probably isn't the cause. But perhaps a good sanity check regardless.

@wilhuff wilhuff assigned rsgowman and unassigned wilhuff and schmidt-sebastian Apr 9, 2019
@ariofrio
Copy link
Author

I am able to reproduce it reliably. Here's the log:

setting device isRemoved to false: <REDACTED> / <REDACTED>
Firestore (0.19.0) 2019-04-13T22:18:33.635Z gLg52 [WriteBatch.commit]: Sending 1 writes
Firestore (0.19.0) 2019-04-13T22:18:33.635Z gLg52 [Firestore.request]: Sending request: {"database":"projects/rectecgrills-app/databases/(default)","writes":[{"update":{"name":"projects/rectecgrills-app/databases/(default)/documents/users/tuya:email:<REDACTED>/devices/<REDACTED>","fields":{"isRemoved":{"booleanValue":false}}},"updateMask":{"fieldPaths":["isRemoved"]}}]}
Firestore (0.19.0) 2019-04-13T22:19:11.036Z XADcI [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.037Z XADcI [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.040Z UGs9I [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.041Z UGs9I [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.041Z hoHeP [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.041Z hoHeP [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.041Z UE1Ji [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.041Z UE1Ji [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.042Z yArmW [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.042Z yArmW [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.042Z xpr6x [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.042Z xpr6x [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.042Z H8i6s [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.042Z H8i6s [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.042Z tSb9y [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.042Z tSb9y [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.042Z hcGUP [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.043Z hcGUP [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.043Z LWaNE [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.043Z LWaNE [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.043Z 6Ljua [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.043Z 6Ljua [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.043Z zCz9O [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.043Z zCz9O [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.043Z bCiAl [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.043Z bCiAl [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.043Z vxfQc [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.043Z vxfQc [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.044Z 1DcOy [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.044Z 1DcOy [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.044Z iWpLM [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.044Z iWpLM [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.044Z ymWPd [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.044Z ymWPd [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.044Z Yt7lu [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.044Z Yt7lu [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.044Z cAexf [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.044Z cAexf [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.044Z 576l6 [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.045Z 576l6 [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.045Z 99WIA [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.045Z 99WIA [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.045Z 1bsQl [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.045Z 1bsQl [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.045Z 0bpHt [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.045Z 0bpHt [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.045Z L0FFA [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.045Z L0FFA [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.045Z Tm68k [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.045Z Tm68k [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.046Z J5DGL [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.046Z J5DGL [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.046Z I3OXA [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.046Z I3OXA [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.046Z wVONU [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.046Z wVONU [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.046Z VAgGP [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.046Z VAgGP [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.046Z dB9jT [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.046Z dB9jT [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.046Z sJVbg [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.046Z sJVbg [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.046Z mv4Bf [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.047Z mv4Bf [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.047Z exDUy [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.047Z exDUy [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.047Z ZVua8 [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.047Z ZVua8 [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.047Z 6izGN [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.047Z 6izGN [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.047Z fjkq5 [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.047Z fjkq5 [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.047Z rc8Vw [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.047Z rc8Vw [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.047Z H1zas [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.047Z H1zas [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.047Z g6N26 [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.048Z g6N26 [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.048Z HZUff [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.048Z HZUff [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.048Z 7EcJJ [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.048Z 7EcJJ [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.048Z gVbXU [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.048Z gVbXU [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.048Z yYkGu [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.048Z yYkGu [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.048Z Ja3fk [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.048Z Ja3fk [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.048Z yVK7p [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.048Z yVK7p [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.049Z gqWrm [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.049Z gqWrm [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.049Z ToWgM [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.049Z ToWgM [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.049Z PVZhu [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.049Z PVZhu [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.049Z Y0PxK [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.049Z Y0PxK [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.049Z apzKI [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.049Z apzKI [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.049Z AafSA [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.049Z AafSA [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.049Z DO8b6 [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.049Z DO8b6 [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.050Z bcnca [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.050Z bcnca [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.050Z xLYFb [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.050Z xLYFb [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.050Z xImlh [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.050Z xImlh [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.050Z yryVM [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.050Z yryVM [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.050Z acS4T [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.050Z acS4T [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.050Z Rp3Mf [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.050Z Rp3Mf [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.051Z ItZWe [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.051Z ItZWe [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.051Z fKxWp [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.051Z fKxWp [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.051Z Xh3sP [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.051Z Xh3sP [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.051Z xUOCN [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.051Z xUOCN [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.051Z nFeZb [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.051Z nFeZb [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.051Z TwRoE [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.051Z TwRoE [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.051Z rHGei [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.051Z rHGei [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.052Z OzamL [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.052Z OzamL [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.052Z xk0ZO [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.052Z xk0ZO [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.052Z QA2RY [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.052Z QA2RY [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:11.052Z wnBqi [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,158,201,132,248,140,206,225,2]},"readTime":{"seconds":"1555193950","nanos":971038000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:11.052Z wnBqi [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.714Z tNooM [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.714Z tNooM [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.714Z 69jJS [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.714Z 69jJS [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.714Z P2Luv [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.714Z P2Luv [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.714Z pALyB [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.714Z pALyB [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.715Z M9xwx [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.715Z M9xwx [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.715Z Rt9qU [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.715Z Rt9qU [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.715Z 1FURO [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.715Z 1FURO [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.715Z NEFkq [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.715Z NEFkq [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.715Z XPSI5 [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.715Z XPSI5 [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.731Z 87NlP [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.731Z 87NlP [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.731Z O6giL [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.731Z O6giL [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.731Z QWjBo [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.731Z QWjBo [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.731Z We5tD [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.731Z We5tD [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.731Z 98AzH [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.731Z 98AzH [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.731Z SpoVl [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.731Z SpoVl [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.732Z YV3jk [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.732Z YV3jk [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.732Z DECN5 [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.732Z DECN5 [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.732Z 4hYPr [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.732Z 4hYPr [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.732Z rJQzX [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.732Z rJQzX [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.732Z CvxKr [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.732Z CvxKr [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.732Z G2S4T [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.732Z G2S4T [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.732Z zAkmU [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.732Z zAkmU [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.732Z r9V6A [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.733Z r9V6A [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.733Z IvbrG [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.733Z IvbrG [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.733Z bX3H2 [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.733Z bX3H2 [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.734Z Nl8Zv [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.734Z Nl8Zv [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.734Z x0Rxt [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.734Z x0Rxt [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.734Z 5Zx2E [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.734Z 5Zx2E [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.734Z jbpk6 [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.734Z jbpk6 [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.734Z WoflF [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.735Z WoflF [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:27.735Z 28XzK [Firestore.readWriteStream]: Received response: {"targetChange":{"targetIds":[],"targetChangeType":"NO_CHANGE","cause":null,"resumeToken":{"type":"Buffer","data":[10,9,8,235,148,128,128,141,206,225,2]},"readTime":{"seconds":"1555193967","nanos":676011000}},"responseType":"targetChange"}
Firestore (0.19.0) 2019-04-13T22:19:27.735Z 28XzK [Watch.onSnapshot]: Processing target change
Firestore (0.19.0) 2019-04-13T22:19:33.644Z gLg52 [Firestore.request]: Received error: { Error: 4 DEADLINE_EXCEEDED: Deadline Exceeded
    at Object.exports.createStatusError (/Users/ariofrio/Work/RECTECGrills/rectecgrills-alarms/node_modules/grpc/src/common.js:87:15)
    at Object.onReceiveStatus (/Users/ariofrio/Work/RECTECGrills/rectecgrills-alarms/node_modules/grpc/src/client_interceptors.js:1188:28)
    at InterceptingListener._callNext (/Users/ariofrio/Work/RECTECGrills/rectecgrills-alarms/node_modules/grpc/src/client_interceptors.js:564:42)
    at InterceptingListener.onReceiveStatus (/Users/ariofrio/Work/RECTECGrills/rectecgrills-alarms/node_modules/grpc/src/client_interceptors.js:614:8)
    at callback (/Users/ariofrio/Work/RECTECGrills/rectecgrills-alarms/node_modules/grpc/src/client_interceptors.js:841:24)
  code: 4,
  metadata: Metadata { _internal_repr: {} },
  details: 'Deadline Exceeded' }
Firestore (0.19.0) 2019-04-13T22:19:33.646Z gLg52 [Firestore._retry]: Request failed with unrecoverable error: { Error: 4 DEADLINE_EXCEEDED: Deadline Exceeded
    at Object.exports.createStatusError (/Users/ariofrio/Work/RECTECGrills/rectecgrills-alarms/node_modules/grpc/src/common.js:87:15)
    at Object.onReceiveStatus (/Users/ariofrio/Work/RECTECGrills/rectecgrills-alarms/node_modules/grpc/src/client_interceptors.js:1188:28)
    at InterceptingListener._callNext (/Users/ariofrio/Work/RECTECGrills/rectecgrills-alarms/node_modules/grpc/src/client_interceptors.js:564:42)
    at InterceptingListener.onReceiveStatus (/Users/ariofrio/Work/RECTECGrills/rectecgrills-alarms/node_modules/grpc/src/client_interceptors.js:614:8)
    at callback (/Users/ariofrio/Work/RECTECGrills/rectecgrills-alarms/node_modules/grpc/src/client_interceptors.js:841:24)
  code: 4,
  metadata: Metadata { _internal_repr: {} },
  details: 'Deadline Exceeded' }

@wilhuff
Copy link

wilhuff commented Apr 13, 2019

To others that are experiencing this issue: given what we've seen here, this doesn't appear to be an SDK bug, so there isn't much we can do about this here. This is likely data- or project-specific so the best course of action is to file a direct support request with your project details and what you're trying to do.

@ariofrio: The log essentially says that you started a write and while waiting for it, got a bunch of no-change messages for the listeners you have active. Finally, after almost exactly 60 seconds the server has timed out the write request.

The update you're making is standard and tiny, and the SDK seems to be operating as expected. This should work. At this point I suspect that there's something specific about the data or indexes you have or something else internal to the backend that's affecting your project.

If you're able to reproduce this reliably, the best thing you can do is package this up in a small self-contained example so that we can pass this along to a backend engineer with access to the data.

The best way to get that to us is to file a support request so that people with the right permissions can dig into this and we can discuss project details and data privately. Some other things to include:

  • Your project details
  • Mention this issue
  • Does this happen when writing to a specific set of documents (or just any document)?
  • Dates and times when it's happening (if not always)--this can help correlate with backend activity
  • Earlier you mentioned that this seems to happen when the data set gets "larger". Could you quantify that at all?

The system should reply with a case number. Send that to me at mcg@firebase.com and I'll make sure the right people see it.

@schmidt-sebastian
Copy link
Contributor

@ariofrio We just received the report that you filed via Google's external support. I will ask the backend team to take a look at your project.

In the meantime, do you have a rough estimate on how many active listeners you have? We currently only support 100 operations per GRPC channel, and if you have 100 active onSnapshot listeners, any further operations on this channel will be block. That being said, we have logic that is meant to detect this and the client should open additional channels if needed. I am wondering if this logic does not work for you.

@ariofrio
Copy link
Author

@schmidt-sebastian Currently we roughly have 1,000 active listeners at a time. We aim to be able to scale it up to 20,000 or more.

@ariofrio
Copy link
Author

Any updates on this?

@schmidt-sebastian
Copy link
Contributor

Not yet, I will keep you posted!

@ariofrio
Copy link
Author

Ping. We're waiting on this to be resolved for a critical feature in our software.

@schmidt-sebastian
Copy link
Contributor

Sorry for the long delay. The backend team was able to look at your project. While we were not able to find the root cause for your issues, we do see elevated latencies during the time window of your last test run (2019-04-13). We haven't seen any recent latency spikes. If you are able to re-run your tests and let us know the exact time window during which you encounter issues, we might be able to narrow it down further.

Please do note that is likely that occasional latency spikes are not completely avoidable. To avoid the errors, you could increase the requests timeouts for your onSnapshot listeners:

 const firestore = new Firestore({
      clientConfig: {
        interfaces: {
          'google.firestore.v1.Firestore': {
              methods: {
                Listen: {
                  timeout_millis: YOUR_NUMBER_HERE
                }
              }
            }
          }
        }
      });

@ariofrio
Copy link
Author

ariofrio commented Apr 25, 2019

A request that finished with "deadline exceeded" was ongoing at Wed Apr 24 19:04:00 PDT 2019.

Update: Increasing the "Listen", "UpdateDocument", and "Write" timeouts to 2 * 60 * 1000 milliseconds by calling admin.firestore().settings() doesn't prevent the error from occurring. It is also not a matter of trying again. If I try to perform the same operation after it has failed with "deadline exceeded", it will continue failing for as long as the server is up.

@schmidt-sebastian
Copy link
Contributor

Thanks for the additional update. We are still looking into this with our backend team.

@FVilli
Copy link

FVilli commented Apr 29, 2019

I report the same issue of ariofrio. the problem is that all the next set fail with "deadline exceeded". My workaround is to restart the process. In my case the frequency is really low (1 time per minute), the document size, the size of entire db are so small that the issue can't depends on that. It seems that the first "deadline exceeded" corrupt the connection deadly.

@wilhuff
Copy link

wilhuff commented Apr 29, 2019

@FVilli Please send me your project id and some time intervals where you've been seeing this by email (to mcg@firebase.com) and I'll add them to the internal issue tracking this.

@ariofrio
Copy link
Author

ariofrio commented May 1, 2019

@wilhuff I gathered some more time intervals where this occurred. I sent them by e-mail.

@ariofrio
Copy link
Author

ariofrio commented May 7, 2019

Is there an update to this issue?

@wilhuff
Copy link

wilhuff commented May 7, 2019

We're still working on trying to understand why this is happening. It's not coming easily, unfortunately :-(.

@jdimond
Copy link

jdimond commented May 8, 2019

You are likely running into an internal limitation of how many RPCs can be active on a channel (aka connection). As a workaround (until the right limit is found and adjusted) you can make sure to remove the onSnapshot listeners, and make sure to never exceed more than 100 of them.

You can see this behavior with a minimal example:

async function run() {
  let i = 0;
  while (true) {
    i++
    console.log("Writing doc " + i);
    let doc = firebase.firestore().doc('deadlinetest/' + i);
    await doc.set({});
    doc.onSnapshot(() => {});
  }
}

run().then(console.log, console.error);

This will print deadline exceeded errors starting with document 102 (101 active snapshot listeners):

Writing doc 101
Writing doc 102
{ Error: 4 DEADLINE_EXCEEDED: Deadline Exceeded

I don't know why it would be 101 and not 100 active snapshot listeners however.

@wilhuff
Copy link

wilhuff commented May 8, 2019

Hrm. What's supposed to be happening here is that the Node SDK pools the clients and creates new ones once the number of active RPCs exceeds the limit of 100. Something's not working right in this case. I'll look into this.

@ariofrio Is there any chance that the ever growing list of listeners is not intended? If so closing listeners when you don't need them anymore will address this in the short term while we figure out what's going on with our pooling logic.

@FVilli
Copy link

FVilli commented May 8, 2019

I have one process that register (only) 4 onSnapshot listeners.
Maybe the Node SDK (under the hood) creates new ones without destroy olds, but this happens only after the first timeout ...

@wilhuff wilhuff assigned wilhuff and unassigned rsgowman May 10, 2019
wilhuff added a commit to googleapis/nodejs-firestore that referenced this issue May 10, 2019
Previously _initializeStream returned a Promise that indicated that the
stream was "released", i.e. that it was was ready for attaching
listeners.

#256 Added pooled clients and changed the
callers of _initializeStream to reuse this promise such that when it was
resolved, the stream could be returned to the pool. This works when
listeners are short-lived, but fails when listeners run indefinitely.

This change arranges to release the clients back to the pool only after
the stream has completed, which allows an arbitrary number of indefinite
listens to run without problems.
wilhuff added a commit to googleapis/nodejs-firestore that referenced this issue May 10, 2019
Previously _initializeStream returned a Promise that indicated that the
stream was "released", i.e. that it was was ready for attaching
listeners.

#256 Added pooled clients and changed the
callers of _initializeStream to reuse this promise such that when it was
resolved, the stream could be returned to the pool. This works when
listeners are short-lived, but fails when listeners run indefinitely.

This change arranges to release the clients back to the pool only after
the stream has completed, which allows an arbitrary number of indefinite
listens to run without problems.
wilhuff added a commit to googleapis/nodejs-firestore that referenced this issue May 10, 2019
Fixes firebase/firebase-admin-node#499

Previously _initializeStream returned a Promise that indicated that the
stream was "released", i.e. that it was was ready for attaching
listeners.

#256 Added pooled clients and changed the
callers of _initializeStream to reuse this promise such that when it was
resolved, the stream could be returned to the pool. This works when
listeners are short-lived, but fails when listeners run indefinitely.

This change arranges to release the clients back to the pool only after
the stream has completed, which allows an arbitrary number of indefinite
listens to run without problems.

This turns out to be fiendishly difficult to test given the current structure
of the code. A second pass at this that reformulates this as just another
stream that composes with the others would make this easier to understand and
test. For now, this fix unblocks the customers waiting on the referenced issue.
@wilhuff
Copy link

wilhuff commented May 10, 2019

The Node 6 deprecation has made the timing of releasing this fix somewhat challenging so my best advice right now is that if this fix is critical to you, you should pin to the commit that implements the fix. If you're using npm to install you can do something like this:

  "dependencies": {
    "@google-cloud/firestore": "googleapis/nodejs-firestore#479bc9c4847cc2a5632a266da706b349a1b74a41",
    "firebase-admin": "^7.3.0"
  }

Note that order matters, as far as npm is concerned. Also, you may need to remove your node_modules and npm install again before this will work.

yarn will succeed in installing this, but it doesn't run the prepare script that actually builds the package (see yarnpkg/yarn#5235). In this state it will throw indicating that @google-cloud/firestore/build/src/index.js is missing. Unfortunately, our project is written in typescript, so it's not directly installable.

@ariofrio
Copy link
Author

A large number of long-lived listeners is the intended behavior of our application. Confirmed that this fixes our issue.

@gruckionvit
Copy link

I am noticing this error in my AWS::CloudWatch logs for production on an AWS Lambda function via API Gateway. This is marked as closed but the issue is still happening in 2020.

{
  "code": 4,
  "details": "Deadline exceeded",
  "metadata": {
    "internalRepr": {},
    "options": {}
  }
}

This issue is discussed on StackOverflow as well.

    "firebase": "^7.14.2",
    "firebase-admin": "^8.11.0",

I am going to use AWS::SQS to place the write requests into a queue as it's important that these don't fail.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
9 participants