Commit 109fe37
Paul C
wolfdisk v2.11.6: followers self-heal divergent state instead of getting stuck (wabil)
A bulk delete of 250k files followed by a restart left the cluster wedged:
the leader had 226 files, followers had 262k, yet all reported "v0 — in sync"
and deletions never propagated. Three compounding causes, all fixed:
1. The replication index_version + changelog were in-memory only, so a restart
reset the leader to v0 while the on-disk file index persisted. Every node
then falsely agreed on v0 and never reconciled. Now persisted to
replication_state.json (atomic temp+rename) and reloaded on startup.
2. Follower sync was ADDITIVE — it inserted the leader's entries and removed
only changelog-listed deletions, so a follower holding stale extras never
dropped them. New is_full flag on SyncResponse marks a full index; the
follower then reconciles AUTHORITATIVELY, deleting any local path the leader
no longer has (batched, lock-friendly; guarded so an empty/failed-load leader
index can never wipe a follower). This is the self-heal: a stuck follower now
converges on its own within a resync cycle — no manual re-seed.
3. changes_since() returned Some((empty,empty)) for an empty changelog while
behind ("nothing changed"); now returns None to force a full sync.
WIRE CHANGE (is_full appended to SyncResponseMsg, bincode positional): upgrade
the LEADER first, then followers — or all nodes together. Tests cover the
restart trap, persistence round-trip, and the authoritative delete selection.
Independent code review: no critical findings; data-loss/deadlock paths clear.1 parent 47fbea5 commit 109fe37
5 files changed
Lines changed: 268 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
38 | 50 | | |
39 | 51 | | |
40 | 52 | | |
| |||
184 | 196 | | |
185 | 197 | | |
186 | 198 | | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
187 | 206 | | |
188 | 207 | | |
189 | | - | |
190 | | - | |
191 | | - | |
192 | | - | |
193 | | - | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
194 | 223 | | |
195 | 224 | | |
196 | 225 | | |
| |||
222 | 251 | | |
223 | 252 | | |
224 | 253 | | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
225 | 308 | | |
226 | 309 | | |
227 | 310 | | |
| |||
571 | 654 | | |
572 | 655 | | |
573 | 656 | | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
69 | 69 | | |
70 | 70 | | |
71 | 71 | | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
72 | 86 | | |
73 | 87 | | |
74 | 88 | | |
| |||
124 | 138 | | |
125 | 139 | | |
126 | 140 | | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
127 | 147 | | |
128 | 148 | | |
129 | 149 | | |
| |||
1307 | 1327 | | |
1308 | 1328 | | |
1309 | 1329 | | |
| 1330 | + | |
1310 | 1331 | | |
1311 | 1332 | | |
1312 | 1333 | | |
| |||
1364 | 1385 | | |
1365 | 1386 | | |
1366 | 1387 | | |
| 1388 | + | |
1367 | 1389 | | |
1368 | 1390 | | |
1369 | 1391 | | |
| |||
1411 | 1433 | | |
1412 | 1434 | | |
1413 | 1435 | | |
| 1436 | + | |
| 1437 | + | |
1414 | 1438 | | |
1415 | 1439 | | |
1416 | 1440 | | |
| |||
1465 | 1489 | | |
1466 | 1490 | | |
1467 | 1491 | | |
| 1492 | + | |
| 1493 | + | |
1468 | 1494 | | |
1469 | 1495 | | |
1470 | 1496 | | |
| |||
2292 | 2318 | | |
2293 | 2319 | | |
2294 | 2320 | | |
| 2321 | + | |
| 2322 | + | |
| 2323 | + | |
| 2324 | + | |
| 2325 | + | |
| 2326 | + | |
| 2327 | + | |
| 2328 | + | |
| 2329 | + | |
| 2330 | + | |
| 2331 | + | |
| 2332 | + | |
| 2333 | + | |
| 2334 | + | |
| 2335 | + | |
| 2336 | + | |
| 2337 | + | |
| 2338 | + | |
| 2339 | + | |
| 2340 | + | |
| 2341 | + | |
| 2342 | + | |
| 2343 | + | |
| 2344 | + | |
| 2345 | + | |
| 2346 | + | |
| 2347 | + | |
| 2348 | + | |
| 2349 | + | |
| 2350 | + | |
| 2351 | + | |
| 2352 | + | |
| 2353 | + | |
| 2354 | + | |
| 2355 | + | |
2295 | 2356 | | |
2296 | 2357 | | |
2297 | 2358 | | |
| |||
2383 | 2444 | | |
2384 | 2445 | | |
2385 | 2446 | | |
| 2447 | + | |
2386 | 2448 | | |
2387 | 2449 | | |
2388 | 2450 | | |
2389 | 2451 | | |
2390 | 2452 | | |
| 2453 | + | |
| 2454 | + | |
| 2455 | + | |
| 2456 | + | |
| 2457 | + | |
2391 | 2458 | | |
2392 | 2459 | | |
2393 | 2460 | | |
| |||
2689 | 2756 | | |
2690 | 2757 | | |
2691 | 2758 | | |
| 2759 | + | |
| 2760 | + | |
| 2761 | + | |
| 2762 | + | |
| 2763 | + | |
| 2764 | + | |
| 2765 | + | |
| 2766 | + | |
| 2767 | + | |
| 2768 | + | |
| 2769 | + | |
| 2770 | + | |
| 2771 | + | |
| 2772 | + | |
| 2773 | + | |
| 2774 | + | |
| 2775 | + | |
| 2776 | + | |
| 2777 | + | |
| 2778 | + | |
| 2779 | + | |
| 2780 | + | |
| 2781 | + | |
| 2782 | + | |
| 2783 | + | |
| 2784 | + | |
| 2785 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
197 | 197 | | |
198 | 198 | | |
199 | 199 | | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
200 | 215 | | |
201 | 216 | | |
202 | 217 | | |
| |||
400 | 415 | | |
401 | 416 | | |
402 | 417 | | |
403 | | - | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
404 | 423 | | |
405 | 424 | | |
406 | 425 | | |
| |||
0 commit comments