From d1d460e3edd80c0684f597e75df6fc96489fc5ec Mon Sep 17 00:00:00 2001 From: zhengyin Date: Tue, 13 Aug 2019 22:27:15 -0400 Subject: [PATCH] pybind/rados: add get_id and get_name method in class Ioctx Signed-off-by: Zheng Yin --- src/pybind/rados/rados.pyx | 39 +++++++++++++++++++++++++++++++++++ src/test/pybind/test_rados.py | 6 ++++++ 2 files changed, 45 insertions(+) diff --git a/src/pybind/rados/rados.pyx b/src/pybind/rados/rados.pyx index 9220880d10a..01b25d207d2 100644 --- a/src/pybind/rados/rados.pyx +++ b/src/pybind/rados/rados.pyx @@ -232,6 +232,8 @@ cdef extern from "rados/librados.h" nogil: void rados_ioctx_snap_set_read(rados_ioctx_t io, rados_snap_t snap) int rados_ioctx_snap_list(rados_ioctx_t io, rados_snap_t * snaps, int maxlen) int rados_ioctx_snap_get_stamp(rados_ioctx_t io, rados_snap_t id, time_t * t) + uint64_t rados_ioctx_get_id(rados_ioctx_t io) + int rados_ioctx_get_pool_name(rados_ioctx_t io, char *buf, unsigned maxlen) int rados_ioctx_selfmanaged_snap_create(rados_ioctx_t io, rados_snap_t *snapid) @@ -3192,6 +3194,43 @@ returned %d, but should return zero on success." % (self.name, ret)) self.require_ioctx_open() return SnapIterator(self) + def get_pool_id(self): + """ + Get pool id + + :returns: int - pool id + """ + with nogil: + ret = rados_ioctx_get_id(self.io) + return ret; + + def get_pool_name(self): + """ + Get pool name + + :returns: str - pool name + """ + cdef: + int name_len = 10 + char *name = NULL + + try: + while True: + name = realloc_chk(name, name_len) + with nogil: + ret = rados_ioctx_get_pool_name(self.io, name, name_len) + if ret > 0: + break + elif ret != -errno.ERANGE: + raise make_ex(ret, "get pool name error") + else: + name_len = name_len * 2 + + return decode_cstr(name) + finally: + free(name) + + @requires(('snap_name', str_type)) def create_snap(self, snap_name): """ diff --git a/src/test/pybind/test_rados.py b/src/test/pybind/test_rados.py index c4ed1d248b3..9f8358b3287 100644 --- a/src/test/pybind/test_rados.py +++ b/src/test/pybind/test_rados.py @@ -384,6 +384,12 @@ class TestIoctx(object): stored_xattrs[key] = value eq(stored_xattrs, xattrs) + def test_get_pool_id(self): + eq(self.ioctx.get_pool_id(), self.rados.pool_lookup('test_pool')) + + def test_get_pool_name(self): + eq(self.ioctx.get_pool_name(), 'test_pool') + def test_create_snap(self): assert_raises(ObjectNotFound, self.ioctx.remove_snap, 'foo') self.ioctx.create_snap('foo') -- 2.39.5