Skip to content

dataconnect(change): Added internal logic: DataConnectGrpcRPCs.connect() to open a bidi streaming connection for realtime query updates#8141

Open
dconeybe wants to merge 11 commits into
mainfrom
dconeybe/dataconnect/RealtimeRewire1
Open

dataconnect(change): Added internal logic: DataConnectGrpcRPCs.connect() to open a bidi streaming connection for realtime query updates#8141
dconeybe wants to merge 11 commits into
mainfrom
dconeybe/dataconnect/RealtimeRewire1

Conversation

@dconeybe
Copy link
Copy Markdown
Contributor

@dconeybe dconeybe commented May 11, 2026

Added internal logic to support bidirectional streaming connections for realtime query updates in Firebase Data Connect. This includes the implementation of the DataConnectGrpcRPCs.connect() method and the DataConnectBidiConnectStream class for managing stream lifecycles and subscriptions.

Highlights

  • Bidirectional Streaming Support: Introduced DataConnectBidiConnectStream to manage the lifecycle, message multiplexing, and error handling of bidirectional gRPC streams.
  • Enhanced RPC Logic: Updated DataConnectGrpcRPCs with a new connect() method to initialize streaming connections with the backend, including proper metadata and authentication handling.

Changelog

Modified Files
  • CHANGELOG.md: Added an entry for the internal implementation of backend connection for realtime query results.
  • ConnectRPCIntegrationTest.kt: Removed a redundant sample() extension function.
  • DataConnectBidiConnectStream.kt: New class for managing bidirectional gRPC streams for Data Connect.
  • DataConnectGrpcRPCs.kt: Implemented the connect() method and added support for streaming gRPC stubs.
  • DataConnectGrpcRPCsConnectIntegrationTest.kt: New integration tests for the connect() method.
  • DataConnectGrpcRPCsUnitTest.kt: Added unit tests for the new connect() logic and updated existing tests to use a consistent RandomSource.
  • DataConnectIntegrationTestBase.kt: Added a convenience sample() extension function for Arb.
  • FirebaseDataConnectImpl.kt: Updated to pass a non-blocking coroutine dispatcher to DataConnectGrpcRPCs.
  • InProcessDataConnectGrpcStreamingServer.kt: Moved to testutil for shared use between unit and integration tests.
  • TurbineUtils.kt: Moved to testutil for shared use.
  • androidTestutil.gradle.kts: Removed unused grpc-api and turbine dependencies.
  • arbs.kt: Added a streamId() arbitrary for testing.
  • firebase-dataconnect.gradle.kts: Added turbine to testImplementation.
  • testutil.gradle.kts: Added grpc-api and turbine dependencies.

dconeybe added 7 commits May 11, 2026 18:02
…sDataConnectGrpcStreamingServer.kt and TurbineUtils.kt

This enables these classes to be used from both `androidTest` to `test`
(thanks to the `@SharedWithAndroidTest` annotation and the associated gradle plugin)
instead of just in `androidTest`. A future test will make use of this.
… streaming connection with the backend for realtime queries.
…le(): T` (moved from ConnectRPCIntegrationTest.kt)
@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 11, 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 implements a bidirectional gRPC connection for real-time query results, introducing the DataConnectBidiConnectStream class to manage multiplexed requests and responses. Key changes include the addition of a connect method in DataConnectGrpcRPCs, lifecycle management for the stream, and comprehensive integration and unit tests. Feedback highlights a high-severity bug in an integration test assertion that compares a list to itself and a potential resource leak where the outgoingRequests channel remains open after a gRPC connection failure.

dconeybe added 3 commits May 11, 2026 20:57
…ared errors with itself instead of with the expected list [skip actions]
…sts if ConnectorStreamServiceCoroutineStub.connect() throws an exception
@dconeybe dconeybe marked this pull request as ready for review May 12, 2026 01:37
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