Skip to content

fix(firestore): chunk large Android query snapshots - #18601

Open
ben-milanko wants to merge 1 commit into
firebase:mainfrom
Railway-Engineering-Solutions:codex/firestore-snapshot-transport-chunks-upstream
Open

fix(firestore): chunk large Android query snapshots#18601
ben-milanko wants to merge 1 commit into
firebase:mainfrom
Railway-Engineering-Solutions:codex/firestore-snapshot-transport-chunks-upstream

Conversation

@ben-milanko

Copy link
Copy Markdown

Description

Android query listeners currently convert an entire Firestore QuerySnapshot into one InternalQuerySnapshot and send it through one Pigeon event-channel envelope. Large result sets therefore require the full native model and a second large encoded buffer to coexist. In the downstream reproduction, 6,112 documents produce a single success envelope larger than 30 MiB and can exhaust the Android heap during StandardMessageCodec.writeValue.

This PR keeps one Firestore query and one snapshot listener, but sends each Android query snapshot as a framed sequence of messages capped at 512 KiB by their actual encoded success-envelope size. The platform interface reassembles the frames before emitting anything to the public query stream, preserving the existing atomic snapshot, document ordering, metadata, and document-change semantics. Other platforms continue to send InternalQuerySnapshot directly and pass through unchanged.

It also closes a listener-registration cancellation race so cancelling during registration cannot leave the Firestore listener active.

Validation includes:

  • a deterministic 6,112-document fixture proving the legacy envelope exceeds 30 MiB while every replacement envelope stays within 512 KiB;
  • protocol, ordering, malformed-frame, oversized-single-document, empty-snapshot, cancellation-race, and legacy-pass-through tests;
  • the aggregate Android :cloud_firestore:testDebugUnitTest and existing :firebase_crashlytics:testDebugUnitTest tasks;
  • focused Dart tests and analysis for cloud_firestore_platform_interface;
  • a downstream debug and release Android build plus the downstream Firestore cache/store regression suites.

This does not paginate the Firestore query and does not multiply document reads.

Related Issues

Checklist

Before you create this PR confirm that it meets all requirements listed below by checking the relevant checkboxes ([x]).
This will ensure a smooth and quick review process. Updating the pubspec.yaml and changelogs is not required.

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • My PR includes unit or integration tests for all changed/updated/fixed behaviors (See Contributor Guide).
  • All existing and new tests are passing.
  • I updated/added relevant documentation (doc comments with ///).
  • The analyzer (melos run analyze) does not report any problems on my PR. Focused package analysis passes; the repository-wide command was not run.
  • I read and followed the Flutter Style Guide. The repository formatter was run on the changed files.
  • I signed the CLA.
  • I am willing to follow-up on review comments in a timely manner.

Breaking Change

Does your PR require plugin users to manually update their apps to accommodate your change?

  • Yes, this is a breaking change.
  • No, this is not a breaking change.

@gemini-code-assist

Copy link
Copy Markdown
Contributor
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 馃憤 and 馃憥 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

@google-cla

google-cla Bot commented Aug 21, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant