Skip to content

fix(network): stop reth liveness probe from killing consistency recovery#750

Open
bussyjd wants to merge 1 commit into
mainfrom
fix/reth-liveness-recovery
Open

fix(network): stop reth liveness probe from killing consistency recovery#750
bussyjd wants to merge 1 commit into
mainfrom
fix/reth-liveness-recovery

Conversation

@bussyjd

@bussyjd bussyjd commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Problem

obol network install ethereum (reth) can enter a permanent crash loop after any unclean shutdown. Observed live: 637 restarts on a mainnet full node.

The upstream ethereum-node chart's reth subchart defaults to a TCP liveness probe on the p2p port (30303) with failureThreshold: 3 / periodSeconds: 120 — ~12 minutes of grace. Reth keeps that port closed while running post-crash check_consistency recovery, which routinely takes longer than that on a large datadir. So:

  1. kubelet SIGKILLs reth mid-recovery (exit 137)
  2. the kill adds more inconsistency to heal on the next start (drift observed growing to ~129k blocks of StoragesHistory)
  3. goto 1, forever

Fix

Override the reth liveness probe in the ethereum helmfile with failureThreshold: 10000 (effectively never fires). A genuinely dead reth exits the container on its own, so the probe adds nothing. The upstream chart has no startupProbe support, so a values override is the only lever.

Scoped to reth only: geth/nethermind/besu probe http-rpc and erigon probes metrics, none of which close during recovery.

Verification

  • helmfile template render of the ethereum helmfile with executionClient: reth: reth StatefulSet gets livenessProbe: {tcpSocket: p2p-tcp, failureThreshold: 10000}; lighthouse StatefulSet untouched.
  • Equivalent live patch applied to the crash-looping node: recovery completed in ~20 min and the node is now 2/2 Ready, syncing, 0 restarts.

https://claude.ai/code/session_01VLQSsnH9WdAsnVYGTd2omr

The upstream ethereum-node chart's reth subchart defaults to a tcp
liveness probe on p2p (30303) with failureThreshold 3 (~12 min grace).
Reth keeps that port closed while running post-crash check_consistency
recovery, which can take far longer on a large datadir — so the kubelet
SIGKILLs it mid-recovery, each kill adds more drift to heal on the next
start, and the node crash-loops permanently (observed: 637 restarts,
~129k blocks of StoragesHistory drift).

Override the probe with failureThreshold 10000 so it effectively never
fires; a genuinely dead reth exits the container on its own. Scoped to
reth only — geth/nethermind/besu probe http-rpc and erigon probes
metrics, none of which close during recovery.

Claude-Session: https://claude.ai/code/session_01VLQSsnH9WdAsnVYGTd2omr
@bussyjd bussyjd force-pushed the fix/reth-liveness-recovery branch from 5766fdf to f77eb81 Compare July 14, 2026 13:07
@bussyjd bussyjd mentioned this pull request Jul 15, 2026
6 tasks
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.

2 participants