Repository navigation
chore: release 1.0.0-rc.12 - #178
Merged
Merged
Conversation
Bumps version to 1.0.0-rc.12 in Cargo.toml, Cargo.lock, .tabularium, and CHANGELOG.md. ### Included since rc.11 **Fixed:** - Direct-connection result-set queries on non-builtin column types (custom enum/composite/domain/range/extension types) no longer hang on large results (#166, #168) — pre-resolves column types via `prepare` on the shared cached client before the `query_typed` data fetch (the rc.11 fix only covered the transaction-pooler path) - Batch / interactive-transaction-session result-set queries on a transaction-mode pooler no longer deadlock on wide non-builtin-typed tables (#169, #172) — `run_batch_in_session` now makes the same per-query routing decision as the single-query path (in_transaction pre-resolves on the shared client; no open transaction routes to the one-shot pinned path) - A bare batch (no `session_id`, no `BEGIN`) that sets session-local state earlier (a session `SET` or `CREATE TEMP[ORARY] TABLE`) then runs a result-set `SELECT` no longer silently loses that state on a `pooler_mode = transaction` connection (#173, #174) — the rc.11 #172 fix routed the SELECT to a fresh one-shot that never saw the SET/temp table; the fix keeps the SELECT on the shared batch client with a pre-resolve, restoring main's within-batch guarantee (handles GLOBAL/LOCAL TEMP, excludes SET LOCAL / SET TRANSACTION / SET CONSTRAINTS) - A slow or hung query no longer starves `ping`/`test_connection`/ `initialize`/`shutdown` and the `cancel` notification for every connection (#167, #176) — RPCs are routed by method into three lanes before a worker pulls the line: a dedicated cancel lane (the relief valve, never queued behind the workers it relieves), a 2-worker lifecycle lane, and the existing 4-worker general lane; the SHUTDOWN_GRACE drain (#155) covers all lanes' worker handles **Known limitations (tracked as follow-ups, not regressions vs. the builtin):** - A bare [SET, SELECT] / [CREATE TEMP TABLE, SELECT] batch on a *real* PgBouncer (pool_mode = transaction) can still lose session state between autocommit statements and, in rare cases with non-builtin types under reassignment during the pre-resolve prepare, can hang (#175) — wrap such batches in BEGIN/COMMIT; the direct + pooler_mode=transaction flag config (the common use) is unaffected - A composite type ALTER TYPE-ed (same OID, new field layout) on a recycled pooled connection can read a stale cached Type and produce wrong JSON for the composite's fields (#171) — pre-existing (tokio-postgres/deadpool cache-invalidation limitation); the rc.11/#168 pre-resolve widened the cache-warming window but did not introduce the bug Verified: 441 unit tests pass; cargo clippy --all-targets -- -D warnings clean; markdownlint clean on CHANGELOG.md.
|
Kilo Code Review could not run — your account is out of credits. Add credits or switch to a free model to enable reviews on this change. |
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.
Bumps version to 1.0.0-rc.12 in Cargo.toml, Cargo.lock, .tabularium, and CHANGELOG.md.
Included since rc.11
Fixed:
prepareon the shared cached client before thequery_typeddata fetch (the rc.11 fix only covered the transaction-pooler path).run_batch_in_sessionnow makes the same per-query routing decision as the single-query path (in_transaction pre-resolves on the shared client; no open transaction routes to the one-shot pinned path).session_id, noBEGIN) that sets session-local state earlier (a sessionSETorCREATE TEMP[ORARY] TABLE) then runs a result-setSELECTno longer silently loses that state on apooler_mode = transactionconnection. The rc.11 fix: pre-resolve column types on batch/session pooler path (#169) #172 fix routed the SELECT to a fresh one-shot that never saw the SET/temp table; the fix keeps the SELECT on the shared batch client with a pre-resolve, restoring main's within-batch guarantee (handlesGLOBAL/LOCALTEMP; excludesSET LOCAL/SET TRANSACTION/SET CONSTRAINTS).ping/test_connection/initialize/shutdownand thecancelnotification for every connection. RPCs are routed by method into three lanes before a worker pulls the line: a dedicated cancel lane (the relief valve, never queued behind the workers it relieves), a 2-worker lifecycle lane, and the existing 4-worker general lane; theSHUTDOWN_GRACEdrain (Bug: Plugin process never exits after Tabularis quits if an RPC is in flight #155) covers all lanes' worker handles.Known limitations (tracked as follow-ups, not regressions vs. the builtin):
[SET, SELECT]/[CREATE TEMP TABLE, SELECT]batch on a real PgBouncer (pool_mode = transaction) can still lose session state between autocommit statements and, in rare cases with non-builtin types under reassignment during the pre-resolveprepare, can hang. Wrap such batches inBEGIN/COMMIT; the direct +pooler_mode=transactionflag config (the common use) is unaffected.ALTER TYPE-ed (same OID, new field layout) on a recycled pooled connection can read a stale cachedTypeand produce wrong JSON for the composite's fields. Pre-existing (a tokio-postgres/deadpool cache-invalidation limitation); the rc.11/fix: pre-resolve column types on direct connections to stop enum-table hang (#166) #168 pre-resolve widened the cache-warming window but did not introduce the bug.Verification
cargo clippy --all-targets -- -D warningsclean; markdownlint clean onCHANGELOG.md.client_live_tests, 3/3tests/shutdown.rsfor Bug: Plugin process never exits after Tabularis quits if an RPC is in flight #155, 2/2tests/worker_starvation.rsfor Worker pool starvation: stuck queries block ping/connect for every connection #167, 38/39tests/live_dbwith the 1 failure being the pre-existing pgvector fixture gap) in PRs fix: keep bare [SET/CREATE TEMP, SELECT] batch on the shared client on a transaction pooler (#173) #174/fix: route ping/connect/cancel to dedicated lanes so stuck queries don't starve them (#167) #176.Follow-ups filed: #170 (direct-path
.ok()swallow / timeout asymmetry), #171 (stale composite type cache), #175 (real-PgBouncer bare-batch), #177 (server-ignores-cancel worker-abort).