time_t tv_sec
long tv_nsec
+cdef extern from "<errno.h>" nogil:
+ enum:
+ _ECANCELED "ECANCELED"
+
cdef extern from "rados/librados.h":
enum:
_LIBRADOS_SNAP_HEAD "LIBRADOS_SNAP_HEAD"
int stat_option, uint64_t* stat_val)
int rbd_pool_stats_get(rados_ioctx_t io, rbd_pool_stats_t stats)
+ECANCELED = _ECANCELED
+
RBD_FEATURE_LAYERING = _RBD_FEATURE_LAYERING
RBD_FEATURE_STRIPINGV2 = _RBD_FEATURE_STRIPINGV2
RBD_FEATURE_EXCLUSIVE_LOCK = _RBD_FEATURE_EXCLUSIVE_LOCK
class DiskQuotaExceeded(OSError):
pass
+class OperationCanceled(OSError):
+ def __init__(self, message, errno=None):
+ super(OperationCanceled, self).__init__(
+ "RBD operation canceled (%s)" % message, errno)
cdef errno_to_exception = {
errno.EPERM : PermissionError,
errno.ESHUTDOWN : ConnectionShutdown,
errno.ETIMEDOUT : Timeout,
errno.EDQUOT : DiskQuotaExceeded,
+ ECANCELED : OperationCanceled,
}
cdef group_errno_to_exception = {
errno.ESHUTDOWN : ConnectionShutdown,
errno.ETIMEDOUT : Timeout,
errno.EDQUOT : DiskQuotaExceeded,
+ ECANCELED : OperationCanceled,
}
cdef make_ex(ret, msg, exception_map=errno_to_exception):
from rbd import (RBD, Group, Image, ImageNotFound, InvalidArgument, ImageExists,
ImageBusy, ImageHasSnapshots, ReadOnlyImage,
FunctionNotSupported, ArgumentOutOfRange,
+ ECANCELED, OperationCanceled,
DiskQuotaExceeded, ConnectionShutdown, PermissionError,
RBD_FEATURE_LAYERING, RBD_FEATURE_STRIPINGV2,
RBD_FEATURE_EXCLUSIVE_LOCK, RBD_FEATURE_JOURNALING,
@with_setup(create_image)
def test_remove_canceled():
def progress_cb(current, total):
- return -errno.ESHUTDOWN
+ return -ECANCELED
- assert_raises(ConnectionShutdown, RBD().remove, ioctx, image_name,
+ assert_raises(OperationCanceled, RBD().remove, ioctx, image_name,
on_progress=progress_cb)
@with_setup(create_image, remove_image)