diff --git a/internal/csi-addons/rbd/reclaimspace.go b/internal/csi-addons/rbd/reclaimspace.go index 97a5ea025..9fb124a21 100644 --- a/internal/csi-addons/rbd/reclaimspace.go +++ b/internal/csi-addons/rbd/reclaimspace.go @@ -68,7 +68,7 @@ func (rscs *ReclaimSpaceControllerServer) ControllerReclaimSpace( if err != nil { 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() if errors.Is(err, rbdutil.ErrImageInUse) { diff --git a/internal/csi-addons/rbd/replication.go b/internal/csi-addons/rbd/replication.go index f263d3e2b..544907b4f 100644 --- a/internal/csi-addons/rbd/replication.go +++ b/internal/csi-addons/rbd/replication.go @@ -273,7 +273,7 @@ func (rs *ReplicationServer) EnableVolumeReplication(ctx context.Context, rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets()) defer func() { if rbdVol != nil { - rbdVol.Destroy() + rbdVol.Destroy(ctx) } }() if err != nil { @@ -350,7 +350,7 @@ func (rs *ReplicationServer) DisableVolumeReplication(ctx context.Context, rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets()) defer func() { if rbdVol != nil { - rbdVol.Destroy() + rbdVol.Destroy(ctx) } }() if err != nil { @@ -425,7 +425,7 @@ func (rs *ReplicationServer) PromoteVolume(ctx context.Context, rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets()) defer func() { if rbdVol != nil { - rbdVol.Destroy() + rbdVol.Destroy(ctx) } }() if err != nil { @@ -525,7 +525,7 @@ func (rs *ReplicationServer) DemoteVolume(ctx context.Context, rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets()) defer func() { if rbdVol != nil { - rbdVol.Destroy() + rbdVol.Destroy(ctx) } }() if err != nil { @@ -642,7 +642,7 @@ func (rs *ReplicationServer) ResyncVolume(ctx context.Context, rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets()) defer func() { if rbdVol != nil { - rbdVol.Destroy() + rbdVol.Destroy(ctx) } }() if err != nil { @@ -856,7 +856,7 @@ func (rs *ReplicationServer) GetVolumeReplicationInfo(ctx context.Context, rbdVol, err := corerbd.GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets()) defer func() { if rbdVol != nil { - rbdVol.Destroy() + rbdVol.Destroy(ctx) } }() if err != nil { diff --git a/internal/rbd/clone.go b/internal/rbd/clone.go index b2ce33ba5..d4312b012 100644 --- a/internal/rbd/clone.go +++ b/internal/rbd/clone.go @@ -46,10 +46,10 @@ import ( func (rv *rbdVolume) checkCloneImage(ctx context.Context, parentVol *rbdVolume) (bool, error) { // generate temp cloned volume tempClone := rv.generateTempClone() - defer tempClone.Destroy() + defer tempClone.Destroy(ctx) snap := &rbdSnapshot{} - defer snap.Destroy() + defer snap.Destroy(ctx) snap.RbdSnapName = rv.RbdImageName snap.Pool = rv.Pool @@ -183,7 +183,7 @@ func (rv *rbdVolume) doSnapClone(ctx context.Context, parentVol *rbdVolume) erro // generate temp cloned volume tempClone := rv.generateTempClone() - defer tempClone.Destroy() + defer tempClone.Destroy(ctx) // snapshot name is same as temporary cloned image, This helps to // flatten the temporary cloned images as we cannot have more than 510 diff --git a/internal/rbd/controllerserver.go b/internal/rbd/controllerserver.go index 71f0492c4..12f7d709e 100644 --- a/internal/rbd/controllerserver.go +++ b/internal/rbd/controllerserver.go @@ -335,7 +335,7 @@ func (cs *ControllerServer) CreateVolume( if err != nil { return nil, err } - defer rbdVol.Destroy() + defer rbdVol.Destroy(ctx) // Existence and conflict checks if acquired := cs.VolumeLocks.TryAcquire(req.GetName()); !acquired { log.ErrorLog(ctx, util.VolumeOperationAlreadyExistsFmt, req.GetName()) @@ -349,10 +349,10 @@ func (cs *ControllerServer) CreateVolume( return nil, err } if parentVol != nil { - defer parentVol.Destroy() + defer parentVol.Destroy(ctx) } if rbdSnap != nil { - defer rbdSnap.Destroy() + defer rbdSnap.Destroy(ctx) } err = updateTopologyConstraints(rbdVol, rbdSnap) @@ -465,7 +465,7 @@ func flattenParentImage( // in case of any error call Destroy for cleanup. defer func() { if err != nil { - rbdSnap.Destroy() + rbdSnap.Destroy(ctx) } }() @@ -661,14 +661,14 @@ func (cs *ControllerServer) createVolumeFromSnapshot( return status.Error(codes.Internal, err.Error()) } - defer rbdSnap.Destroy() + defer rbdSnap.Destroy(ctx) // update parent name(rbd image name in snapshot) rbdSnap.RbdImageName = rbdSnap.RbdSnapName parentVol := rbdSnap.toVolume() // as we are operating on single cluster reuse the connection parentVol.conn = rbdVol.conn.Copy() - defer parentVol.Destroy() + defer parentVol.Destroy(ctx) // create clone image and delete snapshot err = rbdVol.cloneRbdImageFromSnapshot(ctx, rbdSnap, parentVol) @@ -944,7 +944,7 @@ func (cs *ControllerServer) DeleteVolume( rbdVol, err := GenVolFromVolID(ctx, volumeID, cr, req.GetSecrets()) defer func() { if rbdVol != nil { - rbdVol.Destroy() + rbdVol.Destroy(ctx) } }() if err != nil { @@ -1094,7 +1094,7 @@ func (cs *ControllerServer) CreateSnapshot( rbdVol, err := GenVolFromVolID(ctx, req.GetSourceVolumeId(), cr, req.GetSecrets()) defer func() { if rbdVol != nil { - rbdVol.Destroy() + rbdVol.Destroy(ctx) } }() if err != nil { @@ -1237,7 +1237,7 @@ func cloneFromSnapshot( return nil, status.Errorf(codes.Internal, err.Error()) } - defer vol.Destroy() + defer vol.Destroy(ctx) err = rbdVol.copyEncryptionConfig(ctx, &vol.rbdImage, false) if err != nil { @@ -1313,7 +1313,7 @@ func (cs *ControllerServer) doSnapshotClone( ) (*rbdVolume, error) { // generate cloned volume details from snapshot cloneRbd := rbdSnap.toVolume() - defer cloneRbd.Destroy() + defer cloneRbd.Destroy(ctx) // add image feature for cloneRbd f := []string{librbd.FeatureNameLayering, librbd.FeatureNameDeepFlatten} cloneRbd.ImageFeatureSet = librbd.FeatureSetFromNames(f) @@ -1460,7 +1460,7 @@ func (cs *ControllerServer) DeleteSnapshot( 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 // name @@ -1480,7 +1480,7 @@ func (cs *ControllerServer) DeleteSnapshot( if err != nil { return nil, status.Error(codes.Internal, err.Error()) } - defer rbdVol.Destroy() + defer rbdVol.Destroy(ctx) rbdVol.ImageID = rbdSnap.ImageID // update parent name to delete the snapshot @@ -1510,7 +1510,7 @@ func cleanUpImageAndSnapReservation(ctx context.Context, rbdSnap *rbdSnapshot, c if err != nil { return status.Error(codes.Internal, err.Error()) } - defer rbdVol.Destroy() + defer rbdVol.Destroy(ctx) err = rbdVol.openIoctx() if err != nil { @@ -1584,7 +1584,7 @@ func (cs *ControllerServer) ControllerExpandVolume( return nil, err } - defer rbdVol.Destroy() + defer rbdVol.Destroy(ctx) // NodeExpansion is needed for PersistentVolumes with, // 1. Filesystem VolumeMode with & without Encryption and diff --git a/internal/rbd/migration.go b/internal/rbd/migration.go index e68437bad..089a95139 100644 --- a/internal/rbd/migration.go +++ b/internal/rbd/migration.go @@ -81,7 +81,7 @@ func deleteMigratedVolume(ctx context.Context, parsedMigHandle *migrationVolID, if err != nil { return err } - defer rv.Destroy() + defer rv.Destroy(ctx) err = rv.deleteImage(ctx) if err != nil { log.ErrorLog(ctx, "failed to delete rbd image: %s, err: %v", rv, err) diff --git a/internal/rbd/nodeserver.go b/internal/rbd/nodeserver.go index c203c82db..5f4dd0007 100644 --- a/internal/rbd/nodeserver.go +++ b/internal/rbd/nodeserver.go @@ -198,7 +198,7 @@ func (ns *NodeServer) populateRbdVol( } else { rv, err = GenVolFromVolID(ctx, volID, cr, req.GetSecrets()) if err != nil { - rv.Destroy() + rv.Destroy(ctx) log.ErrorLog(ctx, "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. defer func() { if err != nil { - rv.Destroy() + rv.Destroy(ctx) } }() // get the image details from the ceph cluster. @@ -345,7 +345,7 @@ func (ns *NodeServer) NodeStageVolume( if err != nil { return nil, err } - defer rv.Destroy() + defer rv.Destroy(ctx) rv.NetNamespaceFilePath, err = util.GetRBDNetNamespaceFilePath(util.CsiConfigFile, rv.ClusterID) if err != nil { diff --git a/internal/rbd/rbd_journal.go b/internal/rbd/rbd_journal.go index 69611fd08..78f5d5fdd 100644 --- a/internal/rbd/rbd_journal.go +++ b/internal/rbd/rbd_journal.go @@ -163,7 +163,7 @@ func checkSnapCloneExists( } vol := rbdSnap.toVolume() - defer vol.Destroy() + defer vol.Destroy(ctx) err = vol.Connect(cr) if err != nil { return false, err diff --git a/internal/rbd/rbd_util.go b/internal/rbd/rbd_util.go index b84f64344..c3f44e2dd 100644 --- a/internal/rbd/rbd_util.go +++ b/internal/rbd/rbd_util.go @@ -385,7 +385,7 @@ func (ri *rbdImage) Connect(cr *util.Credentials) error { // Destroy cleans up the rbdVolume and closes the connection to the Ceph // cluster in case one was setup. -func (ri *rbdImage) Destroy() { +func (ri *rbdImage) Destroy(ctx context.Context) { if ri.ioctx != nil { ri.ioctx.Destroy() } @@ -777,7 +777,7 @@ func flattenClonedRbdImages( rv.Pool = pool rv.RbdImageName = rbdImageName - defer rv.Destroy() + defer rv.Destroy(ctx) err := rv.Connect(cr) if err != nil { log.ErrorLog(ctx, "failed to open connection %s; err %v", rv, err) @@ -1045,7 +1045,7 @@ func genSnapFromSnapID( } defer func() { if err != nil { - rbdSnap.Destroy() + rbdSnap.Destroy(ctx) } }() @@ -1064,7 +1064,7 @@ func genSnapFromSnapID( } } - err = updateSnapshotDetails(rbdSnap) + err = updateSnapshotDetails(ctx, rbdSnap) if err != nil { return rbdSnap, fmt.Errorf("failed to update snapshot details for %q: %w", rbdSnap, err) } @@ -1074,13 +1074,13 @@ func genSnapFromSnapID( // updateSnapshotDetails will copy the details from the rbdVolume to the // rbdSnapshot. example copying size from rbdVolume to rbdSnapshot. -func updateSnapshotDetails(rbdSnap *rbdSnapshot) error { +func updateSnapshotDetails(ctx context.Context, rbdSnap *rbdSnapshot) error { vol := rbdSnap.toVolume() err := vol.Connect(rbdSnap.conn.Creds) if err != nil { return err } - defer vol.Destroy() + defer vol.Destroy(ctx) err = vol.getImageInfo() if err != nil { @@ -1685,7 +1685,7 @@ func (ri *rbdImage) flattenParent(ctx context.Context, hardLimit, softLimit uint if parentImage == nil { return nil } - defer parentImage.Destroy() + defer parentImage.Destroy(ctx) return parentImage.flattenRbdImage(ctx, false, hardLimit, softLimit) } @@ -2128,7 +2128,7 @@ func genVolFromVolIDWithMigration( } rv, err := GenVolFromVolID(ctx, volID, cr, secrets) if err != nil { - rv.Destroy() + rv.Destroy(ctx) } return rv, err