rbd: add sub-types for large Volume type

Introduce `snapshottableVolume` and `csiAddonsVolume` types which group
related functions together.

Signed-off-by: Niels de Vos <ndevos@ibm.com>
This commit is contained in:
Niels de Vos 2025-01-20 10:39:33 +01:00 committed by mergify[bot]
parent ec5fefcc6c
commit 2dd235849e

View File

@ -25,9 +25,45 @@ import (
"github.com/ceph/ceph-csi/internal/util" "github.com/ceph/ceph-csi/internal/util"
) )
//nolint:interfacebloat // more than 10 methods are needed for the interface type snapshottableVolume interface {
// NewSnapshotByID creates a new Snapshot object based on the details of the Volume.
NewSnapshotByID(ctx context.Context, cr *util.Credentials, name string, id uint64) (Snapshot, error)
// PrepareVolumeForSnapshot prepares the volume for snapshot by
// checking snapshots limit and clone depth limit and flatten it
// if required.
PrepareVolumeForSnapshot(ctx context.Context, cr *util.Credentials) error
}
type csiAddonsVolume interface {
// AddToGroup adds the Volume to the VolumeGroup.
AddToGroup(ctx context.Context, vg VolumeGroup) error
// RemoveFromGroup removes the Volume from the VolumeGroup.
RemoveFromGroup(ctx context.Context, vg VolumeGroup) error
// RotateEncryptionKey processes the key rotation for the RBD Volume.
RotateEncryptionKey(ctx context.Context) error
// HandleParentImageExistence checks the image's parent.
// if the parent image does not exist and is not in trash, it returns nil.
// if the flattenMode is FlattenModeForce, it flattens the image itself.
// if the parent image is in trash, it returns an error.
// if the parent image exists and is not enabled for mirroring, it returns an error.
HandleParentImageExistence(ctx context.Context, flattenMode FlattenMode) error
// RepairResyncedImageID updates the existing image ID with new one in OMAP.
RepairResyncedImageID(ctx context.Context, ready bool) error
// ToMirror converts the Volume to a Mirror.
ToMirror() (Mirror, error)
}
type Volume interface { type Volume interface {
journalledObject journalledObject
snapshottableVolume
csiAddonsVolume
// Destroy frees the resources used by the Volume. // Destroy frees the resources used by the Volume.
Destroy(ctx context.Context) Destroy(ctx context.Context)
@ -37,12 +73,6 @@ type Volume interface {
// ToCSI creates a CSI protocol formatted struct of the volume. // ToCSI creates a CSI protocol formatted struct of the volume.
ToCSI(ctx context.Context) (*csi.Volume, error) ToCSI(ctx context.Context) (*csi.Volume, error)
// AddToGroup adds the Volume to the VolumeGroup.
AddToGroup(ctx context.Context, vg VolumeGroup) error
// RemoveFromGroup removes the Volume from the VolumeGroup.
RemoveFromGroup(ctx context.Context, vg VolumeGroup) error
// GetCreationTime returns the creation time of the volume. // GetCreationTime returns the creation time of the volume.
GetCreationTime(ctx context.Context) (*time.Time, error) GetCreationTime(ctx context.Context) (*time.Time, error)
@ -50,22 +80,4 @@ type Volume interface {
GetMetadata(key string) (string, error) GetMetadata(key string) (string, error)
// SetMetadata sets the value of the metadata key on the volume. // SetMetadata sets the value of the metadata key on the volume.
SetMetadata(key, value string) error SetMetadata(key, value string) error
// RepairResyncedImageID updates the existing image ID with new one in OMAP.
RepairResyncedImageID(ctx context.Context, ready bool) error
// HandleParentImageExistence checks the image's parent.
// if the parent image does not exist and is not in trash, it returns nil.
// if the flattenMode is FlattenModeForce, it flattens the image itself.
// if the parent image is in trash, it returns an error.
// if the parent image exists and is not enabled for mirroring, it returns an error.
HandleParentImageExistence(ctx context.Context, flattenMode FlattenMode) error
// PrepareVolumeForSnapshot prepares the volume for snapshot by
// checking snapshots limit and clone depth limit and flatten it
// if required.
PrepareVolumeForSnapshot(ctx context.Context, cr *util.Credentials) error
// ToMirror converts the Volume to a Mirror.
ToMirror() (Mirror, error)
// NewSnapshotByID creates a new Snapshot object based on the details of the Volume.
NewSnapshotByID(ctx context.Context, cr *util.Credentials, name string, id uint64) (Snapshot, error)
} }