]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
journal: Journaler::stop_append should be async
authorJason Dillaman <dillaman@redhat.com>
Tue, 14 Jul 2015 12:42:57 +0000 (08:42 -0400)
committerJason Dillaman <dillaman@redhat.com>
Fri, 6 Nov 2015 01:42:41 +0000 (20:42 -0500)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/journal/Journaler.cc
src/journal/Journaler.h

index d75461125edacc6a28056b439b5a0d41b449db4a..1ba002cae37400748eb152bc55db5d4e88bb31eb 100644 (file)
@@ -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) {
index c6abf711007c5d3508adb2362ece3a12b0d8ff1d..14e45d69109a39cf842910e4ef61cc380b6d57a2 100644 (file)
@@ -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;