Repository navigation
Document storage.rocks.transactionLogAbortMarkers and its 5.4 default - #780
Conversation
Harper 5.4 (harper#3928) turns transaction-log abort markers on by default: a transaction that fails after logging is marked aborted and skipped by every log reader, and a conflicting logged write is bounded by the 500/503 limits. Adds the configuration reference and storage-tuning entry, the process-restart rule in the set_configuration procedures, a transaction-log cross-link, and the 5.4 release and downgrade notes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Dispatch-Task: docs-harper-3928
Note that an entry whose marker could not be written is still replayed, condition the transaction-log sentence on the default, and name the TRANSACTION_COMMIT_CONFLICT_TIMEOUT 503 in the maxTransactionQueueTime summaries in options.md and the analytics overview. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Dispatch-Task: docs-harper-3928
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Dispatch-Task: docs-harper-3928
There was a problem hiding this comment.
Code Review
This pull request updates the documentation across several files to introduce and explain the new storage.rocks.transactionLogAbortMarkers configuration setting in Harper v5.4.0. This setting ensures that failed transactions are marked as aborted in the RocksDB transaction log, preventing infinite retries on conflicts and ensuring they are skipped during replication, subscriptions, and audit logs. The review feedback focuses on improving the clarity and style of the documentation. Key suggestions include avoiding the use of the <VersionBadge> component mid-sentence, splitting critical limitations and downgrade warnings into separate sentences instead of using semicolons, and grouping related behaviors together to avoid grammatically disjointed phrasing.
🚀 Preview DeploymentYour preview deployment is ready! 🔗 Preview URL: https://preview.harper-documentation.harperfabric.com/pr-780 This preview will update automatically when you push new commits. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Dispatch-Task: docs-harper-3928
🚀 Preview DeploymentYour preview deployment is ready! 🔗 Preview URL: https://preview.harper-documentation.harperfabric.com/pr-780 This preview will update automatically when you push new commits. |
…on to abort markers Adds the setting next to transactionLogAbortMarkers in Storage Tuning and the options list, names it in the three passages that list full-restart settings, and mentions it in the 5.4 release note. Dispatch-Task: docs-harper-3928-intents Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…log write Dispatch-Task: docs-harper-3928-intents Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🚀 Preview DeploymentYour preview deployment is ready! 🔗 Preview URL: https://preview.harper-documentation.harperfabric.com/pr-780 This preview will update automatically when you push new commits. |
🧹 Preview CleanupThe preview deployment for this PR has been removed. |
⊙ Problem
harper#3928 (milestone v5.4) turns
storage.rocks.transactionLogAbortMarkerson by default. The docs never mention the setting. Operators would not learn that failed transactions now disappear from log readers, that conflicting writes now fail with a500or503instead of retrying forever, thatfalsebrings back 5.3 behavior, or that 5.3.4 and earlier must not read logs a 5.4 node wrote. It also adds an opt-instorage.rocks.transactionLogWriteIntents.🤔 Is the requirement right?
Yes. A changed default with a one-way downgrade boundary has to be in the configuration reference and the 5.4 upgrade notes.
💡 Solution
storage.rocks.transactionLogAbortMarkersentry in Storage Tuning: what readers skip, the500/503bounds and their exceptions, how to turn it off and the process restart, and the downgrade boundary.transactionLogWriteIntentsentry after it: what it does, its cost, restart.storageoptions list, and a cross-link from the transaction-log page.restart, notrestart_service" lists in bothset_configurationpages.🤔 New setting, not a changed default
The release note calls it new and on by default. No 5.3 release has the setting, so for a 5.3 user it is new. It was opt-in only in the 5.4.0 alphas, so it gets an "added" badge. The transaction-log paragraph gets "changed", since it describes existing log behavior.
🤔 Write intents in this PR
Write intents do nothing with markers off, and both settings ship in harper#3928, so they share this PR. Easy to split out if preferred.
🤔 What is left out
The
503deadline is longer for Harper's internal component-deploy writes. The docs do not mention it because no client request can set that budget. Retry and deduplication details are left out, as the brief asked. Both deferred nits below are tracked in Recheck the transactionLogAbortMarkers docs when harper#3928 merges (#782).🔧 Changes
reference/database/storage-tuning.md: new## RocksDB Transaction Logsection with the setting's entry, then thetransactionLogWriteIntentsentry. One sentence understorage.maxTransactionQueueTimesays the same duration limits conflict retries, which fail with a different 503.reference/configuration/options.md: the newrocks.transactionLogAbortMarkersbullet androcks.transactionLogWriteIntentsbullet; themaxTransactionQueueTimebullet names the second 503.reference/database/transaction.md: one paragraph saying failed transactions are left out of the log by default.reference/configuration/operations.md(intro, cluster restart note) andreference/operations-api/operations.md(set_configuration): both settings jointhreads.v8Flagsin the process-restart lists.reference/analytics/overview.md: one sentence telling theTRANSACTION_COMMIT_CONFLICT_TIMEOUT503 apart from the overload 503.release-notes/v5-lincoln/5.4.md: an Upgrade Notes paragraph and a## Transactionssection, whose last paragraph introduces write intents.✅ Verification
c8dfa03:resources/transactionLogAbortMarkers.ts(default, off values, read once per process),resources/DatabaseTransaction.ts(40-conflict cap, deadline fromstorage.maxTransactionQueueTime, the exceptions,retryable), andserver/REST.ts(retryable: falsein the error body).falseand read once per process (latchWriteIntents, in a harper#3928 commit not yet on its head1564a87); markers-only per rocksdb-jsv2.13.0transaction_handle.cpp.v5.3.4pin rocksdb-js 2.11.0 andv5.3.5pins 2.13.0, with tags checked againstls-remote. rocksdb-js has the abort flag atv2.13.0, not atv2.11.0orv2.12.0.npm run buildpasses, and every new anchor shows up in the built HTML.format:check,lint,typecheck,test:examplesandtest:workflowspass.Docs for HarperFast/harper#3928. This PR must merge after it:
Depends-on: harper#3928
PR QA: skipped @ c60518a — documentation-only PR; PR QA covers harper and harper-pro
Signed: Claude Opus 5.5
🤖 Generated with Claude Code
Related PRs: #762 overlaps (adjacent storage-tuning paragraph), #772 overlaps (end of RocksDB Memory and the rocks.* bullets), #777 overlaps (same restart-exception sentence in operations.md), 1 others independent
Complexity: easy
Deferred findings
a69043af6e3feeeenit documentation —reference/database/storage-tuning.md— Retry bounds omit refusal-count scope and larger explicit timeoutBudget — filed Recheck the transactionLogAbortMarkers docs when harper#3928 merges #7823169e1b09af269e1nit documentation —reference/database/storage-tuning.md— Documented default true and false/0/no/off parsing depend on harper#3928 merging — filed Recheck the transactionLogAbortMarkers docs when harper#3928 merges #782Origin — the dispatch brief this PR was written from
Document the transactionLogAbortMarkers default change in 5.4
Document the Harper 5.4 change to
storage.rocks.transactionLogAbortMarkers(Harper PR HarperFast/harper#3928).What changed:
storage.rocks.transactionLogAbortMarkersnow defaults to on (it was off). With it on, when a transaction fails after writing its transaction-log batch, the batch is marked aborted, and every log reader (replication, subscriptions, audit log reads, crash replay) skips it.false. The value is read once at process start, so changing it needs a full restart.TransactionCommitConflictTimeoutError) when the commit-conflict time limit passes. Before, a write whose log entry was already written could retry without limit. Replicated writes are still never given up.Where: the configuration reference entry for
storage.rocks.transactionLogAbortMarkers(add one if missing), and the 5.4 release notes or upgrade notes (default change, downgrade requirement). Keep it short and user-facing. Do not describe internal retry or dedup mechanics.Dispatch: task
docs-harper-3928· queued by task:harper-abort-marker-adoption · ran by claude/opus/xhigh · worker kzyp-xps-1Ready-For-Promotion: e6211c1 urgency=normal late=none
Review-Coverage: authored=claude; ran=gemini,cursor-composer,codex; adjudicated=domain; declined=cursor-grok,muse; rounds=6; full=1 @ e6211c1
Review-Attention: skim ~2m (decisions: write-intents-scope-creep, summary-precision) @ e6211c1