Repository navigation
Conversation
- Correlate flush requests and release recovered payloads - Account metadata and frame overhead before accepting writes - Finalize writer resources on every terminal path - Preserve reader credit across reconnect and interrupted reads - Restore the transactional writer type export
- Name retained reader response bytes as bufferedBytes - Describe stream overdraw and reconnect accounting - Explain why queued flush completions carry call IDs
- Start the read window through the existing connecting state - Refund each fully delivered response using server bytesSize - Keep partition commits and token refresh active during startup - Cover oversized responses and delayed initial credit
Keep discovered channels under one owner across retirement and revival. Reject readiness after shutdown without retaining an already-settled driver latch.
Keep one owner for stream lifecycle, commit ranges and partition identity. Preserve timed partial batches and drain writers through the normal connection lifecycle. Cover late stream/token results, shutdown races, manual sequence recovery, transaction cancellation and low-rate writes with protocol and real-YDB tests.
Decode reader messages on demand and release terminal buffers, callbacks and idle partition state. Preserve response credit and transaction offsets through clean shutdown. Remove cancelled readiness waiters and delivered queue references. Verify drained memory across reconnects and client replacement on Node.js and Bun, including intentional-retention controls.
Track unsent wire bytes to avoid rescanning every partial batch on each write. Preserve flush deadlines, frame limits and reconnect deduplication. Add a regression that counts message-size reads and check the cached sum against the independent writer model.
Use a CONNECT proxy to cut only workload connections while retaining certificate and hostname verification. Record owned topic names for bounded-run cleanup. Cover plaintext, trusted TLS, incorrect hostnames and untrusted certificates with actual gRPC connections.
polRk
added this pull request to stack #659
October 9, 2026 10:55
3 tasks done
Contributor
🌋 SLO Test Results🔴 4 workload(s) tested — 1 workload(s) exceeded failure thresholds
Threshold violations: node-kv-2dc:
node-kv:
Generated by ydb-slo-action |
2 tasks done
This branch has not been deployed
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.
What
Preserve topic delivery and shutdown guarantees while simplifying stream ownership and bounding retained client memory. Partial batches follow the flush timer, pending operations survive recoverable stream failures, and obsolete stream continuations cannot affect replacement connections. Public methods and types remain compatible.
Contracts
ReadResponse.bytesSizeonce its final message is delivered or discarded. It is never reconstructed from individual payload sizes.flush()waits only for writes accepted before the call. Later writes cannot prolong it; independent boundaries survive reconnect and deduplication. It still rejects if its writes cannot be acknowledged.close()stops admission and drains the whole queue.Changes
waiting-credit, removing the redundant stored session-ID flag. Partition control, commits and token renewal remain active in this state.Behavior change: callers that relied on later writes extending an existing
flush()should useclose()for a final whole-writer drain.Payload budgets are not exact RSS limits. Decoded payload expansion, metadata and queued object counts remain separate concerns; this PR does not add estimated byte charges or reinterpret
maxInflightCount.Validation
Current audit:
229af32f876ca3e96ab962436cd670cb2e174872, Rust0b83f5a1f63d758a73006e7d8389246ac20b683cand Javad854009713a2eb06e0145b14d20cdea1e288092b, including public contracts, ownership, retry, commits, partition lifecycle and issue-reported failure modes. Three Go topic packages pass with-race; Rust passes 116 topic unit and 18 controlled-gRPC protocol tests; Java passes 145 topic unit tests. Java comparisons additionally cover separate decoding budgets, control-event serialization, deferred commits and direct partition routing. These peer runs are not real-YDB qualification. JS regressions cover repeated RAW/GZIP input across reconnect and continued child delivery after a forced parent stop.Earlier validation, retained as historical evidence rather than reruns of this head:
1.4.3-canary.1+620b50f6a. Bun 1.4.2 failed the native-memory check; a separate HTTP/2 reproducer matched oven-sh/bun#42265. The canary result does not qualify Bun 1.4.2.A fresh multi-hour runtime matrix and live split/merge under sustained high load remain outstanding. Current integration tests use
local-ydb:25.3; inspected server source is a separate revision.Checklist