Skip to content

Commit

Permalink
rbd: replace Manager.DeleteVolumeGroup() by VolumeGroup.Delete()
Browse files Browse the repository at this point in the history
There is no need for the `Manager.DeleteVolumeGroup()` function as
`VolumeGroup.Delete()` should cover everything too.

By moving the `.Delete()` functionality of removing the group from the
journal to the shared `commonVolumeGroup` type, a volume group snaphot
can use it as well.

Signed-off-by: Niels de Vos <[email protected]>
  • Loading branch information
nixpanic authored and mergify[bot] committed Sep 26, 2024
1 parent 01a0ec2 commit f2bc1c6
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 47 deletions.
2 changes: 1 addition & 1 deletion internal/csi-addons/rbd/volumegroup.go
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ func (vs *VolumeGroupServer) DeleteVolumeGroup(
}

// delete the volume group
err = mgr.DeleteVolumeGroup(ctx, vg)
err = vg.Delete(ctx)
if err != nil {
return nil, status.Errorf(codes.Internal,
"failed to delete volume group %q: %s",
Expand Down
25 changes: 25 additions & 0 deletions internal/rbd/group/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,31 @@ func (cvg *commonVolumeGroup) GetIOContext(ctx context.Context) (*rados.IOContex
return ioctx, nil
}

// Delete removes the volume group from the journal.
func (cvg *commonVolumeGroup) Delete(ctx context.Context) error {
name, err := cvg.GetName(ctx)
if err != nil {
return fmt.Errorf("failed to get name for volume group %q: %w", cvg, err)
}

csiID, err := cvg.GetID(ctx)
if err != nil {
return fmt.Errorf("failed to get id for volume group %q: %w", cvg, err)
}

pool, err := cvg.GetPool(ctx)
if err != nil {
return fmt.Errorf("failed to get pool for volume group %q: %w", cvg, err)
}

err = cvg.journal.UndoReservation(ctx, pool, name, csiID)
if err != nil /* TODO? !errors.Is(..., err) */ {
return fmt.Errorf("failed to undo the reservation for volume group %q: %w", cvg, err)
}

return nil
}

// GetCreationTime fetches the creation time of the volume group from the
// journal and returns it.
func (cvg *commonVolumeGroup) GetCreationTime(ctx context.Context) (*time.Time, error) {
Expand Down
2 changes: 1 addition & 1 deletion internal/rbd/group/volume_group.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ func (vg *volumeGroup) Delete(ctx context.Context) error {

log.DebugLog(ctx, "volume group %q has been removed", vg)

return nil
return vg.commonVolumeGroup.Delete(ctx)
}

func (vg *volumeGroup) AddVolume(ctx context.Context, vol types.Volume) error {
Expand Down
41 changes: 0 additions & 41 deletions internal/rbd/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ import (
"errors"
"fmt"

"github.com/ceph/go-ceph/rados"

"github.com/ceph/ceph-csi/internal/journal"
rbd_group "github.com/ceph/ceph-csi/internal/rbd/group"
"github.com/ceph/ceph-csi/internal/rbd/types"
Expand Down Expand Up @@ -255,42 +253,3 @@ func (mgr *rbdManager) CreateVolumeGroup(ctx context.Context, name string) (type

return vg, nil
}

func (mgr *rbdManager) DeleteVolumeGroup(ctx context.Context, vg types.VolumeGroup) error {
err := vg.Delete(ctx)
if err != nil && !errors.Is(rados.ErrNotFound, err) {
return fmt.Errorf("failed to delete volume group %q: %w", vg, err)
}

clusterID, err := vg.GetClusterID(ctx)
if err != nil {
return fmt.Errorf("failed to get cluster id for volume group %q: %w", vg, err)
}

vgJournal, err := mgr.getVolumeGroupJournal(clusterID)
if err != nil {
return err
}

name, err := vg.GetName(ctx)
if err != nil {
return fmt.Errorf("failed to get name for volume group %q: %w", vg, err)
}

csiID, err := vg.GetID(ctx)
if err != nil {
return fmt.Errorf("failed to get id for volume group %q: %w", vg, err)
}

pool, err := vg.GetPool(ctx)
if err != nil {
return fmt.Errorf("failed to get pool for volume group %q: %w", vg, err)
}

err = vgJournal.UndoReservation(ctx, pool, name, csiID)
if err != nil /* TODO? !errors.Is(..., err) */ {
return fmt.Errorf("failed to undo the reservation for volume group %q: %w", vg, err)
}

return nil
}
4 changes: 0 additions & 4 deletions internal/rbd/types/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,4 @@ type Manager interface {
// CreateVolumeGroup allocates a new VolumeGroup in the backend storage
// and records details about it in the journal.
CreateVolumeGroup(ctx context.Context, name string) (VolumeGroup, error)

// DeleteVolumeGroup removes VolumeGroup from the backend storage and
// any details from the journal.
DeleteVolumeGroup(ctx context.Context, vg VolumeGroup) error
}

0 comments on commit f2bc1c6

Please sign in to comment.