Skip to content

Development - #638

Merged
pablocampogo merged 5 commits into
mainfrom
development
Oct 13, 2026
Merged

pablocampogo merged 5 commits into
mainfrom
development

Conversation

@pablocampogo

Copy link
Copy Markdown
Collaborator

Fix: expire block requests on sync ticker

Problem

During the praxis (committee 30) rollout, a validator that fell one block behind after a restart could get wedged for ~30 minutes, logging repeated wrong view height (code 65) / wrong certificate height (code 11) while the committee advanced without it. The missing block was valid and available — the node just never re-requested it, and only a full restart (which rebuilds the sync queue) recovered it.

Root cause

Sync() only expired timed-out block requests at the end of the Block inbox case, i.e. only when a block response happened to arrive. A node that was behind and whose outstanding request had timed out received no inbound blocks, so the dead request was never cleared or re-issued — the queue stayed stuck. (Introduced by the revert of the original expire block requests on sync ticker fix.)

Change

Move applyTimeouts(queue) to the top of each sync tick (requestTicker.C), before the queue is refilled, and remove it from the Block inbox case. Expired requests are now cleared and re-requested every tick regardless of whether a block response arrives, so a behind node self-heals without a restart. This restores the behavior of the original fix (5cb9a248).

Impact

  • controller/consensus.go only; no consensus/state-root changes — block validation is untouched.
  • Makes sync recovery deterministic (the underlying "fell behind" trigger is still timing/network dependent, but recovery no longer depends on the chance arrival of an inbound block).
  • Low risk; restart/rollout liveness only.

@pablocampogo
pablocampogo merged commit e8e61c2 into main Oct 13, 2026
6 checks passed

This branch was successfully deployed

1 active deployment
github-pages — a433bc2a Deployed Oct 13, 2026 by pablocampogo via deploy #658
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