/// move the iterator to a given hash position. this may (will!) be rounded to the nearest pg.
uint32_t seek(uint32_t pos);
+ /**
+ * Configure PGLS filter to be applied OSD-side (requires caller
+ * to know/understand the format expected by the OSD)
+ */
+ void set_filter(const bufferlist &bl);
+
private:
NObjectIterator(ObjListCtx *ctx_);
void get_next();
/// Start enumerating objects for a pool
- NObjectIterator nobjects_begin();
+ NObjectIterator nobjects_begin(const bufferlist &filter=bufferlist());
/// Start enumerating objects for a pool starting from a hash position
- NObjectIterator nobjects_begin(uint32_t start_hash_position);
+ NObjectIterator nobjects_begin(uint32_t start_hash_position,
+ const bufferlist &filter=bufferlist());
/// Iterator indicating the end of a pool
const NObjectIterator& nobjects_end() const;
/// move the iterator to a given hash position. this may (will!) be rounded to the nearest pg.
uint32_t seek(uint32_t pos);
+ void set_filter(const bufferlist &bl);
+
private:
NObjectIteratorImpl(ObjListCtx *ctx_);
void get_next();
return r;
}
+void librados::NObjectIteratorImpl::set_filter(const bufferlist &bl)
+{
+ assert(ctx);
+ if (ctx->nlc) {
+ ctx->nlc->filter = bl;
+ }
+
+ if (ctx->lc) {
+ ctx->lc->filter = bl;
+ }
+}
+
void librados::NObjectIteratorImpl::get_next()
{
const char *entry, *key, *nspace;
return impl->seek(pos);
}
+void librados::NObjectIterator::set_filter(const bufferlist &bl)
+{
+ impl->set_filter(bl);
+}
+
void librados::NObjectIterator::get_next()
{
assert(impl);
return tmp_lockers.size();
}
-librados::NObjectIterator librados::IoCtx::nobjects_begin()
+librados::NObjectIterator librados::IoCtx::nobjects_begin(
+ const bufferlist &filter)
{
rados_list_ctx_t listh;
rados_nobjects_list_open(io_ctx_impl, &listh);
NObjectIterator iter((ObjListCtx*)listh);
+ if (filter.length() > 0) {
+ iter.set_filter(filter);
+ }
iter.get_next();
return iter;
}
-librados::NObjectIterator librados::IoCtx::nobjects_begin(uint32_t pos)
+librados::NObjectIterator librados::IoCtx::nobjects_begin(
+ uint32_t pos, const bufferlist &filter)
{
rados_list_ctx_t listh;
rados_nobjects_list_open(io_ctx_impl, &listh);
NObjectIterator iter((ObjListCtx*)listh);
+ if (filter.length() > 0) {
+ iter.set_filter(filter);
+ }
iter.seek(pos);
return iter;
}