From: Jason Dillaman Date: Tue, 13 Sep 2016 20:28:50 +0000 (-0400) Subject: journal: expose ability to retrieve partial tag list X-Git-Tag: v11.0.1~98^2~4 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=277b6dd9f13a8390cbf7c9ac7a313813ecad4d27;p=ceph-ci.git journal: expose ability to retrieve partial tag list Signed-off-by: Jason Dillaman --- diff --git a/src/journal/JournalMetadata.cc b/src/journal/JournalMetadata.cc index 08a7e9307aa..36dffdfb4d8 100644 --- a/src/journal/JournalMetadata.cc +++ b/src/journal/JournalMetadata.cc @@ -256,21 +256,23 @@ struct C_GetTags : public Context { const std::string &oid; const std::string &client_id; AsyncOpTracker &async_op_tracker; + uint64_t start_after_tag_tid; boost::optional tag_class; JournalMetadata::Tags *tags; Context *on_finish; const uint64_t MAX_RETURN = 64; - uint64_t start_after_tag_tid = 0; bufferlist out_bl; C_GetTags(CephContext *cct, librados::IoCtx &ioctx, const std::string &oid, const std::string &client_id, AsyncOpTracker &async_op_tracker, + uint64_t start_after_tag_tid, const boost::optional &tag_class, JournalMetadata::Tags *tags, Context *on_finish) : cct(cct), ioctx(ioctx), oid(oid), client_id(client_id), - async_op_tracker(async_op_tracker), tag_class(tag_class), tags(tags), - on_finish(on_finish) { + async_op_tracker(async_op_tracker), + start_after_tag_tid(start_after_tag_tid), tag_class(tag_class), + tags(tags), on_finish(on_finish) { async_op_tracker.start_op(); } virtual ~C_GetTags() { @@ -579,11 +581,12 @@ void JournalMetadata::get_tag(uint64_t tag_tid, Tag *tag, Context *on_finish) { ctx->send(); } -void JournalMetadata::get_tags(const boost::optional &tag_class, +void JournalMetadata::get_tags(uint64_t start_after_tag_tid, + const boost::optional &tag_class, Tags *tags, Context *on_finish) { C_GetTags *ctx = new C_GetTags(m_cct, m_ioctx, m_oid, m_client_id, - m_async_op_tracker, tag_class, - tags, on_finish); + m_async_op_tracker, start_after_tag_tid, + tag_class, tags, on_finish); ctx->send(); } diff --git a/src/journal/JournalMetadata.h b/src/journal/JournalMetadata.h index 4055f993704..880130126dd 100644 --- a/src/journal/JournalMetadata.h +++ b/src/journal/JournalMetadata.h @@ -71,7 +71,8 @@ public: void allocate_tag(uint64_t tag_class, const bufferlist &data, Tag *tag, Context *on_finish); void get_tag(uint64_t tag_tid, Tag *tag, Context *on_finish); - void get_tags(const boost::optional &tag_class, Tags *tags, + void get_tags(uint64_t start_after_tag_tid, + const boost::optional &tag_class, Tags *tags, Context *on_finish); inline const Settings &get_settings() const { diff --git a/src/journal/Journaler.cc b/src/journal/Journaler.cc index 3487b756178..108e428e541 100644 --- a/src/journal/Journaler.cc +++ b/src/journal/Journaler.cc @@ -316,7 +316,12 @@ void Journaler::get_tag(uint64_t tag_tid, Tag *tag, Context *on_finish) { } void Journaler::get_tags(uint64_t tag_class, Tags *tags, Context *on_finish) { - m_metadata->get_tags(tag_class, tags, on_finish); + m_metadata->get_tags(0, tag_class, tags, on_finish); +} + +void Journaler::get_tags(uint64_t start_after_tag_tid, uint64_t tag_class, + Tags *tags, Context *on_finish) { + m_metadata->get_tags(start_after_tag_tid, tag_class, tags, on_finish); } void Journaler::start_replay(ReplayHandler *replay_handler) { diff --git a/src/journal/Journaler.h b/src/journal/Journaler.h index 49d1f67aec9..1ba56c62b6c 100644 --- a/src/journal/Journaler.h +++ b/src/journal/Journaler.h @@ -96,6 +96,8 @@ public: cls::journal::Tag *tag, Context *on_finish); void get_tag(uint64_t tag_tid, Tag *tag, Context *on_finish); void get_tags(uint64_t tag_class, Tags *tags, Context *on_finish); + void get_tags(uint64_t start_after_tag_tid, uint64_t tag_class, Tags *tags, + Context *on_finish); void start_replay(ReplayHandler *replay_handler); void start_live_replay(ReplayHandler *replay_handler, double interval); diff --git a/src/test/journal/mock/MockJournaler.h b/src/test/journal/mock/MockJournaler.h index 54867666cd9..814c90ecd92 100644 --- a/src/test/journal/mock/MockJournaler.h +++ b/src/test/journal/mock/MockJournaler.h @@ -110,6 +110,8 @@ struct MockJournaler { MOCK_METHOD3(get_tag, void(uint64_t, cls::journal::Tag *, Context *)); MOCK_METHOD3(get_tags, void(uint64_t, journal::Journaler::Tags*, Context*)); + MOCK_METHOD4(get_tags, void(uint64_t, uint64_t, journal::Journaler::Tags*, + Context*)); MOCK_METHOD1(start_replay, void(::journal::ReplayHandler *replay_handler)); MOCK_METHOD2(start_live_replay, void(ReplayHandler *, double)); @@ -220,6 +222,11 @@ struct MockJournalerProxy { Context *on_finish) { MockJournaler::get_instance().get_tags(tag_class, tags, on_finish); } + void get_tags(uint64_t start_after_tag_tid, uint64_t tag_class, + journal::Journaler::Tags *tags, Context *on_finish) { + MockJournaler::get_instance().get_tags(start_after_tag_tid, tag_class, tags, + on_finish); + } void start_replay(::journal::ReplayHandler *replay_handler) { MockJournaler::get_instance().start_replay(replay_handler);