int rados_write_op_operate(rados_write_op_t write_op, rados_ioctx_t io, const char * oid, time_t * mtime, int flags)
int rados_aio_write_op_operate(rados_write_op_t write_op, rados_ioctx_t io, rados_completion_t completion, const char *oid, time_t *mtime, int flags)
+ void rados_write_op_cmpext(rados_write_op_t write_op, const char *cmp_buf, size_t cmp_len, uint64_t off, int *prval)
void rados_write_op_omap_set(rados_write_op_t write_op, const char * const* keys, const char * const* vals, const size_t * lens, size_t num)
void rados_write_op_omap_rm_keys(rados_write_op_t write_op, const char * const* keys, size_t keys_len)
void rados_write_op_omap_clear(rados_write_op_t write_op)
pass
int rados_aio_write_op_operate(rados_write_op_t write_op, rados_ioctx_t io, rados_completion_t completion, const char *oid, time_t *mtime, int flags):
pass
+ void rados_write_op_cmpext(rados_write_op_t write_op, const char *cmp_buf, size_t cmp_len, uint64_t off, int *prval):
+ pass
void rados_write_op_omap_set(rados_write_op_t write_op, const char * const* keys, const char * const* vals, const size_t * lens, size_t num):
pass
void rados_write_op_omap_rm_keys(rados_write_op_t write_op, const char * const* keys, size_t keys_len):
super(InvalidArgumentError, self).__init__(
"RADOS invalid argument (%s)" % message, errno)
+class ExtendMismatch(Error):
+ def __init__(self, message, errno, offset):
+ super().__init__(
+ "object content does not match (%s)" % message, errno)
+ self.offset = offset
class OSError(Error):
""" `OSError` class, derived from `Error` """
ret = abs(ret)
if ret in errno_to_exception:
return errno_to_exception[ret](msg, errno=ret)
+ elif ret > MAX_ERRNO:
+ offset = ret - MAX_ERRNO
+ return ExtendMismatch(msg, ret, offset)
else:
return OSError(msg, errno=ret)
with nogil:
rados_write_op_writesame(self.write_op, _to_write, _data_len, _write_len, _offset)
+ def cmpext(self, cmp_buf: bytes, offset: int = 0):
+ """
+ Ensure that given object range (extent) satisfies comparison
+ :param cmp_buf: buffer containing bytes to be compared with object contents
+ :param offset: object byte offset at which to start the comparison
+ """
+ cdef:
+ char *_cmp_buf = cmp_buf
+ size_t _cmp_buf_len = len(cmp_buf)
+ uint64_t _offset = offset
+ with nogil:
+ rados_write_op_cmpext(self.write_op, _cmp_buf, _cmp_buf_len, _offset, NULL)
+
class WriteOpCtx(WriteOp, OpCtx):
"""write operation context manager"""