Commit 137a7c6
fix(transport): clamp FibonacciBackoff state at max to avoid u64 overflow (#770)
* fix(transport): clamp FibonacciBackoff state at max to avoid u64 overflow
`next_delay()` capped only the returned delay; the internal state kept
growing as a raw Fibonacci sequence, which overflows u64 at call 93
(fib(94)). A reconnect loop with a large `max_reconnect_attempts` or
`reconnect_forever` reaches that during a long outage. With the
30 s `max` both call sites use, about 45 minutes of continuous outage.
In debug builds `next_delay()` would panic with `attempt to add with
overflow`, and in release the addition would wrap and the delays would
become nonsense.
* fix(transport): saturate backoff sum and honor max=0
- saturating_add covers max values above fib(93), where the raw sum
overflows before the clamp engages
- clamp current at construction so max=0 keeps meaning no delay instead
of a fixed 1s
---------
Co-authored-by: Wil Boayue <wil.boayue@gmail.com>1 parent 874aa3e commit 137a7c6
3 files changed
Lines changed: 48 additions & 9 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
| 49 | + | |
| 50 | + | |
49 | 51 | | |
50 | 52 | | |
51 | 53 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
133 | 133 | | |
134 | 134 | | |
135 | 135 | | |
136 | | - | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
137 | 139 | | |
138 | 140 | | |
139 | 141 | | |
140 | 142 | | |
141 | 143 | | |
142 | | - | |
143 | | - | |
144 | | - | |
145 | | - | |
146 | | - | |
147 | | - | |
148 | | - | |
149 | | - | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
150 | 151 | | |
| 152 | + | |
151 | 153 | | |
152 | 154 | | |
153 | 155 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
137 | 137 | | |
138 | 138 | | |
139 | 139 | | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
0 commit comments