Skip to content

dataconnect(chore): RealtimeQueryManager.kt added with basic logic to multiplex connection stream#8158

Open
dconeybe wants to merge 9 commits into
mainfrom
dconeybe/dataconnect/RealtimeRewire3
Open

dataconnect(chore): RealtimeQueryManager.kt added with basic logic to multiplex connection stream#8158
dconeybe wants to merge 9 commits into
mainfrom
dconeybe/dataconnect/RealtimeRewire3

Conversation

@dconeybe
Copy link
Copy Markdown
Contributor

@dconeybe dconeybe commented May 14, 2026

Added RealtimeQueryManager to manage and deduplicate bidirectional gRPC stream connections for Data Connect realtime queries.

Highlights

  • Introduced RealtimeQueryManager to handle the lifecycle of bidirectional gRPC streams and multiplex multiple queries over a single connection.
  • Refactored DataConnectBidiConnectStream to use a SubscriptionStateManager for improved tracking and management of individual query subscriptions.
  • Added RealtimeQuerySubscriptionImplUnitTest providing extensive test coverage for connection sharing, message decoding, and error handling.
  • Enhanced TurbineUtils.kt with TurbinePredicateResult and improved awaitUntilItem logic for more robust flow testing.
  • Created RealtimeTodo.md to document and track critical future enhancements, such as connection health monitoring and resource leak fixes.

Changelog

10 files affected
  • RealtimeTodo.md: Added a TODO list tracking critical and high-priority improvements for the realtime implementation.
  • DataConnectBidiConnectStream.kt: Refactored to use SubscriptionStateManager and updated the subscription flow logic.
  • RealtimeQueryManager.kt: Added this new class to manage the gRPC connection state and deduplicate subscriptions.
  • DataConnectGrpcRPCsUnitTest.kt: Minor cleanup and moved OperationNameVariablesPair to a shared test utility.
  • RealtimeQuerySubscriptionImplUnitTest.kt: Added a new comprehensive unit test suite for realtime subscriptions.
  • OperationNameVariablesPair.kt: Extracted into a standalone data class in testutil.
  • TurbineUtils.kt: Significant improvements to turbine testing utilities, including the addition of TurbinePredicateResult.
  • FirebaseDataConnectImpl.kt: Fixed a log message that was not being correctly recorded.

@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.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 14, 2026

📝 PRs merging into main branch

Our main branch should always be in a releasable state. If you are working on a larger change, or if you don't want this change to see the light of the day just yet, consider using a feature branch first, and only merge into the main branch when the code complete and ready to be released.

@dconeybe
Copy link
Copy Markdown
Contributor Author

/gemini review

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces the RealtimeQueryManager to handle realtime query subscriptions, deduplicate identical queries, and manage the lifecycle of bidirectional gRPC streams. It also refactors DataConnectBidiConnectStream to support multiple subscribers via a new SubscriptionStateManager. Feedback highlights critical issues including a potential permanent lock-out in the Connecting state upon failure, a lack of connection health monitoring for active streams, and an unbounded memory leak in the query deduplication map. Additionally, a bug in the logging initialization within FirebaseDataConnectImpl was identified.

@dconeybe dconeybe marked this pull request as ready for review May 14, 2026 14:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant