Wire durable NVCA storage capability decisions from nvcf-sc
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 218
- Forks
- 72
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 427
Description
Context
PR #1334 publishes a small public storage catalog, JSON Schema, ConfigMap, strict loader, and tests. It is not wired into runtime selection. Each CSI provisioner entry contains only a provider ID, qualified PVC access modes, and regular/Helm model-cache transitions. Container cache is outside NVCA.
Required design
- Use live
StorageClass/nvcf-scas the sole provider-selection class and requireRetainfor durable cache storage. - Find the catalog entry by exact provisioner. Transition code, not the flat mode list, owns writer-to-reader behavior.
- Keep the catalog minimal. Qualification evidence remains external and identifies the exact CSI/backend, StorageClass digest, Kubernetes/node matrix, and test run. A non-disabled transition is an operator assertion that this evidence applies.
- Add a namespaced
ModelCacheBindingin the model-cache control namespace, keyed by(workflow, sharingDomain, cacheHandle). - Keep binding
specimmutable: provider, provisioner, transition, required modes, StorageClass/catalog digests, and deterministic shared-resource intent. Keep lifecycle, request references, realized data identity, and conditions instatus. - Persist a request selection with binding name/UID, deterministic reader intent, and a request finalizer before storage side effects. Use the API-assigned binding
metadata.uid. - Add binding references conditionally while
Active.Retiringblocks new references. Request deletion removes reader resources and its binding reference before releasing the request finalizer. - Serialize one active writer with a binding Lease. Use deterministic names and Get-before-Create; adopt only objects whose binding UID and immutable spec match.
- Implement provider-specific, no-copy cross-namespace reader views. Generic CSI cannot share one PVC across namespaces. Each PV must have a distinct CSI
volumeHandleresolving to the same qualified backend data identity. - Set
readOnly: trueon the PVC source and every model-cachevolumeMount. Qualification must verify the actual mount isroand that write operations fail for an identity proven writable on a baseline mount. - Migrate legacy empty/coarse backends, NVMesh primary-PV markers, sharedfs writer-PVC markers, Samba backing-PVC markers, the class override, and NVMesh derived encryption classes without changing providers.
- On provider replacement, mark all bindings for the old StorageClass UID
Retiring, drain to zero references, finish cleanup, recreatenvcf-sc, qualify, then resume. - Fail closed for invalid catalogs, non-
Retainclasses, unknown provisioners/transitions, disabled workflows, and pre-side-effect drift. Never switch providers or delete retained data because of later drift.
Required tests
- catalog missing/malformed/unknown/disabled cases and transition mode requirements;
- same sharing domain and cache key converges on one binding; different workflows or domains do not share;
- optimistic-concurrency races, leader/agent restart, deterministic adoption, and mismatched-object rejection;
- request and binding finalizer ordering, stale-reference removal, active-reader cleanup, and provider retirement;
- exact legacy marker, class-override, and NVMesh encryption migration cases;
- one Lease writer, including competing Pods on one node;
- multi-namespace CPU/GPU readers resolving one provider data identity with checksum equality;
- both manifest read-only fields, observed
romount flags, and denied create/append/rename/chmod/truncate/delete; - explicit ROX versus read-only RWX evidence;
- restart, rescheduling, cancellation, failure injection, idempotency, cleanup, upgrade, and rollback;
- no source-sized clone, extra copy, or duplicate CSI handle.
Definition of done
- Runtime uses the public catalog and persists the binding/request state before storage side effects.
- External transitions remain disabled until their transition is implemented and the full workflow suite passes.
- Regular and Helm model-cache workflows are qualified independently.
- The target path selects through
nvcf-sc; legacy state and NVMesh encryption are migrated explicitly. - Operator documentation covers enablement, qualification evidence, and controlled provider replacement.
Performance qualification follows functional acceptance.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing PR #1334's public storage catalog, JSON Schema, ConfigMap, strict loader, and tests, then trace the runtime storage-selection and model-cache control paths. Done means catalog-driven selection through nvcf-sc, persisted binding/request state before side effects, implemented transitions and migrations, read-only qualified readers, provider retirement handling, and the full required workflow suite passing.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go, kubernetes
- Domain
- backend, cloud, infrastructure, testing-qa
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 18/100