Skip to content

vms-209: DLM harness H3 — cross-node $ENQ reaches node B's real executive (2296 not 2680) - #845

Merged
baron-3dl merged 1 commit into
mainfrom
work/vms-209
Aug 28, 2026
Merged

baron-3dl merged 1 commit into
mainfrom
work/vms-209

Conversation

@baron-3dl

Copy link
Copy Markdown
Contributor

vms-209 — DLM harness H3 (THE MILESTONE)

Extends the H2 joined two-node real-/dev/vms QEMU cluster harness so that, after both nodes reach SCSD-I-VAXCLMEMBER, node A issues ONE cross-node $ENQ (OVMX_DLM_ENQ=RESONE) for a resource mastered on node B. Node B receives it over SCS and dispatches it to its REAL /dev/vms executive (vms_lock_dlm_xnode_dispatch), returning the status back to A on the live VC.

The milestone assertion

Node B's dispatch returns 2296 / 0x000008F8 (SS$_UNSUPPORTED) — the $ENQ REACHED the real executive and was honestly declined at rung 1 — and specifically NOT 2680 / 0x00000A78 (SS$_NOSUCHDEV), which is what a missing executive returns (the old Docker harness). That status flip is the machine-checkable proof the cross-node $ENQ genuinely reaches the mastering node's real executive. This unblocks vms-e8f1 (rung-2 GRANT).

Scope boundary (respected)

Pure harness work — no executive change. The stub correctly still returns SS$_UNSUPPORTED for the ENQ case; the actual GRANT (→ SS$_NORMAL) is H4/rung-2 (vms-e8f1). The full A→B→A round-trip machinery already existed in src/vmsscs/scsd.c (H0 REGISTER fix + rung-1b send/recv/reply). This PR only arms node A's requester leg and lifts the DLM markers into the host verdict.

