-
Notifications
You must be signed in to change notification settings - Fork 377
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Snapshotter uses ListSnapshots on drivers which do not advertise it. #132
Comments
This affects release-0.4 and later. |
This looks like the same issue as #108? |
Yes. |
This only affects statically provisioned volume snapshots. For dynamically provisioned snapshots, we use CreateSnapshot to get the status. For statically provisioned snapshots, we cannot call CreateSnapshot because it was pre-provisioned, the only way to verify its status is to call ListSnapshots with a snapshot_id to get its status. I looked at the code in PV controller to see how it handles statically provisioned volumes. Looks like it does not verify whether the volume exists or not on the storage system and just assumes it is there. It directly updates volume phase to "VolumeAvailable": I think we can use similar approach for statically provisioned volume snapshots. We need to document that the existence of the snapshots will not be verified by the snapshot controller and it is the responsibility of the admin who statically provisions the snapshots to make sure the snapshot id is correct. For drivers that have implemented ListSnapshots, we can verify the status of the snapshot. The information we are getting out of GetSnapshotStatus (ListSnapshots with snapshot_id) is as follows:
We can directly set ReadyToUse to True for drivers that do not support ListSnapshots. For drivers that do support ListSnapshots, we can get it from the driver. |
Actually ListSnapshots was used to check whether snapshot is ready to use when the snapshot CRD was introduced in v0.4.0, for both dynamic and static binding (regardless of whether ListSnapshots is supported by the driver or not). In v1.0.1, there was a fix to use CreateSnapshot to replace ListSnapshots in order to support CSI spec 1.0 changes (c01fb64). That fix allowed dynamic binding to use CreateSnapshot to replace ListSnapshots, however, it broke static binding. This above bug in v1.0.1 was fixed by #98 in v1.1.0, but it calls ListSnapshots again because CreateSnapshot is not called for static binding. To fix this, we should check whether ListSnapshots is supported by the driver. If it is supported, use ListSnapshots to validate snapshot's status. If it is not supported, do not call ListSnapshots and assume snapshot ID provided by admin is valid (same as PV controller's logic). |
In the CSI spec, ListSnapshots is optional, but we recommend drivers that need to upload snapshot to implement ListSnapshots function because it could be a time consuming process for upload to complete and for the snapshot to become ReadyToUse. |
Working on this issue now, will open a PR when ready. |
7bc70e5 Merge pull request kubernetes-csi#129 from pohly/squash-documentation e0b02e7 README.md: document usage of --squash 316cb95 Merge pull request kubernetes-csi#132 from yiyang5055/bugfix/boilerplate 26e2ab1 fix: default boilerplate path 1add8c1 Merge pull request kubernetes-csi#133 from pohly/kubernetes-1.20-tag 3e811d6 prow.sh: fix "on-master" prow jobs git-subtree-dir: release-tools git-subtree-split: 7bc70e5
bc0504a Merge pull request kubernetes-csi#140 from jsafrane/remove-unused-k8s-libs 5b1de1a go-get-kubernetes.sh: remove unused k8s libs 49b4269 Merge pull request kubernetes-csi#120 from pohly/add-kubernetes-release a1e1127 Merge pull request kubernetes-csi#139 from pohly/kind-for-kubernetes-latest 1c0fb09 prow.sh: use KinD main for latest Kubernetes 1d77cfc Merge pull request kubernetes-csi#138 from pohly/kind-update-0.10 bff2fb7 prow.sh: KinD 0.10.0 95eac33 Merge pull request kubernetes-csi#137 from pohly/fix-go-version-check 437e431 verify-go-version.sh: fix check after removal of travis.yml 1748b16 Merge pull request kubernetes-csi#136 from pohly/go-1.16 ec844ea remove travis.yml, Go 1.16 df76aba Merge pull request kubernetes-csi#134 from andyzhangx/add-build-arg e314a56 add build-arg ARCH for building multi-arch images, e.g. ARG ARCH FROM k8s.gcr.io/build-image/debian-base-${ARCH}:v2.1.3 7bc70e5 Merge pull request kubernetes-csi#129 from pohly/squash-documentation e0b02e7 README.md: document usage of --squash 316cb95 Merge pull request kubernetes-csi#132 from yiyang5055/bugfix/boilerplate 26e2ab1 fix: default boilerplate path 1add8c1 Merge pull request kubernetes-csi#133 from pohly/kubernetes-1.20-tag 3e811d6 prow.sh: fix "on-master" prow jobs 1d60e77 Merge pull request kubernetes-csi#131 from pohly/kubernetes-1.20-tag 9f10459 prow.sh: support building Kubernetes for a specific version f7e7ee4 docs: steps for adding testing against new Kubernetes release fe1f284 Merge pull request kubernetes-csi#121 from kvaps/namespace-check 8fdf0f7 Merge pull request kubernetes-csi#128 from fengzixu/master 1c94220 fix: fix a bug of csi-sanity a4c41e6 Merge pull request kubernetes-csi#127 from pohly/fix-boilerplate ece0f50 check namespace for snapshot-controller dbd8967 verify-boilerplate.sh: fix path to script 9289fd1 Merge pull request kubernetes-csi#125 from sachinkumarsingh092/optional-spelling-boilerplate-checks ad29307 Make the spelling and boilerplate checks optional 5f06d02 Merge pull request kubernetes-csi#124 from sachinkumarsingh092/fix-spellcheck-boilerplate-tests 48186eb Fix spelling and boilerplate errors 71690af Merge pull request kubernetes-csi#122 from sachinkumarsingh092/include-spellcheck-boilerplate-tests 981be3f Adding spelling and boilerplate checks. 2bb7525 Merge pull request kubernetes-csi#117 from fengzixu/master 4ab8b15 use the tag to replace commit of csi-test 5d74e45 change the csi-test import path to v4 7dcd0a9 upgrade csi-test to v4.0.2 git-subtree-dir: release-tools git-subtree-split: bc0504a
fix: default boilerplate path
…ncy-openshift-4.16-csi-snapshot-validation-webhook OCPBUGS-24996: Updating ose-csi-snapshot-validation-webhook-container image to be consistent with ART
Snaphotter uses a function called GetSnapshotStatus() to do the binding from a VolumeSnapshot to a VolumeSnapshotContent. GetSnapshotStatus() then uses the csi.ListSnapshot() call even when the driver does not support it. Therefore this causes an error and the binding does not occur.
The text was updated successfully, but these errors were encountered: