summaryrefslogtreecommitdiff
path: root/src/librados/librados.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/librados/librados.cc')
-rw-r--r--src/librados/librados.cc25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/librados/librados.cc b/src/librados/librados.cc
index a916abcff26..f4a2a0c2786 100644
--- a/src/librados/librados.cc
+++ b/src/librados/librados.cc
@@ -488,6 +488,13 @@ librados::ObjectIterator librados::ObjectIterator::operator++(int)
return ret;
}
+uint32_t librados::ObjectIterator::seek(uint32_t pos)
+{
+ uint32_t r = rados_objects_list_seek(ctx.get(), pos);
+ get_next();
+ return r;
+}
+
void librados::ObjectIterator::get_next()
{
const char *entry, *key;
@@ -1136,6 +1143,16 @@ librados::ObjectIterator librados::IoCtx::objects_begin()
return iter;
}
+librados::ObjectIterator librados::IoCtx::objects_begin(uint32_t pos)
+{
+ rados_list_ctx_t listh;
+ rados_objects_list_open(io_ctx_impl, &listh);
+ ObjectIterator iter((ObjListCtx*)listh);
+ iter.seek(pos);
+ iter.get_next();
+ return iter;
+}
+
const librados::ObjectIterator& librados::IoCtx::objects_end() const
{
return ObjectIterator::__EndObjectIterator;
@@ -2534,6 +2551,14 @@ extern "C" void rados_objects_list_close(rados_list_ctx_t h)
delete lh;
}
+extern "C" uint32_t rados_objects_list_seek(rados_list_ctx_t listctx,
+ uint32_t pos)
+{
+ librados::ObjListCtx *lh = (librados::ObjListCtx *)listctx;
+ uint32_t r = lh->ctx->list_seek(lh->lc, pos);
+ return r;
+}
+
extern "C" uint32_t rados_objects_list_get_pg_hash_position(
rados_list_ctx_t listctx)
{