Skip to content

Document storage.rocks.transactionLogAbortMarkers and its 5.4 default - #780

Merged
kriszyp merged 6 commits into
mainfrom
docs/rocks-transaction-log-abort-markers
Nov 3, 2026
Merged

kriszyp merged 6 commits into
mainfrom
docs/rocks-transaction-log-abort-markers

Conversation

@kriszyp

@kriszyp kriszyp commented Nov 2, 2026 •

Copy link
Copy Markdown
Member

⊙ Problem

harper#3928 (milestone v5.4) turns storage.rocks.transactionLogAbortMarkers on 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 a 500 or 503 instead of retrying forever, that false brings 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-in storage.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

🤔 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 503 deadline 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

✅ Verification

  • Facts checked against harper#3928's head c8dfa03: resources/transactionLogAbortMarkers.ts (default, off values, read once per process), resources/DatabaseTransaction.ts (40-conflict cap, deadline from storage.maxTransactionQueueTime, the exceptions, retryable), and server/REST.ts (retryable: false in the error body).
  • Write intents: default false and read once per process (latchWriteIntents, in a harper#3928 commit not yet on its head 1564a87); markers-only per rocksdb-js v2.13.0 transaction_handle.cpp.
  • Downgrade boundary: harper and harper-pro v5.3.4 pin rocksdb-js 2.11.0 and v5.3.5 pins 2.13.0, with tags checked against ls-remote. rocksdb-js has the abort flag at v2.13.0, not at v2.11.0 or v2.12.0.
  • npm run build passes, and every new anchor shows up in the built HTML. format:check, lint, typecheck, test:examples and test:workflows pass.
  • Not run against a live Harper: harper#3928 is unreleased.

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

Origin — 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.transactionLogAbortMarkers now 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.
  • To keep the old behavior, set it to false. The value is read once at process start, so changing it needs a full restart.
  • With it on, a write that keeps conflicting is now always bounded. It fails with a 500 after 40 conflicts, or a 503 (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.
  • Upgrade and downgrade: a 5.3 build older than the one that pinned rocksdb-js 2.13.0 cannot tell aborted batches apart, so it must not read transaction logs that a 5.4 node wrote with markers on. 5.3 releases that carry the rocksdb-js 2.13.0 pin are safe.

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-1

Ready-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

kriszyp and others added 3 commits November 2, 2026 13:55
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
@kriszyp kriszyp added this to the v5.4 milestone Nov 2, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread reference/database/transaction.md Resolved
Comment thread reference/configuration/options.md Resolved
Comment thread reference/database/storage-tuning.md Resolved
Comment thread release-notes/v5-lincoln/5.4.md Resolved
Comment thread release-notes/v5-lincoln/5.4.md Resolved
@github-actions

github-actions Bot commented Nov 2, 2026

Copy link
Copy Markdown

🚀 Preview Deployment

Your 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
@github-actions
github-actions Bot temporarily deployed to pr-780 November 2, 2026 21:26 Inactive
@github-actions

github-actions Bot commented Nov 2, 2026

Copy link
Copy Markdown

🚀 Preview Deployment

Your 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>
@github-actions
github-actions Bot temporarily deployed to pr-780 November 2, 2026 22:37 Inactive
@github-actions

github-actions Bot commented Nov 2, 2026

Copy link
Copy Markdown

🚀 Preview Deployment

Your preview deployment is ready!

🔗 Preview URL: https://preview.harper-documentation.harperfabric.com/pr-780

This preview will update automatically when you push new commits.

@kriszyp
kriszyp marked this pull request as ready for review November 3, 2026 03:31
@kriszyp
kriszyp requested a review from a team as a code owner November 3, 2026 03:31
@kriszyp
kriszyp merged commit 3d56227 into main Nov 3, 2026
15 checks passed
@kriszyp
kriszyp deleted the docs/rocks-transaction-log-abort-markers branch November 3, 2026 03:31
@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown

🧹 Preview Cleanup

The preview deployment for this PR has been removed.

This branch was previously deployed

1 inactive deployment
pr-780 — e6211c1a Deployed Nov 2, 2026 by github-actions[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant