From 3dbd875587971dea08d2740c292a9140a17c098a Mon Sep 17 00:00:00 2001 From: Niels de Vos Date: Wed, 2 Oct 2024 15:49:54 +0200 Subject: [PATCH] rbd: replace rbdError by cephError Signed-off-by: Niels de Vos --- rbd/clone_image_by_id.go | 2 +- rbd/diff_iterate.go | 2 +- rbd/errors.go | 31 +++++++------------------ rbd/features.go | 2 +- rbd/group_snap.go | 2 +- rbd/metadata.go | 4 ++-- rbd/rbd.go | 50 ++++++++++++++++++++-------------------- rbd/resize.go | 2 +- rbd/snapshot.go | 4 ++-- rbd/snapshot_nautilus.go | 14 +++++------ rbd/sparsify.go | 2 +- 11 files changed, 50 insertions(+), 65 deletions(-) diff --git a/rbd/clone_image_by_id.go b/rbd/clone_image_by_id.go index 63cf552..f1adf48 100644 --- a/rbd/clone_image_by_id.go +++ b/rbd/clone_image_by_id.go @@ -52,7 +52,7 @@ var ( func CloneImageByID(ioctx *rados.IOContext, parentName string, snapID uint64, destctx *rados.IOContext, name string, rio *ImageOptions) error { if rio == nil { - return rbdError(C.EINVAL) + return getError(C.EINVAL) } rbdClone4Once.Do(func() { diff --git a/rbd/diff_iterate.go b/rbd/diff_iterate.go index bb20388..60a29eb 100644 --- a/rbd/diff_iterate.go +++ b/rbd/diff_iterate.go @@ -96,7 +96,7 @@ func (image *Image) DiffIterate(config DiffIterateConfig) error { return err } if config.Callback == nil { - return rbdError(C.EINVAL) + return getError(C.EINVAL) } var cSnapName *C.char diff --git a/rbd/errors.go b/rbd/errors.go index e26e9d1..e2a3b7f 100644 --- a/rbd/errors.go +++ b/rbd/errors.go @@ -7,27 +7,17 @@ import "C" import ( "errors" + "fmt" "github.com/ceph/go-ceph/internal/errutil" ) -// rbdError represents an error condition returned from the librbd APIs. -type rbdError int - -func (e rbdError) Error() string { - return errutil.FormatErrorCode("rbd", int(e)) -} - -func (e rbdError) ErrorCode() int { - return int(e) -} - func getError(err C.int) error { if err != 0 { if err == -C.ENOENT { return ErrNotFound } - return rbdError(err) + return errutil.GetError("rbd", int(err)) } return nil } @@ -60,7 +50,7 @@ var ( ErrImageIsOpen = errors.New("RBD image is open") // ErrNotFound may be returned from an api call when the requested item is // missing. - ErrNotFound = errors.New("RBD image not found") + ErrNotFound = fmt.Errorf("RBD image not found: %w", errutil.GetError("rbd", -C.ENOENT)) // ErrNoNamespaceName maye be returned if an api call requires a namespace // name and it is not provided. ErrNoNamespaceName = errors.New("Namespace value is missing") @@ -69,20 +59,15 @@ var ( RbdErrorImageNotOpen = ErrImageNotOpen RbdErrorNotFound = ErrNotFound // revive:enable:exported -) -// Public general error -const ( // ErrExist indicates a non-specific already existing resource. - ErrExist = rbdError(-C.EEXIST) + ErrExist = getError(-C.EEXIST) // ErrNotExist indicates a non-specific missing resource. - ErrNotExist = rbdError(-C.ENOENT) + ErrNotExist = getError(-C.ENOENT) // ErrNotImplemented indicates a function is not implemented in by librbd. - ErrNotImplemented = rbdError(-C.ENOSYS) -) + ErrNotImplemented = getError(-C.ENOSYS) -// Private errors: + // Private errors: -const ( - errRange = rbdError(-C.ERANGE) + errRange = getError(-C.ERANGE) ) diff --git a/rbd/features.go b/rbd/features.go index 6bfb10d..ca9a93a 100644 --- a/rbd/features.go +++ b/rbd/features.go @@ -171,7 +171,7 @@ func (image *Image) GetFeatures() (features uint64, err error) { } if ret := C.rbd_get_features(image.image, (*C.uint64_t)(&features)); ret < 0 { - return 0, rbdError(ret) + return 0, getError(ret) } return features, nil diff --git a/rbd/group_snap.go b/rbd/group_snap.go index 6948fa7..a9994b9 100644 --- a/rbd/group_snap.go +++ b/rbd/group_snap.go @@ -204,7 +204,7 @@ func GroupSnapRollbackWithProgress( cb GroupSnapRollbackCallback, data interface{}) error { // the provided callback must be a real function if cb == nil { - return rbdError(C.EINVAL) + return getError(C.EINVAL) } cGroupName := C.CString(group) diff --git a/rbd/metadata.go b/rbd/metadata.go index 5419dc2..4573205 100644 --- a/rbd/metadata.go +++ b/rbd/metadata.go @@ -62,7 +62,7 @@ func (image *Image) SetMetadata(key string, value string) error { ret := C.rbd_metadata_set(image.image, cKey, cValue) if ret < 0 { - return rbdError(ret) + return getError(ret) } return nil @@ -83,7 +83,7 @@ func (image *Image) RemoveMetadata(key string) error { ret := C.rbd_metadata_remove(image.image, cKey) if ret < 0 { - return rbdError(ret) + return getError(ret) } return nil diff --git a/rbd/rbd.go b/rbd/rbd.go index 60582fa..d90882b 100644 --- a/rbd/rbd.go +++ b/rbd/rbd.go @@ -178,7 +178,7 @@ func Create(ioctx *rados.IOContext, name string, size uint64, order int, } if ret < 0 { - return nil, rbdError(ret) + return nil, getError(ret) } return &Image{ @@ -205,7 +205,7 @@ func Create2(ioctx *rados.IOContext, name string, size uint64, features uint64, ret = C.rbd_create2(cephIoctx(ioctx), cName, C.uint64_t(size), C.uint64_t(features), &cOrder) if ret < 0 { - return nil, rbdError(ret) + return nil, getError(ret) } return &Image{ @@ -235,7 +235,7 @@ func Create3(ioctx *rados.IOContext, name string, size uint64, features uint64, C.uint64_t(size), C.uint64_t(features), &cOrder, C.uint64_t(stripeUnit), C.uint64_t(stripeCount)) if ret < 0 { - return nil, rbdError(ret) + return nil, getError(ret) } return &Image{ @@ -274,7 +274,7 @@ func (image *Image) Clone(snapname string, cIoctx *rados.IOContext, cName string C.uint64_t(features), &cOrder) if ret < 0 { - return nil, rbdError(ret) + return nil, getError(ret) } return &Image{ @@ -325,9 +325,9 @@ func (image *Image) Rename(destname string) error { defer C.free(unsafe.Pointer(cSrcName)) defer C.free(unsafe.Pointer(cDestName)) - err := rbdError(C.rbd_rename(cephIoctx(image.ioctx), + err := getError(C.rbd_rename(cephIoctx(image.ioctx), cSrcName, cDestName)) - if err == 0 { + if err == nil { image.name = destname return nil } @@ -385,7 +385,7 @@ func (image *Image) Close() error { } if ret := C.rbd_close(image.image); ret != 0 { - return rbdError(ret) + return getError(ret) } image.image = nil @@ -418,7 +418,7 @@ func (image *Image) Stat() (info *ImageInfo, err error) { var cStat C.rbd_image_info_t if ret := C.rbd_stat(image.image, &cStat, C.size_t(unsafe.Sizeof(info))); ret < 0 { - return info, rbdError(ret) + return info, getError(ret) } return &ImageInfo{ @@ -443,7 +443,7 @@ func (image *Image) IsOldFormat() (bool, error) { ret := C.rbd_get_old_format(image.image, &cOldFormat) if ret < 0 { - return false, rbdError(ret) + return false, getError(ret) } return cOldFormat != 0, nil @@ -460,7 +460,7 @@ func (image *Image) GetSize() (size uint64, err error) { } if ret := C.rbd_get_size(image.image, (*C.uint64_t)(&size)); ret < 0 { - return 0, rbdError(ret) + return 0, getError(ret) } return size, nil @@ -478,7 +478,7 @@ func (image *Image) GetStripeUnit() (uint64, error) { var stripeUnit uint64 if ret := C.rbd_get_stripe_unit(image.image, (*C.uint64_t)(&stripeUnit)); ret < 0 { - return 0, rbdError(ret) + return 0, getError(ret) } return stripeUnit, nil @@ -496,7 +496,7 @@ func (image *Image) GetStripeCount() (uint64, error) { var stripeCount uint64 if ret := C.rbd_get_stripe_count(image.image, (*C.uint64_t)(&stripeCount)); ret < 0 { - return 0, rbdError(ret) + return 0, getError(ret) } return stripeCount, nil @@ -514,7 +514,7 @@ func (image *Image) GetOverlap() (overlap uint64, err error) { } if ret := C.rbd_get_overlap(image.image, (*C.uint64_t)(&overlap)); ret < 0 { - return overlap, rbdError(ret) + return overlap, getError(ret) } return overlap, nil @@ -573,7 +573,7 @@ func (image *Image) DeepCopy(ioctx *rados.IOContext, destname string, rio *Image return ErrNoName } if rio == nil { - return rbdError(C.EINVAL) + return getError(C.EINVAL) } cDestname := C.CString(destname) @@ -644,8 +644,8 @@ func (image *Image) ListLockers() (tag string, lockers []Locker, err error) { // and *0* means no locker held on rbd image. // but *0* is unexpected here because first rbd_list_lockers already // dealt with no locker case - if int(cLockerCount) <= 0 { - return "", nil, rbdError(cLockerCount) + if cLockerCount <= 0 { + return "", nil, getError(C.int(cLockerCount)) } clients := cutil.SplitSparseBuffer(clientsBuf) @@ -754,7 +754,7 @@ func (image *Image) Read(data []byte) (int, error) { (*C.char)(unsafe.Pointer(&data[0])))) if ret < 0 { - return 0, rbdError(ret) + return 0, getError(C.int(ret)) } image.offset += int64(ret) @@ -786,7 +786,7 @@ func (image *Image) Write(data []byte) (n int, err error) { } if ret != len(data) { - err = rbdError(-C.EPERM) + err = getError(-C.EPERM) } return ret, err @@ -825,7 +825,7 @@ func (image *Image) Discard(ofs uint64, length uint64) (int, error) { ret := C.rbd_discard(image.image, C.uint64_t(ofs), C.uint64_t(length)) if ret < 0 { - return 0, rbdError(ret) + return 0, getError(ret) } return int(ret), nil @@ -848,7 +848,7 @@ func (image *Image) ReadAt(data []byte, off int64) (int, error) { (*C.char)(unsafe.Pointer(&data[0])))) if ret < 0 { - return 0, rbdError(ret) + return 0, getError(C.int(ret)) } if ret < len(data) { @@ -872,7 +872,7 @@ func (image *Image) WriteAt(data []byte, off int64) (n int, err error) { C.size_t(len(data)), (*C.char)(unsafe.Pointer(&data[0])))) if ret != len(data) { - err = rbdError(-C.EPERM) + err = getError(-C.EPERM) } return ret, err @@ -938,7 +938,7 @@ func (image *Image) GetSnapshotNames() (snaps []SnapInfo, err error) { ret := C.rbd_snap_list(image.image, nil, &cMaxSnaps) // bugfix index out of range(&cSnaps[0]) if cMaxSnaps < 1 { - return nil, rbdError(ret) + return nil, getError(ret) } cSnaps := make([]C.rbd_snap_info_t, cMaxSnaps) snaps = make([]SnapInfo, cMaxSnaps) @@ -946,7 +946,7 @@ func (image *Image) GetSnapshotNames() (snaps []SnapInfo, err error) { ret = C.rbd_snap_list(image.image, &cSnaps[0], &cMaxSnaps) if ret < 0 { - return nil, rbdError(ret) + return nil, getError(ret) } for i, s := range cSnaps { @@ -1253,7 +1253,7 @@ func CreateImage(ioctx *rados.IOContext, name string, size uint64, rio *ImageOpt return ErrNoName } if rio == nil { - return rbdError(C.EINVAL) + return getError(C.EINVAL) } cName := C.CString(name) @@ -1294,7 +1294,7 @@ func CloneImage(ioctx *rados.IOContext, parentName, snapName string, destctx *rados.IOContext, name string, rio *ImageOptions) error { if rio == nil { - return rbdError(C.EINVAL) + return getError(C.EINVAL) } cParentName := C.CString(parentName) diff --git a/rbd/resize.go b/rbd/resize.go index 00f1187..86b1cee 100644 --- a/rbd/resize.go +++ b/rbd/resize.go @@ -57,7 +57,7 @@ func resize2Callback( func (image *Image) Resize2(size uint64, allowShrink bool, cb Resize2ProgressCallback, data interface{}) error { // the provided callback must be a real function if cb == nil { - return rbdError(C.EINVAL) + return getError(C.EINVAL) } if err := image.validate(imageIsOpen); err != nil { diff --git a/rbd/snapshot.go b/rbd/snapshot.go index d321b59..86de2b9 100644 --- a/rbd/snapshot.go +++ b/rbd/snapshot.go @@ -33,7 +33,7 @@ func (image *Image) CreateSnapshot(snapname string) (*Snapshot, error) { ret := C.rbd_snap_create(image.image, cSnapName) if ret < 0 { - return nil, rbdError(ret) + return nil, getError(ret) } return &Snapshot{ @@ -147,7 +147,7 @@ func (snapshot *Snapshot) IsProtected() (bool, error) { ret := C.rbd_snap_is_protected(snapshot.image.image, cSnapName, &cIsProtected) if ret < 0 { - return false, rbdError(ret) + return false, getError(ret) } return cIsProtected != 0, nil diff --git a/rbd/snapshot_nautilus.go b/rbd/snapshot_nautilus.go index f81e8d9..ce3e11a 100644 --- a/rbd/snapshot_nautilus.go +++ b/rbd/snapshot_nautilus.go @@ -32,7 +32,7 @@ func (image *Image) GetParentInfo(pool, name, snapname []byte) error { parentSnap := C.rbd_snap_spec_t{} ret := C.rbd_get_parent(image.image, &parentImage, &parentSnap) if ret != 0 { - return rbdError(ret) + return getError(ret) } defer C.rbd_linked_image_spec_cleanup(&parentImage) @@ -40,26 +40,26 @@ func (image *Image) GetParentInfo(pool, name, snapname []byte) error { strlen := int(C.strlen(parentImage.pool_name)) if len(pool) < strlen { - return rbdError(C.ERANGE) + return getError(C.ERANGE) } if copy(pool, C.GoString(parentImage.pool_name)) != strlen { - return rbdError(C.ERANGE) + return getError(C.ERANGE) } strlen = int(C.strlen(parentImage.image_name)) if len(name) < strlen { - return rbdError(C.ERANGE) + return getError(C.ERANGE) } if copy(name, C.GoString(parentImage.image_name)) != strlen { - return rbdError(C.ERANGE) + return getError(C.ERANGE) } strlen = int(C.strlen(parentSnap.name)) if len(snapname) < strlen { - return rbdError(C.ERANGE) + return getError(C.ERANGE) } if copy(snapname, C.GoString(parentSnap.name)) != strlen { - return rbdError(C.ERANGE) + return getError(C.ERANGE) } return nil diff --git a/rbd/sparsify.go b/rbd/sparsify.go index e46ca0d..7435a15 100644 --- a/rbd/sparsify.go +++ b/rbd/sparsify.go @@ -60,7 +60,7 @@ func (image *Image) SparsifyWithProgress( ) error { // the provided callback must be a real function if cb == nil { - return rbdError(C.EINVAL) + return getError(C.EINVAL) } if err := image.validate(imageIsOpen); err != nil {