From 3aece2f38e466d6fe539d69e344a1123dc8495f8 Mon Sep 17 00:00:00 2001 From: Niels de Vos Date: Thu, 21 Mar 2024 15:01:56 +0100 Subject: [PATCH] cleanup: pass context to rbdImage.Destroy() In the future we'll introduce a more standard interface for objects like Volumes and Snapshots. It is useful to have the context passed as 1st argument to all functions of those objects, including their Destroy() function. Signed-off-by: Niels de Vos --- internal/csi-addons/rbd/reclaimspace.go | 2 +- internal/csi-addons/rbd/replication.go | 12 +++++------ internal/rbd/clone.go | 6 +++--- internal/rbd/controllerserver.go | 28 ++++++++++++------------- internal/rbd/migration.go | 2 +- internal/rbd/nodeserver.go | 6 +++--- internal/rbd/rbd_journal.go | 2 +- internal/rbd/rbd_util.go | 16 +++++++------- 8 files changed, 37 insertions(+), 37 deletions(-) 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