diff --git a/deploy/helm/nvca-operator/nvca-operator/files/nvcf-storage-capabilities-v1alpha1.yaml b/deploy/helm/nvca-operator/nvca-operator/files/nvcf-storage-capabilities-v1alpha1.yaml index 214ff92398..dcc6f93a7e 100644 --- a/deploy/helm/nvca-operator/nvca-operator/files/nvcf-storage-capabilities-v1alpha1.yaml +++ b/deploy/helm/nvca-operator/nvca-operator/files/nvcf-storage-capabilities-v1alpha1.yaml @@ -45,16 +45,23 @@ drivers: - nouuid - name: csi.weka.io provider: weka - # Fresh ReadWriteMany and ReadOnlyMany claims were tested, but a cache - # workflow was not, so nothing is qualified yet. - accessModes: [] + # Weka is a shared filesystem: one ReadWriteMany claim per cache handle, + # populated once and mounted read-only by every reader, with no derived + # reader PV, so readerMountOptions stays empty. Enabled so the cache + # workflows can be exercised; record the qualification run in the pull + # request that flips this entry. + accessModes: + - ReadWriteMany readerMountOptions: [] - name: fss.csi.oraclecloud.com provider: ociFss - # A ReadWriteMany claim was tested; its readers used read-only Pod mounts, - # which is not evidence for a ReadOnlyMany claim. No cache workflow was - # qualified. - accessModes: [] + # OCI File Storage is NFS: one ReadWriteMany claim per cache handle, + # populated once and mounted read-only by every reader, with no derived + # reader PV, so readerMountOptions stays empty. Enabled so the cache + # workflows can be exercised; record the qualification run in the pull + # request that flips this entry. + accessModes: + - ReadWriteMany readerMountOptions: [] - name: lustre.csi.oraclecloud.com provider: ociLustre diff --git a/docs/dev/sdd-storage-agnostic-cache-architecture.md b/docs/dev/sdd-storage-agnostic-cache-architecture.md index 5f468da598..15986577f2 100644 --- a/docs/dev/sdd-storage-agnostic-cache-architecture.md +++ b/docs/dev/sdd-storage-agnostic-cache-architecture.md @@ -62,7 +62,7 @@ drivers: encryptionSupported: true - name: csi.weka.io provider: weka - accessModes: [] + accessModes: [ReadWriteMany] readerMountOptions: [] ``` diff --git a/src/compute-plane-services/nvca/deployments/nvca-operator/files/nvcf-storage-capabilities-v1alpha1.yaml b/src/compute-plane-services/nvca/deployments/nvca-operator/files/nvcf-storage-capabilities-v1alpha1.yaml index 214ff92398..dcc6f93a7e 100644 --- a/src/compute-plane-services/nvca/deployments/nvca-operator/files/nvcf-storage-capabilities-v1alpha1.yaml +++ b/src/compute-plane-services/nvca/deployments/nvca-operator/files/nvcf-storage-capabilities-v1alpha1.yaml @@ -45,16 +45,23 @@ drivers: - nouuid - name: csi.weka.io provider: weka - # Fresh ReadWriteMany and ReadOnlyMany claims were tested, but a cache - # workflow was not, so nothing is qualified yet. - accessModes: [] + # Weka is a shared filesystem: one ReadWriteMany claim per cache handle, + # populated once and mounted read-only by every reader, with no derived + # reader PV, so readerMountOptions stays empty. Enabled so the cache + # workflows can be exercised; record the qualification run in the pull + # request that flips this entry. + accessModes: + - ReadWriteMany readerMountOptions: [] - name: fss.csi.oraclecloud.com provider: ociFss - # A ReadWriteMany claim was tested; its readers used read-only Pod mounts, - # which is not evidence for a ReadOnlyMany claim. No cache workflow was - # qualified. - accessModes: [] + # OCI File Storage is NFS: one ReadWriteMany claim per cache handle, + # populated once and mounted read-only by every reader, with no derived + # reader PV, so readerMountOptions stays empty. Enabled so the cache + # workflows can be exercised; record the qualification run in the pull + # request that flips this entry. + accessModes: + - ReadWriteMany readerMountOptions: [] - name: lustre.csi.oraclecloud.com provider: ociLustre diff --git a/src/compute-plane-services/nvca/pkg/storage/storage_capabilities_test.go b/src/compute-plane-services/nvca/pkg/storage/storage_capabilities_test.go index e23fd7fad0..d3ce0b6f8f 100644 --- a/src/compute-plane-services/nvca/pkg/storage/storage_capabilities_test.go +++ b/src/compute-plane-services/nvca/pkg/storage/storage_capabilities_test.go @@ -380,18 +380,27 @@ func TestShippedStorageCapabilityCatalog(t *testing.T) { require.NotNil(t, nvmesh.ReaderMountOptions) assert.Equal(t, []string{"ro", "norecovery", "nouuid"}, *nvmesh.ReaderMountOptions) - // Weka, FSS and Lustre are recorded but not qualified for a cache workflow, - // so they carry no access modes and caching stays off for them. Enabling - // one is an edit to its accessModes, backed by a qualification run. - for _, provisioner := range []string{"csi.weka.io", "fss.csi.oraclecloud.com", "lustre.csi.oraclecloud.com"} { + // Weka and OCI FSS are shared filesystems enabled on the ReadWriteMany + // shape: one shared claim, readers mount it read-only, no derived reader + // PV and therefore no reader mount options. + for _, provisioner := range []string{"csi.weka.io", "fss.csi.oraclecloud.com"} { driver, ok := catalog.Drivers[provisioner] require.True(t, ok, provisioner) require.NotNil(t, driver.AccessModes, provisioner) - assert.Empty(t, *driver.AccessModes, provisioner) + assert.Equal(t, []string{"ReadWriteMany"}, *driver.AccessModes, provisioner) require.NotNil(t, driver.ReaderMountOptions, provisioner) assert.Empty(t, *driver.ReaderMountOptions, provisioner) } + // Lustre is recorded but not enabled for a cache workflow, so it carries + // no access modes and caching stays off for it. + lustre, ok := catalog.Drivers["lustre.csi.oraclecloud.com"] + require.True(t, ok) + require.NotNil(t, lustre.AccessModes) + assert.Empty(t, *lustre.AccessModes) + require.NotNil(t, lustre.ReaderMountOptions) + assert.Empty(t, *lustre.ReaderMountOptions) + schemaRaw, err := os.ReadFile(filepath.Join(chartDir, "files", "nvcf-storage-capabilities-v1alpha1.schema.json")) require.NoError(t, err) assert.True(t, json.Valid(schemaRaw), "shipped JSON schema must be valid JSON")