Repository navigation
mp: an SSI abort while dirtying a page is not an error to report - #261
Merged
Merged
Conversation
__memp_dirty, upgrading a snapshot page to a writable copy, refetches the page with __memp_fget. For a snapshot-safe txn that fetch can return DB_SNAPSHOT_CONFLICT (SSI mechanism (b) in __memp_si_rwconflict). __memp_dirty skipped "BDB3010 error getting a page for writing" only for DB_LOCK_DEADLOCK, so every such SSI abort also printed that message, though the caller aborts the txn normally and nothing is lost. It shows up after the SSI write-skew fixes, which raise the abort rate on contended workloads. ssi_livelock on FreeBSD 14.5 x86_64 printed it 30-89 times in 3 s; every txn that printed it returned DB_SNAPSHOT_CONFLICT or DB_SNAPSHOT_UNSAFE and aborted, and no txn returned any other code. Skip the message for the two SSI codes as for a deadlock. The return value is unchanged.
Contributor
ABI diff vs
|
Contributor
Coccinelle convention checksNo new violations. ✅ Resolved since baseline (3) -- update dist/cocci/baseline.txt to lock these in. |
gburd
marked this pull request as ready for review
November 4, 2026 12:14
This was referenced Nov 4, 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.
__memp_dirtyrefetches the page with__memp_fgetwhen it upgrades a snapshot page to a writable copy. For a snapshot-safe txn that fetch can returnDB_SNAPSHOT_CONFLICT(SSI mechanism (b),__memp_si_rwconflict). OnlyDB_LOCK_DEADLOCKskipped the BDB3010 "error getting a page for writing" message, so every such SSI abort also printed it, though the caller just aborts the txn.Found during v2026.10.7.2 qualification. The SSI write-skew fixes (#257/#258) raise the abort rate on contended workloads.
ssi_livelockon FreeBSD 14.5 x86_64 printed BDB3010 30–89 times in 3 s. A counting probe showed every txn that printed it returnedDB_SNAPSHOT_CONFLICTorDB_SNAPSHOT_UNSAFEand aborted, and no txn returned another code. On Linux the same run prints none.Fix: skip the message for the two SSI codes, as for a deadlock. The return value is unchanged. One line; no format or ABI change.
Backport: for the next LTS patch (v2026.10.7.3), not v2026.10.7.2. It is a cosmetic log-noise fix, and v2026.10.7.2 is already qualified.