mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-06-14 10:53:34 +00:00
rbd: consolidate snapshot flatten logic in PrepareVolumeForSnapshot()
This commit consolidates flatten logic checks for cloneDepth and snapshotLimit in PrepareVolumeForSnapshot. This allows the function to be called for both CreateSnapshot and CreateVolumeGroupSnapshot. Clone Depth check and flattening of grand parent image now occurs before creation of snapshot starts. This aligns better with how PVC-PVC clone and PVC-restore process occurs currently. Flattening the grandparent image once prevents flattening of every newly created snapshot. Snapshot in above para refers to k8s VolumeSnapshot (which is backed by a rbd image). Signed-off-by: Rakshith R <rar@redhat.com>
This commit is contained in:
@ -37,6 +37,8 @@ import (
|
||||
// group snapshot and remove all images from the group again. This leaves the
|
||||
// group and its snapshot around, the group snapshot can be inspected to list
|
||||
// the snapshots of the images.
|
||||
//
|
||||
//nolint:gocyclo,cyclop // TODO: reduce complexity.
|
||||
func (cs *ControllerServer) CreateVolumeGroupSnapshot(
|
||||
ctx context.Context,
|
||||
req *csi.CreateVolumeGroupSnapshotRequest,
|
||||
@ -130,6 +132,27 @@ func (cs *ControllerServer) CreateVolumeGroupSnapshot(
|
||||
"failed to get existing one with name %q: %v", vgsName, err)
|
||||
}
|
||||
|
||||
creds, err := util.NewUserCredentials(req.GetSecrets())
|
||||
if err != nil {
|
||||
return nil, status.Error(codes.Internal, err.Error())
|
||||
}
|
||||
defer creds.DeleteCredentials()
|
||||
|
||||
errList := make([]error, 0)
|
||||
for _, volume := range volumes {
|
||||
err = volume.PrepareVolumeForSnapshot(ctx, creds)
|
||||
if err != nil {
|
||||
errList = append(errList, err)
|
||||
}
|
||||
}
|
||||
if len(errList) > 0 {
|
||||
// FIXME: we should probably choose a error code that has more priority.
|
||||
return nil, status.Errorf(
|
||||
status.Code(errList[0]),
|
||||
"failed to prepare volumes for snapshot: %v",
|
||||
errList)
|
||||
}
|
||||
|
||||
// create a temporary VolumeGroup with a different name
|
||||
vg, err = mgr.CreateVolumeGroup(ctx, vgName)
|
||||
if err != nil {
|
||||
|
Reference in New Issue
Block a user