Skip to content

test(two-node): simulator models the takeover read on a frozen peer's devices (F23) and F24 - #1506

Merged
schmidt-scaled merged 1 commit into
mainfrom
test/two-node-sim-f24
Oct 19, 2026
Merged

schmidt-scaled merged 1 commit into
mainfrom
test/two-node-sim-f24

Conversation

@schmidt-scaled

Copy link
Copy Markdown
Contributor

Test code only: the two-node simulator now models the failure the c11 bed run found in ultra #219 (F24), and corrects the 02c model (F23).

What c11 showed

Model changes

  • Takeover read on a frozen peer (F23): the takeover's lvstore metadata read now waits on a still-frozen peer's data devices until their connections close after the peer's abort on wake. That matches bed c9/c10 02c (9 s), unless the node isolates them at the grant (stoplist_peer_devices_on_grant).
    • Only while the peer is still frozen: after its abort, the hublvol redirect itself fails only once the connections close, so 02b stays at 3 s as on the bed.
  • Closed devices still read as online (F24): with isolation but without the new capability isolate_marks_devices_unavailable, a solo follower's takeover read aborts the survivor. That capability models Adding lvol id to lvol events #219's F24 commit, which marks the devices unavailable before resetting them.
  • New scenario F24-frozen-primary-takeover-read: expected to fail on main for F23, and passes with the pending stack's capabilities.
  • Pending fix sets: the frozen-primary scenarios (F19, F20, F21) and F23's now include the new capability. In the simulator the client also writes vol0, whose LVS the survivor takes over in 02a.

Tests

Run locally in WSL against real FoundationDB, filtered on F24, F23, F21, F19, F20, 02a, 02b and 02c: 12 passed, 6 expected failures. The fast and full tiers run in CI. ruff is clean.

The ultra side is simplyblock/ultra#219, commit 04c38403.

🤖 Generated with Claude Code

… devices (F23) and F24

Campaign c11/02c: ultra #219 isolated the lost peer's devices at the solo
grant by closing them, but they still read as online; a follower survivor's
IO-triggered takeover read the lvstore super block from a closed device,
failed, and the survivor aborted (160 IO errors). The F23 model only covered
the leader's writes (02a), so the simulator missed it.

- The takeover's lvstore metadata read now waits on a still-frozen peer's
  data devices until its connections close after its abort on wake (F23,
  bed c9/c10 02c: 9 s), unless the node isolates them at the grant.
- With isolation but without the new capability
  isolate_marks_devices_unavailable (#219's F24 commit marks the devices
  unavailable first), a solo follower's takeover read aborts the survivor
  (F24).
- New scenario F24-frozen-primary-takeover-read (xfail on main for F23),
  test_f24_needs_its_own_fix, and the pending fix sets of the frozen-primary
  scenarios (F19, F20, F21) and F23's include the new capability.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added the target/main Targets the development branch label Oct 19, 2026
@schmidt-scaled
schmidt-scaled merged commit d659faa into main Oct 19, 2026
21 checks passed
@schmidt-scaled
schmidt-scaled deleted the test/two-node-sim-f24 branch October 19, 2026 15:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

target/main Targets the development branch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants