Repository navigation
docs: explain adaptive commits and durable ack tiers - #559
Merged
Merged
Conversation
|
🚀 Build success! Latest successful preview: https://preview-559--questdb-documentation.netlify.app/docs/ Commit SHA: 4fc9fee
|
# Conflicts: # documentation/connect/clients/c-and-cpp.md # documentation/connect/clients/connect-string.md # documentation/connect/clients/java.md
The server exports questdb_wal_apply_seq_txn and questdb_wal_apply_writer_txn (gauges since questdb#6017, counters with a _total suffix before). The page named them without the apply_ part.
…ttings The adaptive commit mode merged in questdb#7411 and questdb-enterprise#1147. The concept page says what each commit mode survives, and how adaptive mode works, from the merged code: save points, the group-commit window, durable acknowledgements, guarantees and limits, costs, mode changes, downgrade, monitoring, troubleshooting and Enterprise behaviour. The Cairo settings page keeps one short entry per key, in alphabetical order, and links to the concept page. It drops cairo.adaptive.recovery.roll.forward.enabled, which the merged server does not have. The storage engine, WAL, delivery semantics and upgrade pages no longer imply that a WAL commit survives a power loss in every mode.
wal_tables() gained durableEpochSeqTxn, recoveryIncarnation, localDurableSeqTxn and lastEpochTs; the server exports three new WAL metrics.
… grant them The first draft said a server grants the local tier outside adaptive mode and that no server grants local,replicated. The merged server refuses local unless it runs in adaptive mode, and a QuestDB Enterprise primary in adaptive mode grants local,replicated. QuestDB Enterprise 4.1.0 and earlier accept only on, so the pages say to keep on for them. The tier names need Java client releases after 1.3.11 and C, C++ and Rust client releases after 7.2.1 (java-questdb-client#98, c-questdb-client#208). The Python client still bundles 7.2.1, so its page goes back to main's text. The protocol page drops the browser subprotocol paragraph, which described a separate feature inaccurately, documents the per-connection seqTxn offset for re-created tables, and points the reference implementation at 28c8483.
A conversion to non-WAL now applies the WAL first, in every commit mode, and is refused while it cannot. In adaptive mode RESUME WAL can take a save point and answer table busy. A QuestDB Enterprise primary whose log of a table ends before the object store refuses to start; the disaster recovery page gives the two ways out.
- Name the release: QuestDB 10.2.0 and QuestDB Enterprise 4.2.0. - The durability page gets a server.conf example for a group-commit window of 0 and a connect string example for the local tier. - The tier tables on the durability and connect string pages now match. - Plain wording: "behaves as in nosync" instead of "nosync grade", "half-written" instead of "torn", no "iff" or "re-OKs". - The store-and-forward comparison table gets a row for the local tier. - The sidebar label names commit modes too.
- "On the disk" now means the WAL files and the sequencer record are flushed; the guarantee, the local tier, localDurableSeqTxn and its gauge said "its WAL is on the disk", which every acknowledged commit already has. - The group-commit window is no longer stated as a hard bound, the sync row points to its known gaps, and the failed-flush rule names the flushes that stop QuestDB in every mode. - The monitoring query skips tables not written since the start; the recovery counter and the negative save point interval are described as the code does. - The durability page says how code waits for a local confirmation, that replayed batches can duplicate rows, how to see the commit mode, when the replay is done, and where the table directory is; it gets a See also list. - The connect string page keeps a short list of tiers and links to the one table on the durability page; the protocol, client and store-and-forward pages use the same wording, and the flowchart gets the local tier. - The upgrade page states the downgrade rule and what to check for Enterprise 4.2.0; the monitoring page lists what to alert on; the Kubernetes operator page limits its retry promise to replicated acknowledgements.
javier
reviewed
Nov 5, 2026
…d back Since 10.2.0 the conversion to non-WAL applies the whole WAL backlog while QuestDB starts, or refuses a suspended table, so converting to non-WAL and back no longer drops a backlog, and a large backlog delays the start. REBASE WAL is the way to drop the transactions not yet applied while keeping the applied rows. Raised in review by javier.
…k setting The sentence sat inside the durable-ack paragraph and read like a rule of durable acknowledgements. QWP refuses a non-WAL table in every commit mode and with or without durable acks (QwpTudCache: "cannot insert into non-WAL table", a SCHEMA_MISMATCH response). The protocol page named non-WAL tables as a case of an OK with no tables, which QWP never sends. Raised in review by javier.
The table put long log messages in a narrow first column, which made it hard to read. Each message now has a short title, the message in a wrapped block, and what to do, like the start refusals above it. Raised in review by javier.
# Conflicts: # documentation/changelog.mdx
javier
previously approved these changes
Nov 6, 2026
…le acks Says adaptive mode changes what a commit survives, not when commits happen, and recommends pairing it with local or local,replicated durable acks plus deduplication for QWP clients.
javier
previously approved these changes
Nov 10, 2026
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
Documents adaptive commit mode and the tiered QWP durable acknowledgements, as merged in questdb/questdb#7411,
questdb/questdb-enterprise#1147, questdb/java-questdb-client#98 and questdb/c-questdb-client#208.
/docs/concepts/durability/): what eachcommit mode survives, how adaptive mode works (WAL and sequencer record flushed on commit, save points,
recovery), enabling it, the group-commit window, durable acknowledgements and how a client waits for them,
guarantees and limits, costs, changing the mode and downgrading, monitoring, troubleshooting, and QuestDB
Enterprise behaviour.
adaptivevalue ofcairo.commit.modeand the six adaptive keys, one short entry each, inalphabetical order, linking to the new page.
local,replicatedandlocal,replicatedtiers on the connect string, Java,C/C++ and Rust pages, the store-and-forward pages (including the decision flowchart) and the QWP ingress
protocol (tier negotiation,
STATUS_LOCAL_DURABLE_ACK, the seqTxn offset for tables re-created during aconnection). The Python page is unchanged: the Python client bundles C client 7.2.1, which accepts only
on.wal_tables(): the four durability columns. Prometheus: three new metrics, and the corrected names ofquestdb_wal_apply_seq_txnandquestdb_wal_apply_writer_txn.it cannot (SET TYPE);
RESUME WALin adaptive mode; a QuestDB Enterprise primary refuses to start when its logof a table ends before the object store (disaster recovery). The upgrade page gets an "Upgrading to 4.2.0"
section and the downgrade rule, the monitoring page what to alert on, and the Kubernetes operator page limits
its retry promise to replicated acknowledgements.
commit survives a power loss in every commit mode.
Since the first draft, the pages follow the merged code: the server refuses
localoutside adaptive mode, aQuestDB Enterprise primary in adaptive mode grants
local,replicated,cairo.adaptive.recovery.roll.forward.enableddoes not exist, and the browser subprotocol paragraph is gone (a separate feature).
Renamed headings, with no links to the old anchors in the docs (outside links land at the top of the page):
localdoes not needEnterprise.
request_durable_ack=on— WAL-durable trim" is now "Durable-ack trim".Dependencies
Describes QuestDB 10.2.0 and QuestDB Enterprise 4.2.0, the Java client after 1.3.11, and the C, C++ and Rust clients
after 7.2.1. Merge with those releases; replace the client versions with their release numbers.