Skip to content
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

Closed
lpabon opened this issue Jun 28, 2019 · 7 comments · Fixed by #138
Closed

Snapshotter uses ListSnapshots on drivers which do not advertise it. #132

lpabon opened this issue Jun 28, 2019 · 7 comments · Fixed by #138
Assignees
Labels
kind/bug Categorizes issue or PR as related to a bug.

Comments

@lpabon
Copy link
Member

lpabon commented Jun 28, 2019

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.

@lpabon
Copy link
Member Author

lpabon commented Jun 28, 2019

This affects release-0.4 and later.

@lpabon lpabon added the kind/bug Categorizes issue or PR as related to a bug. label Jun 28, 2019
@lpabon lpabon self-assigned this Jun 28, 2019
@msau42
Copy link
Collaborator

msau42 commented Jul 1, 2019

This looks like the same issue as #108?

@xing-yang
Copy link
Collaborator

Yes.

@xing-yang
Copy link
Collaborator

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":
https://github.com/kubernetes/kubernetes/blob/v1.15.0/pkg/controller/volume/persistentvolume/pv_controller.go#L524-L528

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:

  • ReadyToUse
  • CreationTime
  • RestoreSize

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.
Similarly for drivers that do not support ListSnapshots, we will not set CreationTime and RestoreSize. These two parameters are optional.

@xing-yang
Copy link
Collaborator

xing-yang commented Jul 5, 2019

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).

@xing-yang
Copy link
Collaborator

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.

@ggriffiths
Copy link
Member

Working on this issue now, will open a PR when ready.

pohly added a commit to pohly/external-snapshotter that referenced this issue Feb 3, 2021
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
ggriffiths pushed a commit to ggriffiths/external-snapshotter that referenced this issue Apr 15, 2021
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
xing-yang pushed a commit to xing-yang/external-snapshotter that referenced this issue Jul 26, 2021
dobsonj pushed a commit to dobsonj/external-snapshotter that referenced this issue Dec 13, 2023
…ncy-openshift-4.16-csi-snapshot-validation-webhook

OCPBUGS-24996: Updating ose-csi-snapshot-validation-webhook-container image to be consistent with ART
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/bug Categorizes issue or PR as related to a bug.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants