Commit a4f5f8c
authored
chore(rpc): close slow WebSocket clients by default (defense-in-depth) (#147)
* chore(rpc): close slow WebSocket clients by default
Sets CometBFT's experimental_close_on_slow_client=true via initCometBFTConfig
so any WebSocket subscriber that cannot keep up with its subscription buffer
is forcibly disconnected by the server. This is defense-in-depth against the
failure mode observed on lumera-devnet-1 val3, where a client-side socket
leak in sdk-go (fixed in LumeraProtocol/sdk-go#17) accumulated ~5,000
ESTABLISHED WS connections, saturated the RPC listen backlog
(Recv-Q=4097/4096), and made external port :26687 unresponsive — while the
chain itself kept producing blocks.
The sdk-go fix stops our own client from leaking. This change protects
mainnet validators from any third-party client (indexer, relayer, custom
tooling) exhibiting the same pattern.
Subscription caps (max_subscription_clients=100, max_subscriptions_per_client=5)
are left at CometBFT defaults; the new test locks them in as a guard against
accidental relaxation that would re-open the saturation surface.
Trade-off: well-behaved clients on high-volume subscriptions that briefly
stall longer than experimental_subscription_buffer_size events will be
disconnected and must reconnect. Reconnect handling is already required for
operational reasons (validator restart, network blips); this is not a new
client-side requirement.
* test(system): suppress expected node stop exits1 parent 26ab53f commit a4f5f8c
3 files changed
Lines changed: 66 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
72 | 72 | | |
73 | 73 | | |
74 | 74 | | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
75 | 107 | | |
76 | 108 | | |
77 | 109 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
68 | 68 | | |
69 | 69 | | |
70 | 70 | | |
71 | | - | |
72 | | - | |
| 71 | + | |
| 72 | + | |
73 | 73 | | |
74 | 74 | | |
75 | 75 | | |
| |||
328 | 328 | | |
329 | 329 | | |
330 | 330 | | |
331 | | - | |
| 331 | + | |
332 | 332 | | |
333 | 333 | | |
334 | 334 | | |
| |||
374 | 374 | | |
375 | 375 | | |
376 | 376 | | |
377 | | - | |
| 377 | + | |
378 | 378 | | |
379 | 379 | | |
380 | 380 | | |
| |||
636 | 636 | | |
637 | 637 | | |
638 | 638 | | |
639 | | - | |
| 639 | + | |
640 | 640 | | |
641 | 641 | | |
642 | 642 | | |
| |||
653 | 653 | | |
654 | 654 | | |
655 | 655 | | |
| 656 | + | |
656 | 657 | | |
657 | 658 | | |
658 | | - | |
| 659 | + | |
659 | 660 | | |
660 | 661 | | |
661 | 662 | | |
662 | | - | |
663 | 663 | | |
664 | 664 | | |
665 | 665 | | |
| |||
0 commit comments