From c424e68cef728a38c29e92c6631a69dfc263018b Mon Sep 17 00:00:00 2001 From: Hakan Memisoglu Date: Fri, 1 Mar 2019 14:56:22 -0800 Subject: [PATCH] Fix for pre-bound snapshot empty source error --- pkg/controller/snapshot_controller.go | 30 +++++++++++++++++++-------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/pkg/controller/snapshot_controller.go b/pkg/controller/snapshot_controller.go index bcb7bbbf..e8a34b3d 100644 --- a/pkg/controller/snapshot_controller.go +++ b/pkg/controller/snapshot_controller.go @@ -21,6 +21,7 @@ import ( "strings" "time" + "github.com/golang/glog" crdv1 "github.com/kubernetes-csi/external-snapshotter/pkg/apis/volumesnapshot/v1alpha1" "k8s.io/api/core/v1" storagev1 "k8s.io/api/storage/v1" @@ -560,16 +561,27 @@ func (ctrl *csiSnapshotController) checkandUpdateBoundSnapshotStatusOperation(sn var timestamp int64 var size int64 var readyToUse = false - class, volume, _, snapshotterCredentials, err := ctrl.getCreateSnapshotInput(snapshot) - if err != nil { - return nil, fmt.Errorf("failed to get input parameters to create snapshot %s: %q", snapshot.Name, err) + + if snapshot.Spec.Source == nil { + klog.V(5).Infof("checkandUpdateBoundSnapshotStatusOperation: snapshot [%s] is pre-bound to content [%s]", snapshot.Name, content.Name) + readyToUse, timestamp, size, err = ctrl.handler.GetSnapshotStatus(content) + if err != nil { + return nil, err + } + } else { + class, volume, _, snapshotterCredentials, err := ctrl.getCreateSnapshotInput(snapshot) + if err != nil { + return nil, fmt.Errorf("failed to get input parameters to create snapshot %s: %q", snapshot.Name, err) + } + var driverName string + var snapshotID string + driverName, snapshotID, timestamp, size, readyToUse, err = ctrl.handler.CreateSnapshot(snapshot, volume, class.Parameters, snapshotterCredentials) + if err != nil { + glog.Errorf("checkandUpdateBoundSnapshotStatusOperation: failed to call create snapshot to check whether the snapshot is ready to use %q", err) + return nil, err + } + klog.V(5).Infof("checkandUpdateBoundSnapshotStatusOperation: driver %s, snapshotId %s, timestamp %d, size %d, readyToUse %t", driverName, snapshotID, timestamp, size, readyToUse) } - driverName, snapshotID, timestamp, size, readyToUse, err := ctrl.handler.CreateSnapshot(snapshot, volume, class.Parameters, snapshotterCredentials) - if err != nil { - klog.Errorf("checkandUpdateBoundSnapshotStatusOperation: failed to call create snapshot to check whether the snapshot is ready to use %q", err) - return nil, err - } - klog.V(5).Infof("checkandUpdateBoundSnapshotStatusOperation: driver %s, snapshotId %s, timestamp %d, size %d, readyToUse %t", driverName, snapshotID, timestamp, size, readyToUse) if timestamp == 0 { timestamp = time.Now().UnixNano()