Commit ca7a2da
committed
fix(qwp): fail closed on SF manifest with uncollapsed boundaries and no segment files
Recovery treated every valid manifest with zero .sfa files as EMPTY and
removed it, even when headBase < activeBase. No in-protocol crash can
produce that state: the close-time drain durably collapses the
boundaries to head == active before its first unlink, and a fresh start
writes (0,0). Uncollapsed boundaries with no segment files therefore
prove durable, never-declared-acked frames vanished outside the protocol
(manual wipe, partial restore) -- yet recovery silently started fresh
and deleted the manifest, destroying the only evidence of the loss.
Accept the segment-less slot as EMPTY only when headBase == activeBase,
matching the existing guard on the some-files clean-drain window;
otherwise throw without mutating the slot. Fix the drain-window test to
model the real crash state (9,9) and add a fail-closed (7,9) test
asserting the directory is left byte-identical.1 parent 9c9e1dd commit ca7a2da
2 files changed
Lines changed: 59 additions & 13 deletions
File tree
- core/src
- main/java/io/questdb/client/cutlass/qwp/client/sf/cursor
- test/java/io/questdb/client/test/cutlass/qwp/client/sf/cursor
Lines changed: 26 additions & 10 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
276 | 276 | | |
277 | 277 | | |
278 | 278 | | |
279 | | - | |
280 | | - | |
281 | | - | |
282 | | - | |
283 | | - | |
284 | | - | |
285 | | - | |
286 | | - | |
287 | | - | |
288 | | - | |
| 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 | + | |
289 | 305 | | |
290 | 306 | | |
291 | 307 | | |
| |||
Lines changed: 33 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
423 | 423 | | |
424 | 424 | | |
425 | 425 | | |
426 | | - | |
427 | | - | |
428 | | - | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
429 | 431 | | |
430 | 432 | | |
431 | 433 | | |
| |||
434 | 436 | | |
435 | 437 | | |
436 | 438 | | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
437 | 467 | | |
438 | 468 | | |
439 | 469 | | |
| |||
0 commit comments