mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-01-18 02:39:30 +00:00
Merge pull request #335 from red-hat-storage/sync_ds--devel
Syncing latest changes from devel for ceph-csi
This commit is contained in:
commit
80c56bc413
@ -245,7 +245,7 @@ func ReserveVolumeGroup(
|
|||||||
defer j.Destroy()
|
defer j.Destroy()
|
||||||
|
|
||||||
groupUUID, vgsi.FsVolumeGroupSnapshotName, err = j.ReserveName(
|
groupUUID, vgsi.FsVolumeGroupSnapshotName, err = j.ReserveName(
|
||||||
ctx, volOptions.MetadataPool, util.InvalidPoolID, volOptions.RequestName, volOptions.NamePrefix)
|
ctx, volOptions.MetadataPool, volOptions.RequestName, volOptions.NamePrefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,7 @@ func (rscs *ReclaimSpaceControllerServer) ControllerReclaimSpace(
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Aborted, "failed to find volume with ID %q: %s", volumeID, err.Error())
|
return nil, status.Errorf(codes.Aborted, "failed to find volume with ID %q: %s", volumeID, err.Error())
|
||||||
}
|
}
|
||||||
defer rbdVol.Destroy()
|
defer rbdVol.Destroy(ctx)
|
||||||
|
|
||||||
err = rbdVol.Sparsify()
|
err = rbdVol.Sparsify()
|
||||||
if errors.Is(err, rbdutil.ErrImageInUse) {
|
if errors.Is(err, rbdutil.ErrImageInUse) {
|
||||||
|
@ -273,7 +273,7 @@ func (rs *ReplicationServer) EnableVolumeReplication(ctx context.Context,
|
|||||||
rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets())
|
rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets())
|
||||||
defer func() {
|
defer func() {
|
||||||
if rbdVol != nil {
|
if rbdVol != nil {
|
||||||
rbdVol.Destroy()
|
rbdVol.Destroy(ctx)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -350,7 +350,7 @@ func (rs *ReplicationServer) DisableVolumeReplication(ctx context.Context,
|
|||||||
rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets())
|
rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets())
|
||||||
defer func() {
|
defer func() {
|
||||||
if rbdVol != nil {
|
if rbdVol != nil {
|
||||||
rbdVol.Destroy()
|
rbdVol.Destroy(ctx)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -425,7 +425,7 @@ func (rs *ReplicationServer) PromoteVolume(ctx context.Context,
|
|||||||
rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets())
|
rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets())
|
||||||
defer func() {
|
defer func() {
|
||||||
if rbdVol != nil {
|
if rbdVol != nil {
|
||||||
rbdVol.Destroy()
|
rbdVol.Destroy(ctx)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -525,7 +525,7 @@ func (rs *ReplicationServer) DemoteVolume(ctx context.Context,
|
|||||||
rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets())
|
rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets())
|
||||||
defer func() {
|
defer func() {
|
||||||
if rbdVol != nil {
|
if rbdVol != nil {
|
||||||
rbdVol.Destroy()
|
rbdVol.Destroy(ctx)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -642,7 +642,7 @@ func (rs *ReplicationServer) ResyncVolume(ctx context.Context,
|
|||||||
rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets())
|
rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets())
|
||||||
defer func() {
|
defer func() {
|
||||||
if rbdVol != nil {
|
if rbdVol != nil {
|
||||||
rbdVol.Destroy()
|
rbdVol.Destroy(ctx)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -856,7 +856,7 @@ func (rs *ReplicationServer) GetVolumeReplicationInfo(ctx context.Context,
|
|||||||
rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets())
|
rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets())
|
||||||
defer func() {
|
defer func() {
|
||||||
if rbdVol != nil {
|
if rbdVol != nil {
|
||||||
rbdVol.Destroy()
|
rbdVol.Destroy(ctx)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -51,8 +51,7 @@ type VolumeGroupJournal interface {
|
|||||||
objectUUID string) (*VolumeGroupAttributes, error)
|
objectUUID string) (*VolumeGroupAttributes, error)
|
||||||
ReserveName(
|
ReserveName(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
journalPool string,
|
journalPool,
|
||||||
journalPoolID int64,
|
|
||||||
reqName,
|
reqName,
|
||||||
namePrefix string) (string, string, error)
|
namePrefix string) (string, string, error)
|
||||||
// AddVolumesMapping adds a volumeMap map which contains volumeID's and its
|
// AddVolumesMapping adds a volumeMap map which contains volumeID's and its
|
||||||
@ -296,7 +295,6 @@ held, to prevent parallel operations from modifying the state of the omaps for t
|
|||||||
|
|
||||||
Input arguments:
|
Input arguments:
|
||||||
- journalPool: Pool where the CSI journal is stored
|
- journalPool: Pool where the CSI journal is stored
|
||||||
- journalPoolID: pool ID of the journalPool
|
|
||||||
- reqName: Name of the volumeGroupSnapshot request received
|
- reqName: Name of the volumeGroupSnapshot request received
|
||||||
- namePrefix: Prefix to use when generating the volumeGroupName name (suffix is an auto-generated UUID)
|
- namePrefix: Prefix to use when generating the volumeGroupName name (suffix is an auto-generated UUID)
|
||||||
|
|
||||||
@ -306,8 +304,7 @@ Return values:
|
|||||||
- error: non-nil in case of any errors
|
- error: non-nil in case of any errors
|
||||||
*/
|
*/
|
||||||
func (vgjc *VolumeGroupJournalConnection) ReserveName(ctx context.Context,
|
func (vgjc *VolumeGroupJournalConnection) ReserveName(ctx context.Context,
|
||||||
journalPool string, journalPoolID int64,
|
journalPool, reqName, namePrefix string,
|
||||||
reqName, namePrefix string,
|
|
||||||
) (string, string, error) {
|
) (string, string, error) {
|
||||||
cj := vgjc.config
|
cj := vgjc.config
|
||||||
|
|
||||||
|
@ -46,10 +46,10 @@ import (
|
|||||||
func (rv *rbdVolume) checkCloneImage(ctx context.Context, parentVol *rbdVolume) (bool, error) {
|
func (rv *rbdVolume) checkCloneImage(ctx context.Context, parentVol *rbdVolume) (bool, error) {
|
||||||
// generate temp cloned volume
|
// generate temp cloned volume
|
||||||
tempClone := rv.generateTempClone()
|
tempClone := rv.generateTempClone()
|
||||||
defer tempClone.Destroy()
|
defer tempClone.Destroy(ctx)
|
||||||
|
|
||||||
snap := &rbdSnapshot{}
|
snap := &rbdSnapshot{}
|
||||||
defer snap.Destroy()
|
defer snap.Destroy(ctx)
|
||||||
snap.RbdSnapName = rv.RbdImageName
|
snap.RbdSnapName = rv.RbdImageName
|
||||||
snap.Pool = rv.Pool
|
snap.Pool = rv.Pool
|
||||||
|
|
||||||
@ -141,7 +141,7 @@ func (rv *rbdVolume) createCloneFromImage(ctx context.Context, parentVol *rbdVol
|
|||||||
defer func() {
|
defer func() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.DebugLog(ctx, "Removing clone image %q", rv)
|
log.DebugLog(ctx, "Removing clone image %q", rv)
|
||||||
errDefer := rv.deleteImage(ctx)
|
errDefer := rv.Delete(ctx)
|
||||||
if errDefer != nil {
|
if errDefer != nil {
|
||||||
log.ErrorLog(ctx, "failed to delete clone image %q: %v", rv, errDefer)
|
log.ErrorLog(ctx, "failed to delete clone image %q: %v", rv, errDefer)
|
||||||
}
|
}
|
||||||
@ -183,7 +183,7 @@ func (rv *rbdVolume) doSnapClone(ctx context.Context, parentVol *rbdVolume) erro
|
|||||||
|
|
||||||
// generate temp cloned volume
|
// generate temp cloned volume
|
||||||
tempClone := rv.generateTempClone()
|
tempClone := rv.generateTempClone()
|
||||||
defer tempClone.Destroy()
|
defer tempClone.Destroy(ctx)
|
||||||
|
|
||||||
// snapshot name is same as temporary cloned image, This helps to
|
// snapshot name is same as temporary cloned image, This helps to
|
||||||
// flatten the temporary cloned images as we cannot have more than 510
|
// flatten the temporary cloned images as we cannot have more than 510
|
||||||
|
@ -335,7 +335,7 @@ func (cs *ControllerServer) CreateVolume(
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer rbdVol.Destroy()
|
defer rbdVol.Destroy(ctx)
|
||||||
// Existence and conflict checks
|
// Existence and conflict checks
|
||||||
if acquired := cs.VolumeLocks.TryAcquire(req.GetName()); !acquired {
|
if acquired := cs.VolumeLocks.TryAcquire(req.GetName()); !acquired {
|
||||||
log.ErrorLog(ctx, util.VolumeOperationAlreadyExistsFmt, req.GetName())
|
log.ErrorLog(ctx, util.VolumeOperationAlreadyExistsFmt, req.GetName())
|
||||||
@ -349,10 +349,10 @@ func (cs *ControllerServer) CreateVolume(
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if parentVol != nil {
|
if parentVol != nil {
|
||||||
defer parentVol.Destroy()
|
defer parentVol.Destroy(ctx)
|
||||||
}
|
}
|
||||||
if rbdSnap != nil {
|
if rbdSnap != nil {
|
||||||
defer rbdSnap.Destroy()
|
defer rbdSnap.Destroy(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = updateTopologyConstraints(rbdVol, rbdSnap)
|
err = updateTopologyConstraints(rbdVol, rbdSnap)
|
||||||
@ -403,7 +403,7 @@ func (cs *ControllerServer) CreateVolume(
|
|||||||
metadata := k8s.GetVolumeMetadata(req.GetParameters())
|
metadata := k8s.GetVolumeMetadata(req.GetParameters())
|
||||||
err = rbdVol.setAllMetadata(metadata)
|
err = rbdVol.setAllMetadata(metadata)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if deleteErr := rbdVol.deleteImage(ctx); deleteErr != nil {
|
if deleteErr := rbdVol.Delete(ctx); deleteErr != nil {
|
||||||
log.ErrorLog(ctx, "failed to delete rbd image: %s with error: %v", rbdVol, deleteErr)
|
log.ErrorLog(ctx, "failed to delete rbd image: %s with error: %v", rbdVol, deleteErr)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -465,7 +465,7 @@ func flattenParentImage(
|
|||||||
// in case of any error call Destroy for cleanup.
|
// in case of any error call Destroy for cleanup.
|
||||||
defer func() {
|
defer func() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
rbdSnap.Destroy()
|
rbdSnap.Destroy(ctx)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -621,7 +621,7 @@ func checkFlatten(ctx context.Context, rbdVol *rbdVolume, cr *util.Credentials)
|
|||||||
if errors.Is(err, ErrFlattenInProgress) {
|
if errors.Is(err, ErrFlattenInProgress) {
|
||||||
return status.Error(codes.Aborted, err.Error())
|
return status.Error(codes.Aborted, err.Error())
|
||||||
}
|
}
|
||||||
if errDefer := rbdVol.deleteImage(ctx); errDefer != nil {
|
if errDefer := rbdVol.Delete(ctx); errDefer != nil {
|
||||||
log.ErrorLog(ctx, "failed to delete rbd image: %s with error: %v", rbdVol, errDefer)
|
log.ErrorLog(ctx, "failed to delete rbd image: %s with error: %v", rbdVol, errDefer)
|
||||||
|
|
||||||
return status.Error(codes.Internal, err.Error())
|
return status.Error(codes.Internal, err.Error())
|
||||||
@ -661,14 +661,14 @@ func (cs *ControllerServer) createVolumeFromSnapshot(
|
|||||||
|
|
||||||
return status.Error(codes.Internal, err.Error())
|
return status.Error(codes.Internal, err.Error())
|
||||||
}
|
}
|
||||||
defer rbdSnap.Destroy()
|
defer rbdSnap.Destroy(ctx)
|
||||||
|
|
||||||
// update parent name(rbd image name in snapshot)
|
// update parent name(rbd image name in snapshot)
|
||||||
rbdSnap.RbdImageName = rbdSnap.RbdSnapName
|
rbdSnap.RbdImageName = rbdSnap.RbdSnapName
|
||||||
parentVol := rbdSnap.toVolume()
|
parentVol := rbdSnap.toVolume()
|
||||||
// as we are operating on single cluster reuse the connection
|
// as we are operating on single cluster reuse the connection
|
||||||
parentVol.conn = rbdVol.conn.Copy()
|
parentVol.conn = rbdVol.conn.Copy()
|
||||||
defer parentVol.Destroy()
|
defer parentVol.Destroy(ctx)
|
||||||
|
|
||||||
// create clone image and delete snapshot
|
// create clone image and delete snapshot
|
||||||
err = rbdVol.cloneRbdImageFromSnapshot(ctx, rbdSnap, parentVol)
|
err = rbdVol.cloneRbdImageFromSnapshot(ctx, rbdSnap, parentVol)
|
||||||
@ -681,7 +681,7 @@ func (cs *ControllerServer) createVolumeFromSnapshot(
|
|||||||
defer func() {
|
defer func() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.DebugLog(ctx, "Removing clone image %q", rbdVol)
|
log.DebugLog(ctx, "Removing clone image %q", rbdVol)
|
||||||
errDefer := rbdVol.deleteImage(ctx)
|
errDefer := rbdVol.Delete(ctx)
|
||||||
if errDefer != nil {
|
if errDefer != nil {
|
||||||
log.ErrorLog(ctx, "failed to delete clone image %q: %v", rbdVol, errDefer)
|
log.ErrorLog(ctx, "failed to delete clone image %q: %v", rbdVol, errDefer)
|
||||||
}
|
}
|
||||||
@ -764,7 +764,7 @@ func (cs *ControllerServer) createBackingImage(
|
|||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if deleteErr := rbdVol.deleteImage(ctx); deleteErr != nil {
|
if deleteErr := rbdVol.Delete(ctx); deleteErr != nil {
|
||||||
log.ErrorLog(ctx, "failed to delete rbd image: %s with error: %v", rbdVol, deleteErr)
|
log.ErrorLog(ctx, "failed to delete rbd image: %s with error: %v", rbdVol, deleteErr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -944,7 +944,7 @@ func (cs *ControllerServer) DeleteVolume(
|
|||||||
rbdVol, err := GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets())
|
rbdVol, err := GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets())
|
||||||
defer func() {
|
defer func() {
|
||||||
if rbdVol != nil {
|
if rbdVol != nil {
|
||||||
rbdVol.Destroy()
|
rbdVol.Destroy(ctx)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -1029,7 +1029,7 @@ func cleanupRBDImage(ctx context.Context,
|
|||||||
|
|
||||||
// Deleting rbd image
|
// Deleting rbd image
|
||||||
log.DebugLog(ctx, "deleting image %s", rbdVol.RbdImageName)
|
log.DebugLog(ctx, "deleting image %s", rbdVol.RbdImageName)
|
||||||
if err = rbdVol.deleteImage(ctx); err != nil {
|
if err = rbdVol.Delete(ctx); err != nil {
|
||||||
log.ErrorLog(ctx, "failed to delete rbd image: %s with error: %v",
|
log.ErrorLog(ctx, "failed to delete rbd image: %s with error: %v",
|
||||||
rbdVol, err)
|
rbdVol, err)
|
||||||
|
|
||||||
@ -1094,7 +1094,7 @@ func (cs *ControllerServer) CreateSnapshot(
|
|||||||
rbdVol, err := GenVolFromVolID(ctx, req.GetSourceVolumeId(), cr, req.GetSecrets())
|
rbdVol, err := GenVolFromVolID(ctx, req.GetSourceVolumeId(), cr, req.GetSecrets())
|
||||||
defer func() {
|
defer func() {
|
||||||
if rbdVol != nil {
|
if rbdVol != nil {
|
||||||
rbdVol.Destroy()
|
rbdVol.Destroy(ctx)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -1188,7 +1188,7 @@ func (cs *ControllerServer) CreateSnapshot(
|
|||||||
defer func() {
|
defer func() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.DebugLog(ctx, "Removing clone image %q", rbdVol)
|
log.DebugLog(ctx, "Removing clone image %q", rbdVol)
|
||||||
errDefer := rbdVol.deleteImage(ctx)
|
errDefer := rbdVol.Delete(ctx)
|
||||||
if errDefer != nil {
|
if errDefer != nil {
|
||||||
log.ErrorLog(ctx, "failed to delete clone image %q: %v", rbdVol, errDefer)
|
log.ErrorLog(ctx, "failed to delete clone image %q: %v", rbdVol, errDefer)
|
||||||
}
|
}
|
||||||
@ -1237,7 +1237,7 @@ func cloneFromSnapshot(
|
|||||||
|
|
||||||
return nil, status.Errorf(codes.Internal, err.Error())
|
return nil, status.Errorf(codes.Internal, err.Error())
|
||||||
}
|
}
|
||||||
defer vol.Destroy()
|
defer vol.Destroy(ctx)
|
||||||
|
|
||||||
err = rbdVol.copyEncryptionConfig(ctx, &vol.rbdImage, false)
|
err = rbdVol.copyEncryptionConfig(ctx, &vol.rbdImage, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -1313,7 +1313,7 @@ func (cs *ControllerServer) doSnapshotClone(
|
|||||||
) (*rbdVolume, error) {
|
) (*rbdVolume, error) {
|
||||||
// generate cloned volume details from snapshot
|
// generate cloned volume details from snapshot
|
||||||
cloneRbd := rbdSnap.toVolume()
|
cloneRbd := rbdSnap.toVolume()
|
||||||
defer cloneRbd.Destroy()
|
defer cloneRbd.Destroy(ctx)
|
||||||
// add image feature for cloneRbd
|
// add image feature for cloneRbd
|
||||||
f := []string{librbd.FeatureNameLayering, librbd.FeatureNameDeepFlatten}
|
f := []string{librbd.FeatureNameLayering, librbd.FeatureNameDeepFlatten}
|
||||||
cloneRbd.ImageFeatureSet = librbd.FeatureSetFromNames(f)
|
cloneRbd.ImageFeatureSet = librbd.FeatureSetFromNames(f)
|
||||||
@ -1460,7 +1460,7 @@ func (cs *ControllerServer) DeleteSnapshot(
|
|||||||
|
|
||||||
return nil, status.Error(codes.Internal, err.Error())
|
return nil, status.Error(codes.Internal, err.Error())
|
||||||
}
|
}
|
||||||
defer rbdSnap.Destroy()
|
defer rbdSnap.Destroy(ctx)
|
||||||
|
|
||||||
// safeguard against parallel create or delete requests against the same
|
// safeguard against parallel create or delete requests against the same
|
||||||
// name
|
// name
|
||||||
@ -1480,7 +1480,7 @@ func (cs *ControllerServer) DeleteSnapshot(
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Error(codes.Internal, err.Error())
|
return nil, status.Error(codes.Internal, err.Error())
|
||||||
}
|
}
|
||||||
defer rbdVol.Destroy()
|
defer rbdVol.Destroy(ctx)
|
||||||
|
|
||||||
rbdVol.ImageID = rbdSnap.ImageID
|
rbdVol.ImageID = rbdSnap.ImageID
|
||||||
// update parent name to delete the snapshot
|
// update parent name to delete the snapshot
|
||||||
@ -1510,7 +1510,7 @@ func cleanUpImageAndSnapReservation(ctx context.Context, rbdSnap *rbdSnapshot, c
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return status.Error(codes.Internal, err.Error())
|
return status.Error(codes.Internal, err.Error())
|
||||||
}
|
}
|
||||||
defer rbdVol.Destroy()
|
defer rbdVol.Destroy(ctx)
|
||||||
|
|
||||||
err = rbdVol.openIoctx()
|
err = rbdVol.openIoctx()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -1584,7 +1584,7 @@ func (cs *ControllerServer) ControllerExpandVolume(
|
|||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer rbdVol.Destroy()
|
defer rbdVol.Destroy(ctx)
|
||||||
|
|
||||||
// NodeExpansion is needed for PersistentVolumes with,
|
// NodeExpansion is needed for PersistentVolumes with,
|
||||||
// 1. Filesystem VolumeMode with & without Encryption and
|
// 1. Filesystem VolumeMode with & without Encryption and
|
||||||
|
@ -81,8 +81,8 @@ func deleteMigratedVolume(ctx context.Context, parsedMigHandle *migrationVolID,
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer rv.Destroy()
|
defer rv.Destroy(ctx)
|
||||||
err = rv.deleteImage(ctx)
|
err = rv.Delete(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.ErrorLog(ctx, "failed to delete rbd image: %s, err: %v", rv, err)
|
log.ErrorLog(ctx, "failed to delete rbd image: %s, err: %v", rv, err)
|
||||||
}
|
}
|
||||||
|
@ -198,7 +198,7 @@ func (ns *NodeServer) populateRbdVol(
|
|||||||
} else {
|
} else {
|
||||||
rv, err = GenVolFromVolID(ctx, volID, cr, req.GetSecrets())
|
rv, err = GenVolFromVolID(ctx, volID, cr, req.GetSecrets())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
rv.Destroy()
|
rv.Destroy(ctx)
|
||||||
log.ErrorLog(ctx, "error generating volume %s: %v", volID, err)
|
log.ErrorLog(ctx, "error generating volume %s: %v", volID, err)
|
||||||
|
|
||||||
return nil, status.Errorf(codes.Internal, "error generating volume %s: %v", volID, err)
|
return nil, status.Errorf(codes.Internal, "error generating volume %s: %v", volID, err)
|
||||||
@ -221,7 +221,7 @@ func (ns *NodeServer) populateRbdVol(
|
|||||||
// in case of any error call Destroy for cleanup.
|
// in case of any error call Destroy for cleanup.
|
||||||
defer func() {
|
defer func() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
rv.Destroy()
|
rv.Destroy(ctx)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
// get the image details from the ceph cluster.
|
// get the image details from the ceph cluster.
|
||||||
@ -345,7 +345,7 @@ func (ns *NodeServer) NodeStageVolume(
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer rv.Destroy()
|
defer rv.Destroy(ctx)
|
||||||
|
|
||||||
rv.NetNamespaceFilePath, err = util.GetRBDNetNamespaceFilePath(util.CsiConfigFile, rv.ClusterID)
|
rv.NetNamespaceFilePath, err = util.GetRBDNetNamespaceFilePath(util.CsiConfigFile, rv.ClusterID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -163,7 +163,7 @@ func checkSnapCloneExists(
|
|||||||
}
|
}
|
||||||
|
|
||||||
vol := rbdSnap.toVolume()
|
vol := rbdSnap.toVolume()
|
||||||
defer vol.Destroy()
|
defer vol.Destroy(ctx)
|
||||||
err = vol.Connect(cr)
|
err = vol.Connect(cr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
|
@ -28,6 +28,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
types "github.com/ceph/ceph-csi/internal/rbd_types"
|
||||||
"github.com/ceph/ceph-csi/internal/util"
|
"github.com/ceph/ceph-csi/internal/util"
|
||||||
"github.com/ceph/ceph-csi/internal/util/log"
|
"github.com/ceph/ceph-csi/internal/util/log"
|
||||||
|
|
||||||
@ -150,6 +151,9 @@ type rbdImage struct {
|
|||||||
ParentInTrash bool
|
ParentInTrash bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check that rbdVolume implements the types.Volume interface.
|
||||||
|
var _ types.Volume = &rbdVolume{}
|
||||||
|
|
||||||
// rbdVolume represents a CSI volume and its RBD image specifics.
|
// rbdVolume represents a CSI volume and its RBD image specifics.
|
||||||
type rbdVolume struct {
|
type rbdVolume struct {
|
||||||
rbdImage
|
rbdImage
|
||||||
@ -385,7 +389,7 @@ func (ri *rbdImage) Connect(cr *util.Credentials) error {
|
|||||||
|
|
||||||
// Destroy cleans up the rbdVolume and closes the connection to the Ceph
|
// Destroy cleans up the rbdVolume and closes the connection to the Ceph
|
||||||
// cluster in case one was setup.
|
// cluster in case one was setup.
|
||||||
func (ri *rbdImage) Destroy() {
|
func (ri *rbdImage) Destroy(ctx context.Context) {
|
||||||
if ri.ioctx != nil {
|
if ri.ioctx != nil {
|
||||||
ri.ioctx.Destroy()
|
ri.ioctx.Destroy()
|
||||||
}
|
}
|
||||||
@ -418,6 +422,11 @@ func (rs *rbdSnapshot) String() string {
|
|||||||
return fmt.Sprintf("%s/%s@%s", rs.Pool, rs.RbdImageName, rs.RbdSnapName)
|
return fmt.Sprintf("%s/%s@%s", rs.Pool, rs.RbdImageName, rs.RbdSnapName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetID returns the CSI volume handle of the image.
|
||||||
|
func (ri *rbdImage) GetID(ctx context.Context) (string, error) {
|
||||||
|
return ri.VolID, nil
|
||||||
|
}
|
||||||
|
|
||||||
// createImage creates a new ceph image with provision and volume options.
|
// createImage creates a new ceph image with provision and volume options.
|
||||||
func createImage(ctx context.Context, pOpts *rbdVolume, cr *util.Credentials) error {
|
func createImage(ctx context.Context, pOpts *rbdVolume, cr *util.Credentials) error {
|
||||||
volSzMiB := fmt.Sprintf("%dM", util.RoundOffVolSize(pOpts.VolSize))
|
volSzMiB := fmt.Sprintf("%dM", util.RoundOffVolSize(pOpts.VolSize))
|
||||||
@ -627,8 +636,8 @@ func (ri *rbdImage) ensureImageCleanup(ctx context.Context) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// deleteImage deletes a ceph image with provision and volume options.
|
// Delete deletes a ceph image with provision and volume options.
|
||||||
func (ri *rbdImage) deleteImage(ctx context.Context) error {
|
func (ri *rbdImage) Delete(ctx context.Context) error {
|
||||||
image := ri.RbdImageName
|
image := ri.RbdImageName
|
||||||
|
|
||||||
log.DebugLog(ctx, "rbd: delete %s using mon %s, pool %s", image, ri.Monitors, ri.Pool)
|
log.DebugLog(ctx, "rbd: delete %s using mon %s, pool %s", image, ri.Monitors, ri.Pool)
|
||||||
@ -706,7 +715,7 @@ func (ri *rbdImage) trashRemoveImage(ctx context.Context) error {
|
|||||||
// DeleteTempImage deletes the temporary image created for volume datasource.
|
// DeleteTempImage deletes the temporary image created for volume datasource.
|
||||||
func (rv *rbdVolume) DeleteTempImage(ctx context.Context) error {
|
func (rv *rbdVolume) DeleteTempImage(ctx context.Context) error {
|
||||||
tempClone := rv.generateTempClone()
|
tempClone := rv.generateTempClone()
|
||||||
err := tempClone.deleteImage(ctx)
|
err := tempClone.Delete(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, ErrImageNotFound) {
|
if errors.Is(err, ErrImageNotFound) {
|
||||||
return tempClone.ensureImageCleanup(ctx)
|
return tempClone.ensureImageCleanup(ctx)
|
||||||
@ -777,7 +786,7 @@ func flattenClonedRbdImages(
|
|||||||
rv.Pool = pool
|
rv.Pool = pool
|
||||||
rv.RbdImageName = rbdImageName
|
rv.RbdImageName = rbdImageName
|
||||||
|
|
||||||
defer rv.Destroy()
|
defer rv.Destroy(ctx)
|
||||||
err := rv.Connect(cr)
|
err := rv.Connect(cr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.ErrorLog(ctx, "failed to open connection %s; err %v", rv, err)
|
log.ErrorLog(ctx, "failed to open connection %s; err %v", rv, err)
|
||||||
@ -1045,7 +1054,7 @@ func genSnapFromSnapID(
|
|||||||
}
|
}
|
||||||
defer func() {
|
defer func() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
rbdSnap.Destroy()
|
rbdSnap.Destroy(ctx)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -1064,7 +1073,7 @@ func genSnapFromSnapID(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = updateSnapshotDetails(rbdSnap)
|
err = updateSnapshotDetails(ctx, rbdSnap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return rbdSnap, fmt.Errorf("failed to update snapshot details for %q: %w", rbdSnap, err)
|
return rbdSnap, fmt.Errorf("failed to update snapshot details for %q: %w", rbdSnap, err)
|
||||||
}
|
}
|
||||||
@ -1074,13 +1083,13 @@ func genSnapFromSnapID(
|
|||||||
|
|
||||||
// updateSnapshotDetails will copy the details from the rbdVolume to the
|
// updateSnapshotDetails will copy the details from the rbdVolume to the
|
||||||
// rbdSnapshot. example copying size from rbdVolume to rbdSnapshot.
|
// rbdSnapshot. example copying size from rbdVolume to rbdSnapshot.
|
||||||
func updateSnapshotDetails(rbdSnap *rbdSnapshot) error {
|
func updateSnapshotDetails(ctx context.Context, rbdSnap *rbdSnapshot) error {
|
||||||
vol := rbdSnap.toVolume()
|
vol := rbdSnap.toVolume()
|
||||||
err := vol.Connect(rbdSnap.conn.Creds)
|
err := vol.Connect(rbdSnap.conn.Creds)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer vol.Destroy()
|
defer vol.Destroy(ctx)
|
||||||
|
|
||||||
err = vol.getImageInfo()
|
err = vol.getImageInfo()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -1685,7 +1694,7 @@ func (ri *rbdImage) flattenParent(ctx context.Context, hardLimit, softLimit uint
|
|||||||
if parentImage == nil {
|
if parentImage == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
defer parentImage.Destroy()
|
defer parentImage.Destroy(ctx)
|
||||||
|
|
||||||
return parentImage.flattenRbdImage(ctx, false, hardLimit, softLimit)
|
return parentImage.flattenRbdImage(ctx, false, hardLimit, softLimit)
|
||||||
}
|
}
|
||||||
@ -2128,7 +2137,7 @@ func genVolFromVolIDWithMigration(
|
|||||||
}
|
}
|
||||||
rv, err := GenVolFromVolID(ctx, volID, cr, secrets)
|
rv, err := GenVolFromVolID(ctx, volID, cr, secrets)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
rv.Destroy()
|
rv.Destroy(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
return rv, err
|
return rv, err
|
||||||
|
@ -56,7 +56,7 @@ func createRBDClone(
|
|||||||
errSnap := parentVol.deleteSnapshot(ctx, snap)
|
errSnap := parentVol.deleteSnapshot(ctx, snap)
|
||||||
if errSnap != nil {
|
if errSnap != nil {
|
||||||
log.ErrorLog(ctx, "failed to delete snapshot: %v", errSnap)
|
log.ErrorLog(ctx, "failed to delete snapshot: %v", errSnap)
|
||||||
delErr := cloneRbdVol.deleteImage(ctx)
|
delErr := cloneRbdVol.Delete(ctx)
|
||||||
if delErr != nil {
|
if delErr != nil {
|
||||||
log.ErrorLog(ctx, "failed to delete rbd image: %s with error: %v", cloneRbdVol, delErr)
|
log.ErrorLog(ctx, "failed to delete rbd image: %s with error: %v", cloneRbdVol, delErr)
|
||||||
}
|
}
|
||||||
@ -85,7 +85,7 @@ func cleanUpSnapshot(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if rbdVol != nil {
|
if rbdVol != nil {
|
||||||
err := rbdVol.deleteImage(ctx)
|
err := rbdVol.Delete(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !errors.Is(err, ErrImageNotFound) {
|
if !errors.Is(err, ErrImageNotFound) {
|
||||||
log.ErrorLog(ctx, "failed to delete rbd image %q with error: %v", rbdVol, err)
|
log.ErrorLog(ctx, "failed to delete rbd image %q with error: %v", rbdVol, err)
|
||||||
|
30
internal/rbd_types/volume.go
Normal file
30
internal/rbd_types/volume.go
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2024 The Ceph-CSI Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package rbd_types
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Volume interface {
|
||||||
|
// Destroy frees the resources used by the Volume.
|
||||||
|
Destroy(ctx context.Context)
|
||||||
|
|
||||||
|
Delete(ctx context.Context) error
|
||||||
|
|
||||||
|
GetID(ctx context.Context) (string, error)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user