From 7d2b4793c2641bcd765f306c6b2985c21407b0d8 Mon Sep 17 00:00:00 2001 From: pingqiu Date: Sun, 3 May 2026 08:51:00 -0700 Subject: [PATCH] docs(p15): record G15b manifest test slice --- ...se-15-g15b-manifest-qa-test-instruction.md | 83 +++++++++++++++++++ ...3-phase-15-g15b-k8s-static-pv-mini-plan.md | 15 +++- 2 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 sw-block/design/test/v3-phase-15-g15b-manifest-qa-test-instruction.md diff --git a/sw-block/design/test/v3-phase-15-g15b-manifest-qa-test-instruction.md b/sw-block/design/test/v3-phase-15-g15b-manifest-qa-test-instruction.md new file mode 100644 index 000000000..b695bbd46 --- /dev/null +++ b/sw-block/design/test/v3-phase-15-g15b-manifest-qa-test-instruction.md @@ -0,0 +1,83 @@ +# V3 Phase 15 G15b Manifest QA Test Instruction + +**Date**: 2026-05-03 +**Status**: manifest-layer QA for `p15-g15b/k8s-static-pv@62325c9` +**Scope**: Kubernetes static PV manifest shape only; no Kubernetes cluster required. + +--- + +## Headline + +At `seaweed_block@62325c9`, G15b-1 proves the V3 Kubernetes static PV deployment shape is pinned before cluster execution: + +```text +CSIDriver attachRequired=true + -> controller uses external-attacher, not provisioner + -> static PV does not embed iSCSI/NVMe target identity + -> node plugin is privileged/hostNetwork with kubelet/dev/iscsi mounts + -> PV uses block.csi.seaweedfs.com + volumeHandle=v1 +``` + +This is a manifest guard layer. It does not prove pod write/read; that belongs to the G15b Kubernetes lab run. + +--- + +## Commands + +From the code repo: + +```powershell +cd C:\work\seaweed_block_g9c +git checkout p15-g15b/k8s-static-pv +go test ./cmd/blockcsi -run TestG15b_Manifest -count=1 -v +go test ./core/csi ./cmd/blockcsi ./core/host/volume ./core/host/master ./core/authority ./cmd/blockmaster ./cmd/blockvolume -count=1 +``` + +Expected result: + +- focused manifest tests: PASS +- 7-package CSI/product-loop regression: PASS + +--- + +## Scenario Map + +| Scenario | Backing test | +|---|---| +| CSIDriver requires attach so Kubernetes invokes `ControllerPublish`. | `cmd/blockcsi/g15b_manifest_test.go::TestG15b_Manifest_CSIDriverRequiresAttach` | +| Controller sidecar shape uses external-attacher and not external-provisioner. | `cmd/blockcsi/g15b_manifest_test.go::TestG15b_Manifest_ControllerUsesAttacherNotProvisioner` | +| Static PV close path does not embed `iscsiAddr`, `iqn`, `nqn`, epoch, or endpoint version. | `cmd/blockcsi/g15b_manifest_test.go::TestG15b_Manifest_StaticPVDoesNotEmbedTargetFacts` | +| Node plugin has the privileged Linux shape needed for `iscsiadm`, `/dev`, and kubelet bind mounts. | `cmd/blockcsi/g15b_manifest_test.go::TestG15b_Manifest_NodePluginPrivilegedShape` | +| Static PV uses the V3 CSI driver name and a volume handle, not an endpoint. | `cmd/blockcsi/g15b_manifest_test.go::TestG15b_Manifest_StaticPVUsesBlockCSIDriver` | +| Manifests do not carry authority-shaped fields. | `cmd/blockcsi/g15b_manifest_test.go::TestG15b_Manifest_NoAuthorityShapedFields` | + +--- + +## Non-Claims + +G15b-1 does not claim: + +- Kubernetes pod starts successfully. +- kubelet calls `NodeStageVolume`. +- external-attacher reaches `ControllerPublishVolume`. +- real iSCSI login/mount happens under Kubernetes. +- pod write/read byte-equal. +- cleanup removes all iSCSI sessions. +- dynamic provisioning, snapshots, expansion, NVMe, failover under mount, multi-node RWO, or performance. + +--- + +## Next Evidence Layer + +G15b-2 should add the Kubernetes lab harness: + +```text +build images + -> apply blockmaster/blockvolume/product-loop setup + -> apply CSI manifests + -> apply static PV/PVC/pod + -> pod checksum write/read + -> cleanup + no dangling iSCSI session +``` + +The G15b-1 manifest tests are the pre-flight guard for that run. diff --git a/sw-block/design/v3-phase-15-g15b-k8s-static-pv-mini-plan.md b/sw-block/design/v3-phase-15-g15b-k8s-static-pv-mini-plan.md index d11e3318f..9383bc002 100644 --- a/sw-block/design/v3-phase-15-g15b-k8s-static-pv-mini-plan.md +++ b/sw-block/design/v3-phase-15-g15b-k8s-static-pv-mini-plan.md @@ -1,8 +1,8 @@ # V3 Phase 15 โ€” G15b Kubernetes Static PV Mini-Plan **Date**: 2026-05-03 -**Status**: architect draft; follows G15a close on `seaweed_block@ac49adb` -**Expected branch**: continue from `p15-g15a/csi-static-mvp`, or branch `p15-g15b/k8s-static-pv` from `ac49adb` +**Status**: G15b-1 manifest skeleton + static guards implemented at `seaweed_block@62325c9` +**Branch**: `p15-g15b/k8s-static-pv` from `ac49adb` **Goal**: prove a Kubernetes pod can consume a pre-provisioned V3 block volume through `cmd/blockcsi`, using real Kubernetes CSI control flow and real Linux iSCSI staging. --- @@ -122,6 +122,8 @@ These tests are not a substitute for Kubernetes. They prevent the highest-risk c ### G15b-1 โ€” K8s Manifest Skeleton + Static Guards +Status: **implemented** at `seaweed_block@62325c9`. + Code: - Add V3 Kubernetes manifests, likely under: @@ -149,6 +151,15 @@ Pass: - All ยง4 manifest guards green. - No product behavior change. +Verification: + +```powershell +go test ./cmd/blockcsi -run TestG15b_Manifest -count=1 -v +go test ./core/csi ./cmd/blockcsi ./core/host/volume ./core/host/master ./core/authority ./cmd/blockmaster ./cmd/blockvolume -count=1 +``` + +Result: PASS on `62325c9`. + ### G15b-2 โ€” K8s Lab Harness Artifacts: