IBM / ibm-spectrum-scale-csi

The IBM Spectrum Scale Container Storage Interface (CSI) project enables container orchestrators, such as Kubernetes and OpenShift, to manage the life-cycle of persistent storage.
Apache License 2.0
66 stars 49 forks source link

Different type of shallow copies are not supported for version 1 PVC as source volume #1077

Closed saurabhwani5 closed 9 months ago

saurabhwani5 commented 10 months ago

Describe the bug

When we create other types of shallow copy volumes such as version 2 volume from version 1 independent as the source volume in this scenario shallow copy is not getting created where log error is seen as ValidateShallowCopyVolume failed

How to Reproduce?

  1. Install CSI 2.11.0 with driver images from #1067 :
    [OCP]# oc get pods
    NAME                                                  READY   STATUS    RESTARTS   AGE
    ibm-spectrum-scale-csi-5f9vx                          3/3     Running   0          4h21m
    ibm-spectrum-scale-csi-attacher-585ddbd6bb-l4n62      1/1     Running   0          4h21m
    ibm-spectrum-scale-csi-attacher-585ddbd6bb-mc5bk      1/1     Running   0          4h21m
    ibm-spectrum-scale-csi-f69cw                          3/3     Running   0          4h21m
    ibm-spectrum-scale-csi-knlvd                          3/3     Running   0          4h21m
    ibm-spectrum-scale-csi-operator-5c6565c84c-q4c7p      1/1     Running   0          4h22m
    ibm-spectrum-scale-csi-provisioner-765d779f6b-gjkhc   1/1     Running   0          4h21m
    ibm-spectrum-scale-csi-resizer-644c7bd59b-8rnlj       1/1     Running   0          4h21m
    ibm-spectrum-scale-csi-snapshotter-7cd97548d5-j8stg   1/1     Running   0          4h21m
    [OCP]# oc get cso
    NAME                     VERSION   SUCCESS
    ibm-spectrum-scale-csi   2.11.0    True
    [OCP]# oc describe pod | grep quay
    Image:         quay.io/hemalatha_gajendran/driver_shallowcopy_withoutfileset
    Image ID:      quay.io/hemalatha_gajendran/driver_shallowcopy_withoutfileset@sha256:8f1d9b7d5c80ca2b7c173584ca97d2587143f8e84d5c7bfa48d3618e43e9119b
    Image:         quay.io/hemalatha_gajendran/driver_shallowcopy_withoutfileset
    Image ID:      quay.io/hemalatha_gajendran/driver_shallowcopy_withoutfileset@sha256:8f1d9b7d5c80ca2b7c173584ca97d2587143f8e84d5c7bfa48d3618e43e9119b
    Image:         quay.io/hemalatha_gajendran/driver_shallowcopy_withoutfileset
    Image ID:      quay.io/hemalatha_gajendran/driver_shallowcopy_withoutfileset@sha256:8f1d9b7d5c80ca2b7c173584ca97d2587143f8e84d5c7bfa48d3618e43e9119b
    Image:         quay.io/ibm-spectrum-scale-dev/ibm-spectrum-scale-csi-operator@sha256:18264e0c9c112856bc2744f7f971a4b60ecb24de57e46af4d35456dcdf8e3cbf
    Image ID:      quay.io/ibm-spectrum-scale-dev/ibm-spectrum-scale-csi-operator@sha256:18264e0c9c112856bc2744f7f971a4b60ecb24de57e46af4d35456dcdf8e3cbf
      CSI_DRIVER_IMAGE:          quay.io/hemalatha_gajendran/driver_shallowcopy_withoutfileset
  2. Create independent pvc of version 1 as following :
    
    apiVersion: v1
    kind: Pod
    metadata:
    name: csi-scale-fsetdemo-pod-1
    labels:
    app: nginx
    spec:
    containers:
    - name: web-server
     image: nginx:1.22.0
     volumeMounts:
       - name: mypvc
         mountPath: /usr/share/nginx/html/scale
     ports:
     - containerPort: 80
    volumes:
    - name: mypvc
     persistentVolumeClaim:
       claimName: scale-pvc-1
       readOnly: false

apiVersion: v1 kind: PersistentVolumeClaim metadata: name: scale-pvc-1 spec: accessModes:


apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ibm-spectrum-scale-csi provisioner: spectrumscale.csi.ibm.com parameters: volBackendFs: "fs0" reclaimPolicy: Delete

[OCP]# oc apply -f apply.yaml pod/csi-scale-fsetdemo-pod-1 created persistentvolumeclaim/scale-pvc-1 created storageclass.storage.k8s.io/ibm-spectrum-scale-csi created

3. Write data inside volume and take snapshot of the same:

[OCP]# oc get pods NAME READY STATUS RESTARTS AGE csi-scale-fsetdemo-pod-1 1/1 Running 0 86s [OCP]# oc get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE scale-pvc-1 Bound pvc-4afa38aa-0b27-4b3a-a8f1-3a5baf4c27e7 1Gi RWX ibm-spectrum-scale-csi 88s [OCP]# oc exec -it csi-scale-fsetdemo-pod-1 -- touch /usr/share/nginx/html/scale/test{1..5} [OCP]# oc exec -it csi-scale-fsetdemo-pod-1 -- ls /usr/share/nginx/html/scale test1 test2 test3 test4 test5 [OCP]# cat snapshot.yaml apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: ibm-spectrum-scale-snapshot spec: volumeSnapshotClassName: ibm-spectrum-scale-snapshotclass source: persistentVolumeClaimName: scale-pvc-1

apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: ibm-spectrum-scale-snapshotclass driver: spectrumscale.csi.ibm.com parameters: snapWindow: "30" #Optional : Time in minutes (default=30) deletionPolicy: Delete [OCP]# oc apply -f snapshot.yaml volumesnapshot.snapshot.storage.k8s.io/ibm-spectrum-scale-snapshot created volumesnapshotclass.snapshot.storage.k8s.io/ibm-spectrum-scale-snapshotclass created [OCP]# oc get vs NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE ibm-spectrum-scale-snapshot true scale-pvc-1 1Gi ibm-spectrum-scale-snapshotclass snapcontent-50fe2ef6-4821-4dd5-94e1-e0e2695ee5d6 2m14s 2m25s

4. Create shallow copy using the version 2 volume :

[OCP]# cat shallowCopy.yaml apiVersion: v1 kind: Pod metadata: name: csi-scale-fsetdemo-pod-2 labels: app: nginx spec: containers:


apiVersion: v1 kind: PersistentVolumeClaim metadata: name: scale-advance-pvc-1 spec: accessModes:


apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ibm-spectrum-scale-csi-advance provisioner: spectrumscale.csi.ibm.com parameters: volBackendFs: "fs0" version: "2" reclaimPolicy: Delete

[OCP]# oc apply -f shallowCopy.yaml pod/csi-scale-fsetdemo-pod-2 created persistentvolumeclaim/scale-advance-pvc-1 created storageclass.storage.k8s.io/ibm-spectrum-scale-csi-advance created [OCP]#


5. Check the description of the shallow copy volume 

[OCP]# oc get pvc -w NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE scale-advance-pvc-1 Pending ibm-spectrum-scale-csi-advance 3s scale-pvc-1 Bound pvc-4afa38aa-0b27-4b3a-a8f1-3a5baf4c27e7 1Gi RWX ibm-spectrum-scale-csi 38m

[OCP]# oc describe pvc scale-advance-pvc-1 Name: scale-advance-pvc-1 Namespace: ibm-spectrum-scale-csi StorageClass: ibm-spectrum-scale-csi-advance Status: Pending Volume: Labels: Annotations: volume.beta.kubernetes.io/storage-provisioner: spectrumscale.csi.ibm.com volume.kubernetes.io/storage-provisioner: spectrumscale.csi.ibm.com Finalizers: [kubernetes.io/pvc-protection] Capacity: Access Modes: VolumeMode: Filesystem DataSource: APIGroup: snapshot.storage.k8s.io Kind: VolumeSnapshot Name: ibm-spectrum-scale-snapshot Used By: csi-scale-fsetdemo-pod-2 Events: Type Reason Age From Message


Warning ProvisioningFailed 47s persistentvolume-controller storageclass.storage.k8s.io "ibm-spectrum-scale-csi-advance" not found Warning ProvisioningFailed 14s (x3 over 39s) spectrumscale.csi.ibm.com_ibm-spectrum-scale-csi-provisioner-765d779f6b-gjkhc_b983f2f8-f0f3-4464-a094-f633e7391e29 failed to provision volume with StorageClass "ibm-spectrum-scale-csi-advance": rpc error: code = Internal desc = CreateVolume ValidateShallowCopyVolume failed Normal Provisioning 10s (x4 over 46s) spectrumscale.csi.ibm.com_ibm-spectrum-scale-csi-provisioner-765d779f6b-gjkhc_b983f2f8-f0f3-4464-a094-f633e7391e29 External provisioner is provisioning volume for claim "ibm-spectrum-scale-csi/scale-advance-pvc-1" Normal ExternalProvisioning 1s (x5 over 46s) persistentvolume-controller waiting for a volume to be created, either by external provisioner "spectrumscale.csi.ibm.com" or manually created by system administrator



## Expected behavior:
Version 2 shallow copy should be created from version 1 independent pvc as source 

## Logs 
/scale-csi/D.1077
csisnap.tar.gz
hemalathagajendran commented 9 months ago

Image: quay.io/hemalatha_gajendran/driver_shallowcopy_validation:latest

saurabhwani5 commented 9 months ago

issue is fixed , we have added the validation where only source volume version 1 to version 1 shallow copy creation is possible where other than that following error message is shown

 'message': 'failed to provision volume with StorageClass '
            '"restore-sc-nuimnaz": rpc error: code = Internal desc = '
            'CreateVolume ValidateShallowCopyVolume failed',

Thanks @hemalathagajendran for fix !!