]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
pybind/rados: add remove_omap_range2()
authorzhangjiao <zhangjiao_yewu@cmss.chinamobile.com>
Fri, 6 Nov 2020 09:19:29 +0000 (17:19 +0800)
committerzhangjiao <zhangjiao_yewu@cmss.chinamobile.com>
Mon, 9 Nov 2020 06:28:39 +0000 (14:28 +0800)
Signed-off-by: Zhang Jiao <zhangjiao_yewu@cmss.chinamobile.com>
src/pybind/rados/rados.pyx

index 00098a0150a7e3369e40bb2a9926ad701c7f491f..89d21ad3cd5e12cd144e9a88d8da7fc35ad6adc6 100644 (file)
@@ -305,6 +305,7 @@ cdef extern from "rados/librados.h" nogil:
     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)
+    void rados_write_op_omap_rm_range2(rados_write_op_t write_op, const char *key_begin, size_t key_begin_len, const char *key_end, size_t key_end_len)
     void rados_write_op_set_flags(rados_write_op_t write_op, int flags)
     void rados_write_op_setxattr(rados_write_op_t write_op, const char *name, const char *value, size_t value_len)
     void rados_write_op_rmxattr(rados_write_op_t write_op, const char *name)
@@ -4051,6 +4052,26 @@ returned %d, but should return zero on success." % (self.name, ret))
         with nogil:
             rados_write_op_omap_clear(_write_op.write_op)
 
+    def remove_omap_range2(self, write_op: WriteOp, key_begin: str, key_end: str):
+        """
+        Remove key/value pairs from an object whose keys are in the range
+        [key_begin, key_end)
+        :param write_op: write operation object
+        :param key_begin: the lower bound of the key range to remove
+        :param key_end: the upper bound of the key range to remove
+        """
+        key_begin_raw = cstr(key_begin, 'key_begin')
+        key_end_raw = cstr(key_end, 'key_end')
+        cdef:
+            WriteOp _write_op = write_op
+            char* _key_begin = key_begin_raw
+            size_t key_begin_len = len(key_begin)
+            char* _key_end = key_end_raw
+            size_t key_end_len = len(key_end)
+        with nogil:
+            rados_write_op_omap_rm_range2(_write_op.write_op, _key_begin, key_begin_len,
+                                           _key_end, key_end_len)
+
     def lock_exclusive(self, key: str, name: str, cookie: str, desc: str = "",
                        duration: Optional[int] = None,
                        flags: int = 0):