From: zhangjiao Date: Fri, 11 Dec 2020 10:36:48 +0000 (+0800) Subject: pybind/rados: add ReadOp::cmpext() X-Git-Tag: v16.1.0~90^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=12004686b98779ac78f16eb8592ac1d9f08c7ab4;p=ceph.git pybind/rados: add ReadOp::cmpext() Signed-off-by: Zhang Jiao --- diff --git a/src/pybind/rados/c_rados.pxd b/src/pybind/rados/c_rados.pxd index f16e8678b98c..97ee5d0b9063 100644 --- a/src/pybind/rados/c_rados.pxd +++ b/src/pybind/rados/c_rados.pxd @@ -277,6 +277,7 @@ cdef extern from "rados/librados.h" nogil: void rados_write_op_zero(rados_write_op_t write_op, uint64_t offset, uint64_t len) void rados_write_op_exec(rados_write_op_t write_op, const char *cls, const char *method, const char *in_buf, size_t in_len, int *prval) void rados_write_op_writesame(rados_write_op_t write_op, const char *buffer, size_t data_len, size_t write_len, uint64_t offset) + void rados_read_op_cmpext(rados_read_op_t read_op, const char *cmp_buf, size_t cmp_len, uint64_t off, int *prval) void rados_read_op_omap_get_vals2(rados_read_op_t read_op, const char * start_after, const char * filter_prefix, uint64_t max_return, rados_omap_iter_t * iter, unsigned char *pmore, int * prval) void rados_read_op_omap_get_keys2(rados_read_op_t read_op, const char * start_after, uint64_t max_return, rados_omap_iter_t * iter, unsigned char *pmore, int * prval) void rados_read_op_omap_get_vals_by_keys(rados_read_op_t read_op, const char * const* keys, size_t keys_len, rados_omap_iter_t * iter, int * prval) diff --git a/src/pybind/rados/mock_rados.pxi b/src/pybind/rados/mock_rados.pxi index 32100de995cd..38053af8020e 100644 --- a/src/pybind/rados/mock_rados.pxi +++ b/src/pybind/rados/mock_rados.pxi @@ -415,6 +415,8 @@ cdef nogil: pass void rados_write_op_writesame(rados_write_op_t write_op, const char *buffer, size_t data_len, size_t write_len, uint64_t offset): pass + void rados_read_op_cmpext(rados_read_op_t read_op, const char *cmp_buf, size_t cmp_len, uint64_t off, int *prval): + pass void rados_read_op_omap_get_vals2(rados_read_op_t read_op, const char * start_after, const char * filter_prefix, uint64_t max_return, rados_omap_iter_t * iter, unsigned char *pmore, int * prval): pass void rados_read_op_omap_get_keys2(rados_read_op_t read_op, const char * start_after, uint64_t max_return, rados_omap_iter_t * iter, unsigned char *pmore, int * prval): diff --git a/src/pybind/rados/rados.pyx b/src/pybind/rados/rados.pyx index 0dc59fe43b94..dd917209ffae 100644 --- a/src/pybind/rados/rados.pyx +++ b/src/pybind/rados/rados.pyx @@ -1926,6 +1926,19 @@ cdef class ReadOp(object): with nogil: rados_release_read_op(self.read_op) + 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_read_op_cmpext(self.read_op, _cmp_buf, _cmp_buf_len, _offset, NULL) + def set_flags(self, flags: int = LIBRADOS_OPERATION_NOFLAG): """ Set flags for the last operation added to this read_op.