storageRadius decrease logic too restrictive on active networks
I maintainer di solito rispondono entro 2 giorni
Nessuno ha ancora preso questa issue.
- #5463 di @martinconic — chiusa senza merge
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Start with pkg/storer/reserve.go, especially reserveWorker() and the reserveWakeUpDuration setting; read how reserve size, capacity, and sync rate determine radius adjustments. Check the existing reserve worker tests and run the relevant package tests. Done means radius can adapt correctly on active networks without reporting an incorrect committed depth; the issue suggests possible approaches but does not settle the behavior.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
The reserve worker only decreases storageRadius when SyncRate() == 0, which is unrealistic on active networks where pullsync never fully stops due to continuous uploads. Combined with the 15-minute check interval and single-step decrements, this causes nodes to report a stale (too high) storageRadius even when their reserve already contains enough chunks to justify a lower radius.
Code Reference
pkg/storer/reserve.go, reserveWorker():
case <-thresholdTicker.C:
radius := db.reserve.Radius()
count, err := db.countWithinRadius(ctx)
// ...
if count < threshold(db.reserve.Capacity()) && db.syncer.SyncRate() == 0 && radius > db.reserveOptions.minimumRadius {
radius--
// ...
}
Three constraints compound the problem:
-
SyncRate() == 0gate — On an active network, pullsync never fully stops. New data is continuously being uploaded, so there's always some sync activity. This condition blocks radius adjustment indefinitely. -
15-minute ticker (
reserveWakeUpDuration = 15 * time.Minute) — Even when conditions are met, the radius can only decrease by 1 every 15 minutes. -
Single-step decrement (
radius--) — If the radius needs to drop by several levels (e.g., after a restart with batchstore reset), adaptation takesN * 15 minutes.
Observable Impact
After a node restart with batchstore resync, the radius starts high and needs to decrease to match the node's actual reserve capacity. Example:
- Node has ~115M chunks in reserve (near full capacity for its configuration)
storageRadiusis stuck at 5 instead of the correct value of 4pullsyncRateis ~8 chunks/sec (normal background sync activity)- Radius never decreases because
SyncRate() != 0
This causes:
- Incorrect
committedDepthreported to peers via the status protocol, which feeds into salud's network radius consensus - Node marked unhealthy by salud due to
committedDepthmismatch (self_radiusvsnetwork_radius) - Potential redistribution game issues — node plays with wrong radius, risking incorrect samples
Nodes with reserve-capacity-doubling Are More Affected
Doubled nodes cover more neighborhoods and receive proportionally more chunk offers via pullsync. Their SyncRate() is structurally higher than non-doubled nodes, making the == 0 condition even harder to satisfy.
Suggestion
The radius adjustment could be based on the relationship between reserveSize and capacity rather than requiring zero sync activity. For example:
- Remove or relax the
SyncRate() == 0gate — perhaps use a threshold relative to the node's capacity or check that sync rate is stable rather than zero - Allow multi-step radius adjustment — if the reserve size clearly justifies a lower radius, skip intermediate steps
- Reduce the check interval — 15 minutes is very coarse for a value that affects network consensus
The radius increase path (in unreserve()) already operates without a sync rate gate, so there's precedent for the radius responding to actual reserve state rather than sync activity.
- Lingua principale
- Go
- Stelle
- 1.5k
- Fork
- 390
- Merge medio
- 2g 12h
- PR unite (30g)
- 19
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di ethersphere/bee
-
Chequebook deployment uses a fixed 175,000 gas limit; it needs about 630,000 under Glamsterdam (live on Sepolia since 2026-10-06)Forse già presa @sbackend123 l’ha presa 5 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
ethersphere/bee#5650 · 1 assegnatario ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
ethersphere/bee#5660 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
ethersphere/bee#5659 ·
I maintainer di solito rispondono entro 2 giorni
-
seen
Difficoltà 4/5 3-5 giorni Idoneità per principianti 40/100
ethersphere/bee#5648 ·
I maintainer di solito rispondono entro 2 giorni
-
pusher: chunksWorker deadlocks on a deferred chunk that fails IdentityAddress (send on nil op.Err), halting all push-syncForse già presa @sbackend123 l’ha presa 7 giorni fa. Apertaseen
Difficoltà 3/5 1-2 giorni Idoneità per principianti 75/100
ethersphere/bee#5641 · 1 assegnatario ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di ethersphere/bee
Issue simili
-
component/gpu-kubelet-plugin component/helm needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
kubernetes-sigs/dra-driver-nvidia-gpu#1559 ·
I maintainer di solito rispondono entro 1 giorno
-
TOTP enrollment returns 500 for phone-only users (empty TOTP account name)Forse già presa @emiliosandoval4 l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 60/100
I maintainer di solito rispondono entro 1 giorno
-
8.9 to 8.10 Helm upgrade guide still says deprecated keys are removed in chart v16 (Camunda 8.11)Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 78/100
camunda/camunda-platform-helm#7559 ·
I maintainer di solito rispondono entro 1 giorno
-
docs: namespaceRegexes example teaches prefix matching, but regexes are matched as a substringForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertatriage/pending-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
external-secrets/external-secrets#7117 ·
I maintainer di solito rispondono entro 2 giorni
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
ENTERPILOT/GoModel#1183 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno