From: Yehuda Sadeh Date: Wed, 8 Feb 2017 23:32:17 +0000 (-0800) Subject: objecter: new calls to support cursor with nobjects X-Git-Tag: v12.0.1~154^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=81fcaa692355036de170527108d74a259cc80117;p=ceph.git objecter: new calls to support cursor with nobjects Signed-off-by: Yehuda Sadeh --- diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 9f20843b4ae0..440b7c8a6acb 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -3515,6 +3515,33 @@ uint32_t Objecter::list_nobjects_seek(NListContext *list_context, return pos; } +uint32_t Objecter::list_nobjects_seek(NListContext *list_context, + const hobject_t& cursor) +{ + shared_lock rl(rwlock); + ldout(cct, 10) << "list_nobjects_seek " << list_context << dendl; + list_context->pos = cursor; + list_context->at_end_of_pool = false; + pg_t actual = osdmap->raw_pg_to_pg(pg_t(cursor.get_hash(), list_context->pool_id)); + list_context->current_pg = actual.ps(); + list_context->sort_bitwise = true; + return list_context->current_pg; +} + +void Objecter::list_nobjects_get_cursor(NListContext *list_context, + hobject_t *cursor) +{ + shared_lock rl(rwlock); + if (list_context->list.empty()) { + *cursor = list_context->pos; + } else { + const librados::ListObjectImpl& entry = list_context->list.front(); + const string *key = (entry.locator.empty() ? &entry.oid : &entry.locator); + uint32_t h = osdmap->get_pg_pool(list_context->pool_id)->hash_key(*key, entry.nspace); + *cursor = hobject_t(entry.oid, entry.locator, list_context->pool_snap_seq, h, list_context->pool_id, entry.nspace); + } +} + void Objecter::list_nobjects(NListContext *list_context, Context *onfinish) { ldout(cct, 10) << __func__ << " pool_id " << list_context->pool_id diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index fc8dce0304cd..3dd8e96efbfa 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -2731,6 +2731,8 @@ public: void list_nobjects(NListContext *p, Context *onfinish); uint32_t list_nobjects_seek(NListContext *p, uint32_t pos); + uint32_t list_nobjects_seek(NListContext *list_context, const hobject_t& c); + void list_nobjects_get_cursor(NListContext *list_context, hobject_t *c); hobject_t enumerate_objects_begin(); hobject_t enumerate_objects_end();