]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
pybind/rados: add Ioctx dup method
authorMykola Golub <mgolub@suse.com>
Wed, 11 Mar 2020 11:28:26 +0000 (11:28 +0000)
committerJason Dillaman <dillaman@redhat.com>
Tue, 9 Feb 2021 15:42:03 +0000 (10:42 -0500)
Signed-off-by: Mykola Golub <mgolub@suse.com>
(cherry picked from commit 0ec9cfcf13a1346a628962d315ed19a37e398eba)

src/pybind/rados/rados.pxd
src/pybind/rados/rados.pyx

index d4dddb38a17b448cb26f2d6d7ec5b00856db685c..14f6b503d1c7882fd98914a7e70f8674b7508eb4 100644 (file)
@@ -25,6 +25,7 @@ cdef class Rados(object):
 
 cdef class Ioctx(object):
     cdef:
+        object rados
         rados_ioctx_t io
         public object name
         public object state
index 19e1088d1df3762568613bee761d45a88425601e..bb07ad1855c3478b4b6ac0879f75780d6e09ee81 100644 (file)
@@ -1308,7 +1308,7 @@ Rados object in state %s." % self.state)
             ret = rados_ioctx_create(self.cluster, _ioctx_name, &ioctx)
         if ret < 0:
             raise make_ex(ret, "error opening pool '%s'" % ioctx_name)
-        io = Ioctx(ioctx_name)
+        io = Ioctx(self, ioctx_name)
         io.io = ioctx
         return io
 
@@ -1334,7 +1334,7 @@ Rados object in state %s." % self.state)
             ret = rados_ioctx_create2(self.cluster, _pool_id, &ioctx)
         if ret < 0:
             raise make_ex(ret, "error opening pool id '%s'" % pool_id)
-        io = Ioctx(str(pool_id))
+        io = Ioctx(self, str(pool_id))
         io.io = ioctx
         return io
 
@@ -2291,7 +2291,8 @@ cdef class Ioctx(object):
     """rados.Ioctx object"""
     # NOTE(sileht): attributes declared in .pyd
 
-    def __init__(self, name):
+    def __init__(self, rados, name):
+        self.rados = rados
         self.name = name
         self.state = "open"
 
@@ -2353,6 +2354,15 @@ cdef class Ioctx(object):
         completion_obj.rados_comp = completion
         return completion_obj
 
+    def dup(self):
+        """
+        Duplicate IoCtx
+        """
+
+        ioctx = self.rados.open_ioctx2(self.get_pool_id())
+        ioctx.set_namespace(self.get_namespace())
+        return ioctx
+
     @requires(('object_name', str_type), ('oncomplete', opt(Callable)))
     def aio_stat(self, object_name, oncomplete):
         """