From 41cf3d93356bde801c32dec4b7a21ae065295aa7 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Tue, 13 Sep 2016 16:28:50 -0400 Subject: [PATCH] journal: expose ability to retrieve partial tag list Signed-off-by: Jason Dillaman (cherry picked from commit 277b6dd9f13a8390cbf7c9ac7a313813ecad4d27) --- src/journal/JournalMetadata.cc | 15 +++++++++------ src/journal/JournalMetadata.h | 3 ++- src/journal/Journaler.cc | 7 ++++++- src/journal/Journaler.h | 2 ++ src/test/journal/mock/MockJournaler.h | 7 +++++++ 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/journal/JournalMetadata.cc b/src/journal/JournalMetadata.cc index 08a7e9307aa45..36dffdfb4d8bc 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 4055f9937047f..880130126dd9e 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 c08a11b71de49..0c3e796e01fd6 100644 --- a/src/journal/Journaler.cc +++ b/src/journal/Journaler.cc @@ -313,7 +313,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 93a89bb1ff175..bac8f4d24c5ff 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 a40f234403cbf..ab1840684fd03 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); -- 2.39.5