diff --git a/internal/rbd/clone.go b/internal/rbd/clone.go index 41efa2584..a0faa468b 100644 --- a/internal/rbd/clone.go +++ b/internal/rbd/clone.go @@ -138,6 +138,16 @@ func (rv *rbdVolume) createCloneFromImage(ctx context.Context, parentVol *rbdVol return err } + defer func() { + if err != nil { + log.DebugLog(ctx, "Removing clone image %q", rv) + errDefer := rv.deleteImage(ctx) + if errDefer != nil { + log.ErrorLog(ctx, "failed to delete clone image %q: %v", rv, errDefer) + } + } + }() + err = rv.getImageID() if err != nil { log.ErrorLog(ctx, "failed to get volume id %s: %v", rv, err) diff --git a/internal/rbd/controllerserver.go b/internal/rbd/controllerserver.go index b6a8f7e6a..c94790553 100644 --- a/internal/rbd/controllerserver.go +++ b/internal/rbd/controllerserver.go @@ -644,6 +644,17 @@ func (cs *ControllerServer) createVolumeFromSnapshot( return err } + + defer func() { + if err != nil { + log.DebugLog(ctx, "Removing clone image %q", rbdVol) + errDefer := rbdVol.deleteImage(ctx) + if errDefer != nil { + log.ErrorLog(ctx, "failed to delete clone image %q: %v", rbdVol, errDefer) + } + } + }() + err = rbdVol.unsetAllMetadata(k8s.GetSnapshotMetadataKeys()) if err != nil { log.ErrorLog(ctx, "failed to unset snapshot metadata on rbd image %q: %v", rbdVol, err) @@ -1142,6 +1153,16 @@ func (cs *ControllerServer) CreateSnapshot( rbdVol.RbdImageName = rbdSnap.RbdSnapName rbdVol.ClusterName = cs.ClusterName + defer func() { + if err != nil { + log.DebugLog(ctx, "Removing clone image %q", rbdVol) + errDefer := rbdVol.deleteImage(ctx) + if errDefer != nil { + log.ErrorLog(ctx, "failed to delete clone image %q: %v", rbdVol, errDefer) + } + } + }() + err = rbdVol.unsetAllMetadata(k8s.GetVolumeMetadataKeys()) if err != nil { return nil, status.Error(codes.Internal, err.Error())