From f77eb81be082a3b2b1af93670a9194080b7cac8d Mon Sep 17 00:00:00 2001 From: bussyjd Date: Tue, 14 Jul 2026 15:26:58 +0400 Subject: [PATCH] fix(network): stop reth liveness probe from killing consistency recovery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .../embed/networks/ethereum/helmfile.yaml.gotmpl | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/internal/embed/networks/ethereum/helmfile.yaml.gotmpl b/internal/embed/networks/ethereum/helmfile.yaml.gotmpl index 048f8388..24422bc2 100644 --- a/internal/embed/networks/ethereum/helmfile.yaml.gotmpl +++ b/internal/embed/networks/ethereum/helmfile.yaml.gotmpl @@ -105,6 +105,20 @@ releases: # renovate: datasource=github-releases depName=erigontech/erigon tag: v3.5.1 {{- end }} + {{- if eq .Values.executionClient "reth" }} + # reth keeps p2p (30303) closed while running post-crash consistency + # recovery, which can exceed any bounded probe window on a large + # datadir. The chart's default tcp liveness probe then SIGKILLs it + # mid-recovery, forcing a longer recovery on the next start — a + # permanent crash loop. A genuinely dead process exits the container + # on its own, so make the probe effectively never fire. + livenessProbe: + tcpSocket: + port: p2p-tcp + initialDelaySeconds: 60 + periodSeconds: 120 + failureThreshold: 10000 + {{- end }} persistence: enabled: true size: {{ if (index .Values "executionStorageSize" | default "") }}{{ index .Values "executionStorageSize" }}{{ else }}{{ if eq .Values.network "mainnet" }}{{ if eq .Values.mode "archive" }}4500Gi{{ else }}500Gi{{ end }}{{ else }}{{ if eq .Values.mode "archive" }}300Gi{{ else }}100Gi{{ end }}{{ end }}{{ end }}