Conversation
Change-Id: Idf64e537c143b94716d8f0ae474f9b3099bdd23c
Change-Id: I6ed7a039e0ad29d253f50484fe83d62584a44a9a
Change-Id: I52860fa3ed2c8e176930a4a35cd8c3125c034852
Introduce VRpcResumptionStrategy so RetryingVRpc can resume a streaming vRPC after a retryable failure instead of restarting from scratch: - VRpcResumptionStrategy: per-operation policy with onResponse (record progress) and getResumeRequest (narrow the request for the next attempt); noOp() preserves the pre-streaming behavior for unary ops. - SessionReadRowsResumptionStrategy: tracks last delivered key / count and narrows the RowSet + rowsLimit on resume (forward and reversed). - RetryingVRpc: fold Suspended into Idle (an attempt launches only when demand is outstanding), guard requestNext on the started flag via a DebugTagTracer precondition (request_more_before_start), and complete OK when the scan is already fully satisfied — carrying the triggering frame's cluster attribution and logging an INFO error_at_end_of_read. - VRpcResult.createLocalOk now takes cluster info for that attribution. - TableBase wires noOp() + the debug tracer into the unary ops. Change-Id: Idfc80ef9cdc9f5378678a0847d9c47d523f0b157
Change-Id: Ie1a0462991c3b14a0f5e629f2e786d59d7e02fc8
…ient layer Change-Id: I24e8880194f9cebb4d49b14d4e2964c3dd980615
…session Seed DEFAULT_SESSION_PARAMS with a default softmax_streaming_prefetch_buffer_size and add SessionImpl.getSoftmaxStreamingPrefetchBufferSize() so the streaming-response assembly layer can read the server-advertised prefetch budget. sessionParameters is now volatile so a mid-session SessionParametersResponse update is visible to readers off the session sync context. Change-Id: I1b4ec5b05978d7b25de13a91ba854d5920056d52
Fold streaming prefetch into the single VRpcImpl and add the session-side transport for it, so a vRPC is modeled as a server stream (unary being the degenerate one-response case). - VRpcImpl: demand-gated delivery backed by an eager prefetch buffer bounded by the live softmax byte budget, one pull (initial request or continue) in flight at a time, terminal close on has_more=false, decode/user-callback error handling, and idle-stream cancel. - SessionImpl: continueRpc/cancelRpc transport, has_more terminal detection, heartbeat re-arm, and stale-frame discard. - Gate on VRpcCallContext.autoFlowControl -- the same flag that drives requestNext -- so unary ops take an untouched fast path and a bug in the streaming machinery cannot affect them. - Test fake (SessionHandler/FakeDescriptor/fake.proto) gains scripted streaming with has_more, continue/cancel, and dynamic softmax updates; SessionImplTest covers ordering, byte-budget bounding, decode/user errors, idle cancel, and live softmax pickup. Change-Id: Idb659fdecbf148056c02cf23539afbd028a62a33
…and heartbeat handleSessionParamsResponse now merges SessionParametersResponse updates field-by-field, adopting only valid values and keeping the last-known-good otherwise. A non-positive keep_alive would zero the heartbeat interval and force-close a healthy stream; a non-positive softmax prefetch budget would deadlock streaming prefetch (maybeContinue never pulls). Both fields treat 0/unset as "no opinion, keep current" so a malformed update can no longer wedge the session. Change-Id: I991b6c4ce22bc8a5bb4490ebbf6f410a66a629f5
Contributor
There was a problem hiding this comment.
Code Review
This pull request introduces support for streaming ReadRows and conditional CheckAndMutateRow operations over the session-based data path in the Java Bigtable client. It implements a demand-gated prefetch flow control mechanism for streaming vRPCs, along with a resumption strategy (SessionReadRowsResumptionStrategy) to handle mid-stream failures gracefully. It also adds the necessary shims, descriptors, and session-level handling (continueRpc, cancelRpc) to support these operations across tables, authorized views, and materialized views. I have no feedback to provide as there are no review comments to evaluate.
- README.md: bump version references to 2.83.0 - FeatureFlagsProto.java: take upstream descriptor (adds microsecond_timestamp field + extension registry init) - SessionImplTest.java: keep jetstream streaming tests; add upstream's missedHeartbeatDeliversUnavailableStatus test Change-Id: Ia0873342916ba3522688b6a13dac9326469982ad
…sion by method supports() returns false for now; will be re-enabled once diversion by method is added. Change-Id: I7d28fd21b55aa45c67a4dd40f903bc1839540852
mutianf
marked this pull request as draft
September 21, 2026 19:03
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
CheckAndMutateRowShimto routeCheckAndMutateRowRPCs through the session client pathSessionCheckAndMutateRowsupport intoTableBase,TableAsync,AuthorizedViewAsync,MaterializedViewAsync,ShimImpl,DisabledShim, andEnhancedBigtableStubVRpcDescriptorsupport and extendsConditionalRowMutationwith session-aware targetingsupports()returnsfalsefor now pending diversion-by-method supportTest plan
CheckAndMutateRowShimTestcovers the shim logicVRpcDescriptorTestcovers descriptor routingConditionalRowMutationTestcovers the new targeting APIsTableBaseTestcovers session client dispatch