Commit cce3091
committed
fix(qwp): make SF barrier retries genuine re-persists (C-1 unsound latch clear)
After a failed writeback the kernel marks the dirtied pages clean and
reports the error once per open file description (errseq_t; fsyncgate),
so re-running msync+fsync over the same range returns a vacuous 0:
durableCursor advanced, the PERIODIC rotation gate opened, and the
round-3 unlatch (958a36d) resumed the producer -- all without the data
being durable. A clean non-durable page is also evictable, so reclaim
could silently replace the only good copy with stale disk content.
- MmapSegment.syncPublished now brackets the barrier: best-effort mlock
pin over the page-aligned [durableCursor, published) range, then
msync+fsync; the failure arm re-dirties the pinned range (one
same-value store per page -- kernel dirty tracking is value-blind)
before the pin is released. The pin closes the clean-page reclaim race
by construction; the re-dirty guarantees the next barrier performs
real writeback and reports real errors, keeping the manager's
clearDurabilityFailure() honest.
- mlock/munlock natives added (POSIX mlock, Windows VirtualLock) and
exposed through Files with an UnsatisfiedLinkError guard plus
FilesFacade defaults. Refusal (RLIMIT_MEMLOCK, missing capability) is
a soft downgrade: one deduped WARN, barrier outcome and latch
semantics unaffected.
- 4 regression tests: bracket ordering on success, re-dirty-before-unpin
on failure, an fsyncgate facade model (first fsync fails, later
msync/fsync return vacuous 0 without delegating) proving the latch
only clears over re-dirtied pages, and mlock-refusal degrade. The
drop-the-redirty mutant was applied and killed (2 failures) before
restoring.
Native libraries are built from source, so the new symbols ship with
every build; the UnsatisfiedLinkError guard remains as defense-in-depth
for environments running a stale prebuilt library.1 parent 7a716ef commit cce3091
7 files changed
Lines changed: 393 additions & 11 deletions
File tree
- core/src
- main
- c
- windows
- java/io/questdb/client
- cutlass/qwp/client/sf/cursor
- std
- test/java/io/questdb/client/test/cutlass/qwp/client/sf/cursor
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
388 | 388 | | |
389 | 389 | | |
390 | 390 | | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
689 | 689 | | |
690 | 690 | | |
691 | 691 | | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
Lines changed: 72 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| 34 | + | |
34 | 35 | | |
35 | 36 | | |
36 | 37 | | |
| 38 | + | |
| 39 | + | |
37 | 40 | | |
38 | 41 | | |
39 | 42 | | |
| |||
68 | 71 | | |
69 | 72 | | |
70 | 73 | | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
71 | 78 | | |
72 | 79 | | |
73 | 80 | | |
| |||
103 | 110 | | |
104 | 111 | | |
105 | 112 | | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
106 | 116 | | |
107 | 117 | | |
108 | 118 | | |
| |||
486 | 496 | | |
487 | 497 | | |
488 | 498 | | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
489 | 514 | | |
490 | 515 | | |
491 | 516 | | |
| |||
498 | 523 | | |
499 | 524 | | |
500 | 525 | | |
501 | | - | |
502 | | - | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
503 | 533 | | |
504 | | - | |
505 | | - | |
506 | | - | |
507 | | - | |
| 534 | + | |
| 535 | + | |
| 536 | + | |
| 537 | + | |
| 538 | + | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
508 | 568 | | |
509 | | - | |
510 | | - | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
511 | 575 | | |
512 | 576 | | |
513 | 577 | | |
| |||
Lines changed: 6 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1224 | 1224 | | |
1225 | 1225 | | |
1226 | 1226 | | |
1227 | | - | |
1228 | | - | |
1229 | | - | |
| 1227 | + | |
| 1228 | + | |
| 1229 | + | |
| 1230 | + | |
| 1231 | + | |
| 1232 | + | |
1230 | 1233 | | |
1231 | 1234 | | |
1232 | 1235 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
573 | 573 | | |
574 | 574 | | |
575 | 575 | | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
576 | 623 | | |
577 | 624 | | |
578 | 625 | | |
| |||
Lines changed: 18 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
108 | 108 | | |
109 | 109 | | |
110 | 110 | | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
111 | 121 | | |
112 | 122 | | |
113 | 123 | | |
| |||
116 | 126 | | |
117 | 127 | | |
118 | 128 | | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
119 | 137 | | |
120 | 138 | | |
121 | 139 | | |
| |||
0 commit comments