-
Type:
Task
-
Resolution: Duplicate
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: Checkpoints
-
None
-
Storage Engines - Foundations
-
169.38
-
None
-
None
Two problems in the checkpoint stage of test/csuite/schema_disagg_abort make every two-node run fail before the workload starts.
The follower never reports that it is ready
follower_checkpoint() decides whether a pickup was the first one by testing state->adopted_ckpt_lsn == 0, but it does so after calling ckpt_pick_up(), which has already stored the adopted LSN. The test is therefore false for every real checkpoint, the follower-ready sentinel is never written, and the parent aborts:
FAILED: follower_ready was not created within 60 seconds: Operation timed out
Every -r lf run reproduces it, including the ones in smoke.sh. The fix is to read the adopted LSN before the pickup.
Step-up can adopt a checkpoint that is not the latest one
ckpt_adopt_latest() takes a single pickup and returns. A pickup that lands while readers are still on an older checkpoint is deferred rather than applied, and stepping up discards a pending deferral, so the node can step up on stale metadata.
The fix is to keep picking up until the connection reports that everything delivered to it has been adopted, comparing the delivered and adopted checkpoint metadata LSN statistics. Both sides of the comparison have to come from the connection rather than from the page log, since a deferral outlives delivery and the page log may have been read at a different time. The loop needs the usual MAX_OP_WAIT bound so a stall fails with a clear message instead of hanging.
- is duplicated by
-
WT-18402 schema_disagg_abort: give every created table a unique name
-
- Closed
-