Skip to content

Release v0.27.2 - #38

Merged
jdogresorg merged 8 commits into
masterfrom
hotfix/v0.27.2
Nov 2, 2026
Merged

jdogresorg merged 8 commits into
masterfrom
hotfix/v0.27.2

Conversation

@jdogresorg

Copy link
Copy Markdown
Contributor

What this release carries

Fixed

  • The decoder now backs off when its node's work queue is full and no longer restarts itself in the middle of retrying a quarantined transaction.

Testnet activation

  • This hotfix adds no activation height.

Bitcoin Core 31 answers a full RPC work queue with HTTP 503 and a plain-text body, which getRawTransaction classed as a fixed fault and retried ten times 500 ms apart against the overloaded node. HTTP 503 and 429 now take the same 5 s queue-full backoff as a JSON -429 error or a dropped socket, with a regression test for each path.

(cherry picked from commit 1431a57)
…ll verdict

A block with many poison transactions could run its retry ladder longer than the stall window, so the decoder read as wedged, got restarted, and lost its in-memory retry counts, leaving that height to retry forever. Each bounded ladder step now stamps a progress clock that isStalled() honours, while attempts past a position's quarantine still leave a real wedge visible, with a regression test that drives the full ladder past the stall window.

(cherry picked from commit 6f50403)
…llback

With several poison transactions in one block, each later quarantine rolled the block back and the decoder re-parsed and re-counted every position it had already quarantined, so it ran about 3N block rollbacks and inflated quarantined_txs by about N squared. Quarantined positions are now remembered per block with their hash and error text, so a rollback replays only their PARSE_ERROR row without re-parsing or re-counting, and the set clears when the block commits.

(cherry picked from commit 18df60e)
After a quarantine ladder or other mid-block rollback, resetAfterRollback zeroed only blocksQuantity, so the next pass added to stale counts and the commit log line over-counted blocks and valid transactions. Every rollback and park path now zeroes all the per-batch progress and log counters through one helper.

(cherry picked from commit d40f219)
… writes replay

A parse can write inside the block transaction before it throws (a source pubkey
row). Skipping an already quarantined position on later passes made whether that
row commits depend on whether a rollback followed, so two instances could commit
different pubkeys for one block. Every pass now re-parses the position as before;
only an already quarantined position's PARSE_ERROR row is written again, without
touching the attempt, ladder or quarantine counters.

(cherry picked from commit 1eef48d)
@jdogresorg
jdogresorg merged commit 175ff8d into master Nov 2, 2026
9 checks passed
@jdogresorg
jdogresorg deleted the hotfix/v0.27.2 branch November 2, 2026 23:59
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