From 7a87db39e646e52579fa2be7148adf42048379c0 Mon Sep 17 00:00:00 2001 From: Madhu Rajanna Date: Thu, 2 Jul 2020 12:15:47 +0530 Subject: [PATCH] rbd: check rbd image status only duing DeleteVolume RPC currently, various calls to deleteImage does not need the rbdStatus check. That is only required when calling from DeleteVolume. This PR optimizes the rbd image deletion by removing the status check. Signed-off-by: Madhu Rajanna --- internal/rbd/controllerserver.go | 10 ++++++++++ internal/rbd/rbd_util.go | 15 +-------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/internal/rbd/controllerserver.go b/internal/rbd/controllerserver.go index 86a880505..6c3edcede 100644 --- a/internal/rbd/controllerserver.go +++ b/internal/rbd/controllerserver.go @@ -547,6 +547,16 @@ func (cs *ControllerServer) DeleteVolume(ctx context.Context, req *csi.DeleteVol } defer cs.VolumeLocks.Release(rbdVol.RequestName) + found, _, err := rbdStatus(ctx, rbdVol, cr) + if err != nil { + klog.Errorf(util.Log(ctx, "failed getting information for image (%s): (%s)"), rbdVol, err) + return nil, status.Error(codes.Internal, err.Error()) + } + if found { + klog.Errorf(util.Log(ctx, "rbd %s is still being used"), rbdVol) + return nil, status.Errorf(codes.Internal, "rbd %s is still being used", rbdVol.RbdImageName) + } + // Deleting rbd image klog.V(4).Infof(util.Log(ctx, "deleting image %s"), rbdVol.RbdImageName) if err = deleteImage(ctx, rbdVol, cr); err != nil { diff --git a/internal/rbd/rbd_util.go b/internal/rbd/rbd_util.go index 5c4900486..7c9080d94 100644 --- a/internal/rbd/rbd_util.go +++ b/internal/rbd/rbd_util.go @@ -339,21 +339,8 @@ func addRbdManagerTask(ctx context.Context, pOpts *rbdVolume, arg []string) (boo // deleteImage deletes a ceph image with provision and volume options. func deleteImage(ctx context.Context, pOpts *rbdVolume, cr *util.Credentials) error { image := pOpts.RbdImageName - found, _, err := rbdStatus(ctx, pOpts, cr) - if err != nil { - klog.Errorf(util.Log(ctx, "failed getting information for image (%s): (%s)"), pOpts, err) - if strings.Contains(err.Error(), "rbd: error opening image "+image+ - ": (2) No such file or directory") { - return ErrImageNotFound{image, err} - } - return err - } - if found { - klog.Errorf(util.Log(ctx, "rbd %s is still being used"), image) - return fmt.Errorf("rbd %s is still being used", image) - } // Support deleting the older rbd images whose imageID is not stored in omap - err = pOpts.getImageID() + err := pOpts.getImageID() if err != nil { return err }