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):
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):