Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Centralize retry/backoff configuration on `backon`; inject retries where components give up

Abierto
#618 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 5 días

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
35/100
Tipo de issue
Refactorización
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
rust

Línea de trabajo

Empieza por crates/app/src/retry.rs y crates/core/src/expbackoff.rs; después, sigue los puntos de entrada indicados de scheduler, relay/dial.rs, quic_upgrade.rs, eth1wrap, dkg, recast y wire sink. Compara su comportamiento de reintento y polling antes de decidir cómo deben estructurarse las políticas compartidas. Se considera terminado cuando se hayan abordado las configuraciones duplicadas y los bucles manuales, y los sitios de give-up indicados reintenten con los deadlines previstos.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

enhancement rust

Summary

backon is already the workspace retry engine and app/src/retry.rs (the Charon app/retry port) is built on it — but the workspace has drifted into at least 5 distinct backoff parameter sets and 4 drive mechanisms:

  • retry.rs defaults (250ms/12s/1.6) — zero call sites (#534 tracks wiring it into the duty callbacks).
  • core::expbackoff fast() (100ms/5s) and default() (1s/120s) — used by scheduler/sse/bootnode, sometimes driven manually via .next() + expect.
  • p2p/src/relay/dial.rs#L104-L126 — a hand-written duplicate of expbackoff::default() (its doc even cites the same Charon config), reimplemented because p2p needs a pollable Duration rather than an async wrapper.
  • quic_upgrade.rs — a third scheme in units of minutes (1→512, doubling).
  • eth1wrap — Alloy's RetryBackoffLayer::new(10, 1000, 100), a fourth policy in a foreign library's units.
  • Fixed-delay loops in dkg/sync (250ms), cli test/peers (for attempt in 0..5, 5s intervals). Same family: dkg busy-polls node signatures on a 100ms ticker, re-locking and cloning the accumulated slot vector every tick (nodesigs.rs#L144-L164), and exchanger.rs#L561 polls with a bare 100ms sleep — both want a Notify/watch signal instead of a poll.

Meanwhile, components that should retry just give up and wait for the next tick: scheduler resolve_duties errors are logged "(retrying next slot)" — a beacon-node blip loses a slot's duty resolution; bcast/recast retries next epoch; the wire-layer store/broadcast sinks log and swallow errors (wire.rs#L739-L746 and siblings) — precisely the points Charon wraps in async-retry.

Proposed change

  • One retry module (the existing app::retry + core::expbackoff, merged or clearly layered) exposing the named policies (fast, default, plus a pollable-Duration helper for poll-based behaviours so relay/dial.rs can delete its copy).
  • Replace the manual .next()/hand-rolled loops with backon's Retryable or the shared pollable helper; express eth1wrap's policy in the same config vocabulary.
  • Inject retries at the give-up sites above (scheduler duty resolution, recast, wire sinks), with per-duty deadlines from the existing DeadlineCalculator plumbing. #534 covers the five Charon duty-callback wrap points; this issue covers the config unification and the remaining sites.
Lenguaje dominante
Rust
Estrellas
8
Forks
5
Merge medio
3 d 12 h
PR fusionados (30 d)
9

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de NethermindEth/pluto

Todos los issues de NethermindEth/pluto

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.