From 0260f20f74541b6fc98dd58e917e04fac4c3ae09 Mon Sep 17 00:00:00 2001 From: alice Date: Wed, 9 Sep 2026 23:17:37 +0000 Subject: [PATCH] vms-015: repoint cluster-dlm evidence from deleted src/vmsscs to executive-resident src/kernel-core The SCS/DLM code moved from the retired userspace SCS daemon (src/vmsscs/, now DELETED) into the executive-resident kernel-core substrate. Two Compatibility Surface Register rows still cited the old, gone files, tripping render_compat.py's evidence-drift warnings. Repoint (verified the target actually implements the claimed behavior, not merely exists): - cluster-dlm$async-reply-wire: src/vmsscs/scsd.c -> src/kernel-core/vms_dlm_scs_fsm.c The DLM REQUESTER arm: h_grant() receives the async queued-reply / deferred GRANT off the SCS wire and completes the executive-resident origin record via grant_recv() -- the "requester-side completion" the row claims. - cluster-dlm$scs-transport: src/vmsscs/scs_dlm.c -> src/kernel-core/vms_cluster_codec_dlm.c The DLM lock-request message class: typed encode/decode of the ENQ/GRANT/DEQ/BLKAST/REBUILD/DLKSRCH frame body. verified_against fragment repointed: the stale "src/vmsscs codec ctests" -> tests/cluster/host/test_codec_dlm.c (frame round-trip + op-validator ctest). Only the file citations changed; status/authenticity/desc untouched. render_compat.py now emits no "evidence not found" warning for either row. Regenerated docs/compatibility-surface.md committed alongside. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_018q4jvj6GCkdbYjRvpy7Vwu --- docs/compat/facilities/cluster-dlm.yaml | 6 +++--- docs/compatibility-surface.md | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/compat/facilities/cluster-dlm.yaml b/docs/compat/facilities/cluster-dlm.yaml index 7c4b23f30..dea1554a4 100644 --- a/docs/compat/facilities/cluster-dlm.yaml +++ b/docs/compat/facilities/cluster-dlm.yaml @@ -59,7 +59,7 @@ items: status: verified authenticity: real vms: "Async DLM replies (queued-reply + deferred GRANT) delivered over SCS; requester-side completion" - evidence: src/vmsscs/scsd.c + evidence: src/kernel-core/vms_dlm_scs_fsm.c verified_against: "tests/qemu/run_dlm_harness_h5.sh (two-node A<->B live /dev/vms: SCSD-I-DLMPEND, SCSD-I-DLMDEFER, SCSD-I-DLMH5FLIP granted_mode=EX)" notes: > vms-6ca rung H5. The master's async replies ride the live SCS wire: node B @@ -114,8 +114,8 @@ items: status: verified authenticity: real vms: "DLM SYSAP SCS connection + lock-request message class (ENQ/GRANT/DEQ/BLKAST/REBUILD/DLKSRCH) between cluster nodes" - evidence: src/vmsscs/scs_dlm.c - verified_against: "tests/qemu/run_dlm_harness_h0.sh..ec75 (H0..H11 on real /dev/vms); src/vmsscs codec ctests (scs_dlm frame encode/decode + op-name validators)" + evidence: src/kernel-core/vms_cluster_codec_dlm.c + verified_against: "tests/qemu/run_dlm_harness_h0.sh..ec75 (H0..H11 on real /dev/vms); tests/cluster/host/test_codec_dlm.c (DLM frame encode/decode + op validators)" notes: > vms-94c rung 1, extended through H11. A DLM message rides as a p.4-13 SCS application message (MTYPE 10) with its body at SCA content offset 58 (the diff --git a/docs/compatibility-surface.md b/docs/compatibility-surface.md index 9423e8305..8c0f7746b 100644 --- a/docs/compatibility-surface.md +++ b/docs/compatibility-surface.md @@ -873,11 +873,11 @@ The ENQ-class distributed lock manager is COMPLETE and every rung is proven on a |---|---|---|---|---|---|---|---| | ✅ | `cluster-dlm$cross-node-lock` | feature | Cross-node $ENQ grant / block-then-grant / blocking-AST delivered on the mastering node + real holder | verified | real | in | `src/kernel-core/vms_lock.c` — vms-94c/vms-e8f1/vms-904c + BLKAST wire H6 (vms-76d/#918). vms_lock_dlm_xnode_dispatch runs a decoded cross-node $ENQ through the real lock manager on the mastering node, held FOR the remote requester's CSID: a compatible request GRANTS (SS$_NORMAL, GET_RESMASTER shows held_for=); an incompatible one QUEUES on the real waiting queue (VMS_DLM_STS_QUEUED, GETLKI shows granted NL / requested EX) and the master fires the blocking-AST decision. The BLKAST is now DELIVERED over SCS and fires a genuine user-mode AST on the remote holder's process (H6, was deferred); a cross-node $DEQ (vms_lock_dlm_xnode_deq, authorized by CSID) releases and grants the blocked request (GETLKI flips NL->EX). Proven on real /dev/vms (tests/qemu/test_syssvc_dlm_xnode.c x86_64 + Alpha LP64; the multi-node H5/H6 QEMU harnesses). No fake grants OR blocks — a queued request is a real lock on the master's queue that releases only on a real $DEQ (INV-6). | -| ✅ | `cluster-dlm$async-reply-wire` | feature | Async DLM replies (queued-reply + deferred GRANT) delivered over SCS; requester-side completion | verified | real | in | `src/vmsscs/scsd.c` — vms-6ca rung H5. The master's async replies ride the live SCS wire: node B WIREs the queued-reply (granted mode NL — the requester stays genuinely pending) and, on a real cross-node $DEQ that flips a queued waiter to granted, WIREs an unprompted deferred GRANT (SS$_NORMAL, the granted mode) to that requester (vms_lock_dlm_xnode_deq reports the flipped waiter). The REQUESTER-SIDE GRANT RECEIVE (VMS_DLM_OP_GRANT) completes an executive-resident ORIGIN record on the requesting node, whose granted mode is set ONLY from what the master sent over SCS; GETLKI reads the NL->EX flip back on the REQUESTER. This origin record is the requester-side wait-for state H11's distributed deadlock search reads (VMS_IOCTL_DLM_ENUM_WAITS). Proven on a two-node live A<->B QEMU harness with real /dev/vms on both (tests/qemu/run_dlm_harness_h5.sh: SCSD-I-DLMPEND, SCSD-I-DLMDEFER, SCSD-I-DLMH5FLIP granted_mode=EX). No fabricated wire reply or grant (INV-6). +| ✅ | `cluster-dlm$async-reply-wire` | feature | Async DLM replies (queued-reply + deferred GRANT) delivered over SCS; requester-side completion | verified | real | in | `src/kernel-core/vms_dlm_scs_fsm.c` — vms-6ca rung H5. The master's async replies ride the live SCS wire: node B WIREs the queued-reply (granted mode NL — the requester stays genuinely pending) and, on a real cross-node $DEQ that flips a queued waiter to granted, WIREs an unprompted deferred GRANT (SS$_NORMAL, the granted mode) to that requester (vms_lock_dlm_xnode_deq reports the flipped waiter). The REQUESTER-SIDE GRANT RECEIVE (VMS_DLM_OP_GRANT) completes an executive-resident ORIGIN record on the requesting node, whose granted mode is set ONLY from what the master sent over SCS; GETLKI reads the NL->EX flip back on the REQUESTER. This origin record is the requester-side wait-for state H11's distributed deadlock search reads (VMS_IOCTL_DLM_ENUM_WAITS). Proven on a two-node live A<->B QEMU harness with real /dev/vms on both (tests/qemu/run_dlm_harness_h5.sh: SCSD-I-DLMPEND, SCSD-I-DLMDEFER, SCSD-I-DLMH5FLIP granted_mode=EX). No fabricated wire reply or grant (INV-6). | | ✅ | `cluster-dlm$remaster-lvb-deadlock` | feature | LVB replication, dynamic remastering (directory + lock state), directory-ownership guard, distributed deadlock detection | verified | real | in | `src/kernel-core/vms_lock.c` — The former "remain absent" cluster of the DLM epic, now COMPLETE and each part proven on a live multi-node /dev/vms rail. LVB REPLICATION both ways: the H8 write crossing (vms-d81/#923) and the H9 read crossing (vms-eeb/#925). DYNAMIC REMASTERING on graceful departure: the directory INGRESS re-resolves a departed node's resources onto a survivor (H10a, vms-2bf/#927, VMS_IOCTL_DLM_MEMBER_DEPART + a runtime departed-set filtering the static dlm_member_csids vector), AND the cross-node lock STATE is rebuilt on the new master from the surviving holder's REAL origin record over a targeted SCS_DLM_OP_REBUILD, reconstructed directly into res->granted and value-verified (H10b, vms-dca9/#928, run_dlm_harness_h10b.sh three-way equality). DIRECTORY OWNERSHIP: a node refuses to master a resource it is not the directory for — dlm_resolve_master returns SS$_UNSUPPORTED — proven on the wire (e84, vms-e84/#929, run_dlm_harness_e84.sh: non-directory node answers 0x8F8, directory node GRANTS). DISTRIBUTED DEADLOCK DETECTION: a cross-node cycle is found by an edge-chasing search over the real distributed wait-for graph (home pending origins via VMS_IOCTL_DLM_ENUM_WAITS + master res->granted via VMS_IOCTL_DLM_GET_GRANTED), and a globally-deterministic single victim (lexicographic-min over the cycle) is aborted with SS$_DEADLOCK via the GRANT-reply path, idempotently (H11, vms-ec75/#930, run_dlm_harness_ec75.sh: cycle detected, exactly one victim, the other stays queued). Every edge is a real queue/origin read; a dropped/ttl-expired probe reports no-deadlock, never a fabricated cycle (INV-6). DEPTH deferred beyond the engine (honest, tracked): the concurrent-both-initiate deadlock proof (vms-04f — logic shipped + code-verified), directory REDIRECT (vms-b96), and a real app-process cross-node acquisition path replacing the SS$_UNSUPPORTED "0.4" stub (vms-d1f, post-1.0). | -| ✅ | `cluster-dlm$scs-transport` | feature | DLM SYSAP SCS connection + lock-request message class (ENQ/GRANT/DEQ/BLKAST/REBUILD/DLKSRCH) between cluster nodes | verified | real | in | `src/vmsscs/scs_dlm.c` — vms-94c rung 1, extended through H11. A DLM message rides as a p.4-13 SCS application message (MTYPE 10) with its body at SCA content offset 58 (the scs_mscp.c nesting). The transport is real and the receive handler GRANTS, QUEUES, delivers BLKAST, rebuilds on remaster, and runs the deadlock search — the full ENQ-class op set is handled on a real /dev/vms executive across every DLM QEMU harness (H0..H11). +| ✅ | `cluster-dlm$scs-transport` | feature | DLM SYSAP SCS connection + lock-request message class (ENQ/GRANT/DEQ/BLKAST/REBUILD/DLKSRCH) between cluster nodes | verified | real | in | `src/kernel-core/vms_cluster_codec_dlm.c` — vms-94c rung 1, extended through H11. A DLM message rides as a p.4-13 SCS application message (MTYPE 10) with its body at SCA content offset 58 (the scs_mscp.c nesting). The transport is real and the receive handler GRANTS, QUEUES, delivers BLKAST, rebuilds on remaster, and runs the deadlock search — the full ENQ-class op set is handled on a real /dev/vms executive across every DLM QEMU harness (H0..H11). | ### cluster-logicals — Cluster-wide logical names / global sections