Rotate away from a connected server that stopped following the chain (B-86, ELC-21, ARC-26)
`server.ping` keeps succeeding on a server that is stalled, and nothing compared its tip with the others', so it stayed the active server for ever. - The listener records when the last header was accepted (monotonic clock, a module attribute so tests can move it). - After every successful ping, ElectrumListener._check_not_stalled: once the last accepted header is older than 360s the other servers are asked for their tip (blockchain.headers.subscribe, ELC-14's timeouts); if any reports a higher height than ours the session ends with ServerStalledError and run() rotates to the next server. If none does the chain is just quiet and the session goes on. No existing test changed. ELC-29 and /admin/electrum (the connection state and the age of the last header, B-92) are untouched. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
50b68d2957
commit
82d078e2d6
8 files changed
+185
-22
No files matched your search
@@ -166,15 +166,6 @@ winner's own bet is gone the payout is held (`payout_blocked`) and the lottery p
|
||||
|
||||
## High
|
||||
|
||||
### B-86 — A connected but stalled server is never replaced
|
||||
|
||||
`ping` keeps succeeding while the server stops following the chain; nothing compares
|
||||
tip progress with the other servers, and a restart goes back to the primary.
|
||||
|
||||
Fix: if the tip has not advanced for 360s and any other server reports a higher tip,
|
||||
rotate. `GET /health/ready` and `/admin` expose connection state, endpoint and
|
||||
last-header age (B-92).
|
||||
|
||||
### B-87 — The RBF bump can leave a dust change output
|
||||
|
||||
`bump_fee` only requires change > fee delta. A 294-sat change (full-balance
|
||||
|
||||
Reference in new issue
Block a user