From: Josh Durgin Date: Fri, 2 Dec 2011 21:17:34 +0000 (-0800) Subject: rados.py: add list_pools method X-Git-Tag: v0.40~227 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c883100448bb7e86b4f0d52a425e0d0a278c79a0;p=ceph.git rados.py: add list_pools method Signed-off-by: Eric Chen Signed-off-by: Josh Durgin --- diff --git a/src/pybind/rados.py b/src/pybind/rados.py index 570696bd1500..3d0093889d56 100755 --- a/src/pybind/rados.py +++ b/src/pybind/rados.py @@ -227,6 +227,19 @@ Rados object in state %s." % (self.state)) if ret < 0: raise make_ex(ret, "error deleting pool '%s'" % pool_name) + def list_pools(self): + self.require_state("connected") + size = c_size_t(512) + while True: + c_names = create_string_buffer(size.value) + ret = self.librados.rados_pool_list(self.cluster, + byref(c_names), size) + if ret > size.value: + size = c_size_t(ret) + else: + break + return filter(lambda name: name != '', c_names.raw.split('\0')) + def open_ioctx(self, ioctx_name): self.require_state("connected") if not isinstance(ioctx_name, str): diff --git a/src/test/pybind/test_rados.py b/src/test/pybind/test_rados.py index 3490cf20e685..ed7b1bc7f8f6 100644 --- a/src/test/pybind/test_rados.py +++ b/src/test/pybind/test_rados.py @@ -23,6 +23,31 @@ class TestPool(object): self.rados.create_pool('foo') assert_raises(ObjectExists, self.rados.create_pool, 'foo') + def list_non_default_pools(self): + pools = self.rados.list_pools() + pools.remove('data') + pools.remove('metadata') + pools.remove('rbd') + return set(pools) + + def test_list_pools(self): + eq(set(), self.list_non_default_pools()) + self.rados.create_pool('foo') + eq(set(['foo']), self.list_non_default_pools()) + self.rados.create_pool('bar') + eq(set(['foo', 'bar']), self.list_non_default_pools()) + self.rados.create_pool('baz') + eq(set(['foo', 'bar', 'baz']), self.list_non_default_pools()) + self.rados.delete_pool('foo') + eq(set(['bar', 'baz']), self.list_non_default_pools()) + self.rados.delete_pool('baz') + eq(set(['bar']), self.list_non_default_pools()) + self.rados.delete_pool('bar') + eq(set(), self.list_non_default_pools()) + self.rados.create_pool('a' * 500) + eq(set(['a' * 500]), self.list_non_default_pools()) + self.rados.delete_pool('a' * 500) + class TestIoctx(object): def setUp(self):