Skip to content

Commit 0c9084c

Browse files
Rakshith-Rmergify[bot]
authored andcommitted
rbd: remove ensureImageCleanup and use ID-based trash removal
In DeleteTempImage(), use the volume's parent info (ParentImageID) to identify a trashed temp clone by ID instead of scanning the trash list. This works because cleanupRBDImage() calls DeleteTempImage() before rbdVol.Delete(), so the child image still exists and GetParent() data is valid. When parent info is unavailable (temp clone not in trash), treat it as already removed and return success. Remove ensureImageCleanup() entirely - the O(n) GetTrashList scan is no longer needed. All volume/snapshot image IDs are stored in OMAP at creation time and backfilled by storeImageID() on first access, so ImageID is always available for direct O(1) trash removal. Assisted-by: Claude <noreply@anthropic.com> Signed-off-by: Rakshith R <rar@redhat.com>
1 parent 1529daf commit 0c9084c

1 file changed

Lines changed: 13 additions & 29 deletions

File tree

internal/rbd/rbd_util.go

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -723,31 +723,6 @@ func isCephMgrSupported(ctx context.Context, clusterID string, err error) (bool,
723723
return true, nil
724724
}
725725

726-
// ensureImageCleanup finds image in trash and if found removes it
727-
// from trash.
728-
func (ri *rbdImage) ensureImageCleanup(ctx context.Context) error {
729-
err := ri.openIoctx()
730-
if err != nil {
731-
return err
732-
}
733-
734-
trashInfoList, err := librbd.GetTrashList(ri.ioctx)
735-
if err != nil {
736-
log.ErrorLog(ctx, "failed to list images in trash: %v", err)
737-
738-
return err
739-
}
740-
for _, val := range trashInfoList {
741-
if val.Name == ri.RbdImageName {
742-
ri.ImageID = val.Id
743-
744-
return ri.trashRemoveImage(ctx)
745-
}
746-
}
747-
748-
return nil
749-
}
750-
751726
// Delete deletes a ceph image with provision and volume options.
752727
func (ri *rbdImage) Delete(ctx context.Context) error {
753728
image := ri.RbdImageName
@@ -876,11 +851,20 @@ func (rv *rbdVolume) DeleteTempImage(ctx context.Context) error {
876851
err = tempClone.Delete(ctx)
877852
if err != nil {
878853
if errors.Is(err, rbderrors.ErrImageNotFound) {
879-
return tempClone.ensureImageCleanup(ctx)
880-
} else {
881-
// return error if it is not ErrImageNotFound
882-
return err
854+
if rv.ParentInTrash &&
855+
rv.ParentName == tempClone.RbdImageName &&
856+
rv.ParentImageID != "" {
857+
tempClone.ImageID = rv.ParentImageID
858+
859+
return tempClone.removeImageFromTrash(ctx)
860+
}
861+
862+
log.DebugLog(ctx, "temp clone %s not found and not in trash, already removed", tempClone)
863+
864+
return nil
883865
}
866+
867+
return err
884868
}
885869

886870
return nil

0 commit comments

Comments
 (0)