Local run (KVM, this PR's image) — verbatim

[15:40:16.007] SCSD-I-DLMENQ, sent cross-node $ENQ resnam='RESONE' mode=EX to peer DLM server 0xCB78000F ... over LIVE VC
[15:40:15.865] SCSD-I-DLMRX, cross-node ENQ from CSID=1601 resnam='RESONE' -> executive status=0x000008F8
[15:40:15.865] SCSD-I-DLMGRANT, sent GRANT status=0x000008F8 back to CSID=1601 ... -- honest response, no grant
[15:40:16.011] SCSD-I-DLMDONE, cross-node $ENQ round-trip COMPLETE: peer (master CSID=1602) answered GRANT status=0x000008F8 resnam='RESONE' -- LIVE A->B->A transport proven; lock NOT granted (honest)

verdict inputs:
  A_VAXCLMEMBER=1  B_VAXCLMEMBER=1   (H2 join precondition)
  A_SENT_ENQ=1     B_RECEIVED_ENQ=1
  B_DISPATCH_STATUS=0x000008F8   (want 0x000008F8=2296, NOT 0x00000A78=2680)

  DLM HARNESS H3 PASSED: B dispatched cross-node $ENQ to real executive rc=2296 (not 2680)

Files

  • tests/qemu/init_dlm_h3.sh — PID-1 init; arms node A's $ENQ, lifts DLM markers to ttyS1
  • tests/qemu/run_dlm_harness_h3.sh — host runner + milestone verdict (reads B's status from B's own log; 2680 is NOT a pass)
  • tests/qemu/Dockerfile.dlm-harness-h3
  • .github/workflows/ci.ymldlm-harness-h3 job (KVM passthrough + TCG fallback + artifact upload) under the existing dlm_harness path filter

INV-6 / Rule 9: the verdict reads B's status from B's own SCSD log and never fabricates it; SS$_NOSUCHDEV (2680) is explicitly rejected. No fake grant, no executive weakening.

🤖 Generated with Claude Code

…tive

THE MILESTONE rung of the two-node DLM harness (epic vms-7fa). Extends H2's
joined two-node real-/dev/vms QEMU cluster so that, AFTER both nodes reach
SCSD-I-VAXCLMEMBER, node A issues ONE cross-node $ENQ (OVMX_DLM_ENQ=RESONE) for
a resource mastered on node B; node B receives it over SCS and DISPATCHES it to
its REAL /dev/vms executive (vms_lock_dlm_xnode_dispatch), returning the status
back to A on the live VC.

The host verdict asserts node B's dispatch returned 2296 / 0x000008F8
(SS$_UNSUPPORTED — the $ENQ REACHED the real executive and was honestly declined
at rung 1) and specifically NOT 2680 / 0x00000A78 (SS$_NOSUCHDEV — what a MISSING
executive returns, as the old Docker harness did). That status flip is the
machine-checkable proof the cross-node $ENQ genuinely reaches the mastering
node's real executive. It also confirms A SENT the $ENQ (SCSD-I-DLMENQ), B
RECEIVED it (SCSD-I-DLMRX), and the A->B->A round-trip completed
(SCSD-I-DLMGRANT / SCSD-I-DLMDONE).

Pure harness work — NO executive change. The stub correctly still returns
SS$_UNSUPPORTED for the ENQ case; the actual GRANT (-> SS$_NORMAL) is H4/rung-2
(vms-e8f1), which this unblocks. INV-6 / Rule 9: the verdict reads B's status
from B's own SCSD log and never fabricates it; 2680 is not accepted as a pass.

New files:
- tests/qemu/init_dlm_h3.sh          (PID-1 init; arms node A's $ENQ)
- tests/qemu/run_dlm_harness_h3.sh   (host runner + milestone verdict)
- tests/qemu/Dockerfile.dlm-harness-h3
- .github/workflows/ci.yml: dlm-harness-h3 job + dlm_harness path filter entries

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@baron-3dl
baron-3dl merged commit 8c7c566 into main Aug 28, 2026
105 checks passed
baron-3dl added a commit that referenced this pull request Aug 28, 2026
…ce parity, SHOW USERS de-fab (#858)

Bumps OVMX_PRODUCT_VERSION and os-release V0.5-7 -> V0.5-8. 14 commits since V0.5-7.

Distributed Lock Manager — the cross-node ladder tops out at a real GRANT:
  - #849 vms-e8f1/vms-17c  DLM rung-2 (H4): the first REAL cross-node $ENQ GRANT
                           — node B holds a lock on A's behalf for A's CSID,
                           $ENQ returns SS$_NORMAL over live SCS (no longer
                           INV-6 "grants nothing"). The distributed lock
                           manager now actually locks across nodes.
  - #845 vms-209          DLM harness H3 — a cross-node $ENQ reaches node B's
                           real executive
  - #843 vms-4bd0         DLM harness H2 — two real-executive QEMU nodes
                           complete the full VMS$VAXcluster join
  - #842 vms-534          DLM harness H1 — two real-executive nodes exchange
                           the 0x6007 HELLO over a socket netdev
  - #840 vms-4b6          DLM harness rung H0 — SCSD.EXE composes with a real
                           executive
  - #841 docs             Alpha cross-node DLM wire oracle — observed SCS
                           transport + documented GRANT semantics (Rule 8)

Alpha co-release parity — authenticated login + the shared SHOW battery:
  - #852 vms-f2c          Alpha DCL/SHOW acceptance parity — the same shared
                           11-command battery x86_64 runs, now on
                           qemu-system-alpha
  - #847                  vms.ko guards BG fork-inherit tracepoints behind
                           CONFIG_TRACEPOINTS (Alpha P0 modpost fix)

Authenticity (INV-6 de-fabrication):
  - #839 vms-6a1          SHOW USERS fails honestly when the executive is
                           absent — no more per-process fabricated user list

Boot console fidelity:
  - #850 vms-dec          kill boot-console newline spam (the operator's echoed
                           RETURNs) + a type-during-boot regression gate

Networking (layered-product promotion):
  - #851 vms-67f          TCP/IP Services promoted to a first-class layered
                           product — build plan + roadmap (1.0 blocker)

Docs / ledger:
  - #745                  Alpha C-RTL archive DECIDED — Option A (operator
                           ruling 2026-08-23)
  - #709 vms-da0          OpenVMS GCC port × OVMX faithful-surface gap analysis
  - #838                  reconcile the release block for the V0.5-7 tag
                           (INV-LEDGER)

QA'd under KVM boot-to-login on the workshop host with the full SHOW
acceptance battery VMS-faithful; boot console clean (no newline flood) and
SHOW USERS honest. Release notes are generated at tag time by
tools/gen_release_notes.py (INV-LEDGER single-ledger); the roadmap narrative
block + public site are the conductor's reconcile (INV-0/INV-LEDGER).

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant