]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rados.py: add list_pools method
authorJosh Durgin <josh.durgin@dreamhost.com>
Fri, 2 Dec 2011 21:17:34 +0000 (13:17 -0800)
committerJosh Durgin <josh.durgin@dreamhost.com>
Fri, 2 Dec 2011 21:38:19 +0000 (13:38 -0800)
Signed-off-by: Eric Chen <Eric_YH_Chen@wistron.com>
Signed-off-by: Josh Durgin <josh.durgin@dreamhost.com>
src/pybind/rados.py
src/test/pybind/test_rados.py

index 570696bd15000247c5a6dd6759e97ab558b3d0d8..3d0093889d561d027fc6d1e7c3efe20cd700f66b 100755 (executable)
@@ -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):
index 3490cf20e6854654849573ed06fc24e05ee99617..ed7b1bc7f8f61dc1055e720813f08e56d93b741f 100644 (file)
@@ -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):