NethermindEth / NethermindEth/pluto

feat(app): wrap duty callbacks with the retry executor

Open
#534 0 comments 0 reactions 1 assignee View on GitHub

@varex83 is already working on this.

Since Sep 3, 2026.

enhancement rust track:orchestration-cli
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.fetch is retried and the duty completes.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.