NethermindEth / NethermindEth/pluto
feat(app): wrap duty callbacks with the retry executor
@varex83 is already working on this.
Since Sep 3, 2026.
- Dominant language
- Rust
- Stars
- 8
- Forks
- 5
- Avg merge
- 4d 16h
- Merged PRs (30d)
- 37
Description
Part of #402 — follow-up to the app-wiring PR. Pairs with the scheduler Lagged issue.
Scope
Wrap the duty-pipeline callbacks with the retry executor. Charon wraps five callbacks with retry.New(deadlineFunc) / WithAsyncRetry (app/app.go:646-647 at v1.7.1): fetcher.Fetch, consensus.Participate, consensus.Propose, parsigex.Broadcast, bcast.Broadcast. Pluto's executor (crates/app/src/retry.rs, a faithful port of Charon app/retry) currently has zero call sites — add the inline wrapper layer in crates/app/src/node/wire.rs.
Without it, a single transient beacon-node/network error drops that duty on this node (threshold peers still complete it, so the cluster degrades gracefully — which is why this was deferred from the app-wiring PR). Wrapping also restores Charon's async duty-callback semantics: subscribers currently process duties serially, which is what makes the scheduler Lagged failure mode reachable.
Dependencies
None.
Acceptance
- The five callbacks are wrapped with per-duty deadlines from the beacon-derived deadline function.
- Wiring test: a transient beacon error on
fetcher.fetchis retried and the duty completes.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.