From: Jason Dillaman Date: Tue, 14 Jul 2015 12:42:57 +0000 (-0400) Subject: journal: Journaler::stop_append should be async X-Git-Tag: v10.0.1~102^2~19 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4740a666622cfd37d20c548306f040279b6fe5be;p=ceph.git journal: Journaler::stop_append should be async Signed-off-by: Jason Dillaman --- diff --git a/src/journal/Journaler.cc b/src/journal/Journaler.cc index d75461125eda..1ba002cae374 100644 --- a/src/journal/Journaler.cc +++ b/src/journal/Journaler.cc @@ -26,6 +26,18 @@ namespace { static const std::string JOURNAL_HEADER_PREFIX = "journal."; static const std::string JOURNAL_OBJECT_PREFIX = "journal_data."; +struct C_DeleteRecorder : public Context { + JournalRecorder *recorder; + Context *on_safe; + C_DeleteRecorder(JournalRecorder *_recorder, Context *_on_safe) + : recorder(_recorder), on_safe(_on_safe) { + } + virtual void finish(int r) { + delete recorder; + on_safe->complete(r); + } +}; + } // anonymous namespace using namespace cls::journal; @@ -137,19 +149,11 @@ void Journaler::start_append() { m_metadata, 0, 0, 0); } -int Journaler::stop_append() { +void Journaler::stop_append(Context *on_safe) { assert(m_recorder != NULL); - C_SaferCond cond; - flush(&cond); - int r = cond.wait(); - if (r < 0) { - return r; - } - - delete m_recorder; + flush(new C_DeleteRecorder(m_recorder, on_safe)); m_recorder = NULL; - return 0; } Future Journaler::append(const std::string &tag, const bufferlist &payload_bl) { diff --git a/src/journal/Journaler.h b/src/journal/Journaler.h index c6abf711007c..14e45d69109a 100644 --- a/src/journal/Journaler.h +++ b/src/journal/Journaler.h @@ -47,7 +47,7 @@ public: void start_append(); Future append(const std::string &tag, const bufferlist &bl); void flush(Context *on_safe); - int stop_append(); + void stop_append(Context *on_safe); private: librados::IoCtx m_header_ioctx;