]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
pybind, test: Use new rados_nobjects_list_open() variants
authorDavid Zafman <dzafman@redhat.com>
Thu, 25 Sep 2014 04:34:36 +0000 (21:34 -0700)
committerDavid Zafman <dzafman@redhat.com>
Mon, 20 Oct 2014 17:47:50 +0000 (10:47 -0700)
Add listing objects with namespaces to pybind rados testing

Signed-off-by: David Zafman <dzafman@redhat.com>
src/pybind/rados.py
src/test/pybind/test_rados.py

index 1208b13ffdb72a0b74c641b89cdcdaaaa9fcf374..c574f3908566fb168745b8087d50c4e4a3ebbc89 100644 (file)
@@ -15,6 +15,7 @@ from datetime import datetime
 
 ANONYMOUS_AUID = 0xffffffffffffffff
 ADMIN_AUID = 0
+LIBRADOS_ALL_NSPACES = '\001'
 
 class Error(Exception):
     """ `Error` class, derived from `Exception` """
@@ -765,7 +766,7 @@ class ObjectIterator(object):
     def __init__(self, ioctx):
         self.ioctx = ioctx
         self.ctx = c_void_p()
-        ret = run_in_thread(self.ioctx.librados.rados_objects_list_open,
+        ret = run_in_thread(self.ioctx.librados.rados_nobjects_list_open,
                             (self.ioctx.io, byref(self.ctx)))
         if ret < 0:
             raise make_ex(ret, "error iterating over the objects in ioctx '%s'" \
@@ -783,15 +784,15 @@ class ObjectIterator(object):
         """
         key = c_char_p()
         locator = c_char_p()
-        nspace = c_char_p("")
-        ret = run_in_thread(self.ioctx.librados.rados_objects_list_next,
-                            (self.ctx, byref(key), byref(locator)))
+        nspace = c_char_p()
+        ret = run_in_thread(self.ioctx.librados.rados_nobjects_list_next,
+                            (self.ctx, byref(key), byref(locator), byref(nspace)))
         if ret < 0:
             raise StopIteration()
         return Object(self.ioctx, key.value, locator.value, nspace.value)
 
     def __del__(self):
-        run_in_thread(self.ioctx.librados.rados_objects_list_close, (self.ctx,))
+        run_in_thread(self.ioctx.librados.rados_nobjects_list_close, (self.ctx,))
 
 class XattrIterator(object):
     """Extended attribute iterator"""
index 00813dc2270d0675e080969de441264b4b016dbf..bf86e0bf99ddba9c92b46eb0e68864ae67b993ad 100644 (file)
@@ -1,6 +1,6 @@
 from nose.tools import eq_ as eq, assert_raises
 from rados import (Rados, Error, Object, ObjectExists, ObjectNotFound,
-                   ANONYMOUS_AUID, ADMIN_AUID)
+                   ANONYMOUS_AUID, ADMIN_AUID, LIBRADOS_ALL_NSPACES)
 import threading
 import json
 import errno
@@ -178,6 +178,23 @@ class TestIoctx(object):
         object_names = [obj.key for obj in self.ioctx.list_objects()]
         eq(sorted(object_names), ['a', 'b', 'c', 'd'])
 
+    def test_list_ns_objects(self):
+        self.ioctx.write('a', '')
+        self.ioctx.write('b', 'foo')
+        self.ioctx.write_full('c', 'bar')
+        self.ioctx.append('d', 'jazz')
+        self.ioctx.set_namespace("ns1")
+        self.ioctx.write('ns1-a', '')
+        self.ioctx.write('ns1-b', 'foo')
+        self.ioctx.write_full('ns1-c', 'bar')
+        self.ioctx.append('ns1-d', 'jazz')
+        self.ioctx.append('d', 'jazz')
+        self.ioctx.set_namespace(LIBRADOS_ALL_NSPACES)
+        object_names = [(obj.nspace, obj.key) for obj in self.ioctx.list_objects()]
+        eq(sorted(object_names), [('', 'a'), ('','b'), ('','c'), ('','d'),\
+                ('ns1', 'd'), ('ns1', 'ns1-a'), ('ns1', 'ns1-b'),\
+                ('ns1', 'ns1-c'), ('ns1', 'ns1-d')])
+
     def test_xattrs(self):
         xattrs = dict(a='1', b='2', c='3', d='a\0b', e='\0')
         self.ioctx.write('abc', '')