]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
FileJournal: simply flush by waiting for completions to empty
authorSamuel Just <rexludorum@gmail.com>
Fri, 27 Apr 2012 04:29:45 +0000 (21:29 -0700)
committerSamuel Just <samuel.just@dreamhost.com>
Fri, 27 Apr 2012 20:58:58 +0000 (13:58 -0700)
Signed-off-by: Samuel Just <samuel.just@dreamhost.com>
ceph-object-corpus
src/os/FileJournal.cc
src/os/FileJournal.h

index 17d4afca1c84f5471c2824876099fef456a3209d..0b8475d5cbd442b6c2660a9ec45add80a23e26a3 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 17d4afca1c84f5471c2824876099fef456a3209d
+Subproject commit 0b8475d5cbd442b6c2660a9ec45add80a23e26a3
index c70b7cc7f9e1f7d15b389561f09ee990b8390efd..f6b4ec1d8ff352f937e78cd87acff2b3f6cc35c2 100644 (file)
@@ -825,6 +825,7 @@ void FileJournal::queue_completions_thru(uint64_t seq)
       completions.front().tracked_op->mark_event("journaled_completion_queued");
     completions.pop_front();
   }
+  queue_cond.Signal();
 }
 
 int FileJournal::prepare_single_write(bufferlist& bl, off64_t& queue_pos, uint64_t& orig_ops, uint64_t& orig_bytes)
@@ -1049,22 +1050,15 @@ void FileJournal::do_write(bufferlist& bl)
       }
     }
   }
-  {
-    Mutex::Locker locker(flush_lock);
-    writing = false;
-    write_empty_cond.Signal();
-  }
 }
 
 void FileJournal::flush()
 {
-  flush_queue();
+  dout(5) << "waiting for completions to empty" << dendl;
   {
-    Mutex::Locker locker(flush_lock);
-    while (writing) {
-      dout(5) << "flush waiting for writeq to empty and writes to complete" << dendl;
-      write_empty_cond.Wait(flush_lock);
-    }
+    Mutex::Locker l(queue_lock);
+    while (!completions.empty())
+      queue_cond.Wait(queue_lock);
   }
   dout(5) << "flush waiting for finisher" << dendl;
   finisher->wait_for_empty();
@@ -1115,11 +1109,6 @@ void FileJournal::write_thread_entry()
     }
 #endif
 
-    {
-      Mutex::Locker locker(flush_lock);
-      writing = true;
-    }
-
     Mutex::Locker locker(write_lock);
     uint64_t orig_ops = 0;
     uint64_t orig_bytes = 0;
@@ -1145,8 +1134,6 @@ void FileJournal::write_thread_entry()
     put_throttle(orig_ops, orig_bytes);
   }
 
-  Mutex::Locker locker(flush_lock);
-  write_empty_cond.Signal();
   dout(10) << "write_thread_entry finish" << dendl;
 }
 
@@ -1367,15 +1354,6 @@ void FileJournal::check_aio_completion()
 
     // maybe write queue was waiting for aio count to drop?
     aio_cond.Signal();
-
-    // wake up flush?
-    if (aio_queue.empty()) {
-      Mutex::Locker locker(flush_lock);
-      writing = false;
-      write_empty_cond.Signal();
-      assert(aio_num == 0);
-      assert(aio_bytes == 0);
-    }
   }
 }
 #endif
@@ -1438,15 +1416,6 @@ void FileJournal::pop_write()
   assert(write_lock.is_locked());
   Mutex::Locker locker(queue_lock);
   writeq.pop_front();
-  if (writeq.empty())
-    queue_cond.Signal();
-}
-
-void FileJournal::flush_queue()
-{
-  Mutex::Locker locker(queue_lock);
-  while (!writeq.empty())
-    queue_cond.Wait(queue_lock);
 }
 
 void FileJournal::commit_start()
index 509d879a497b20d1435b028ff380c7ecbdaf7340..10f380d20b5381bef27879cfd80fba99d06df65b 100644 (file)
@@ -32,7 +32,7 @@ using std::deque;
 /**
  * Implements journaling on top of block device or file.
  *
- * Lock ordering is write_lock > aio_lock > queue_lock > flush_lock
+ * Lock ordering is write_lock > aio_lock > queue_lock
  */
 class FileJournal : public Journal {
 public:
@@ -67,7 +67,6 @@ public:
   bool writeq_empty();
   write_item &peek_write();
   void pop_write();
-  void flush_queue();
   void submit_entry(uint64_t seq, bufferlist& bl, int alignment,
                    Context *oncommit,
                    TrackedOpRef osd_op = TrackedOpRef());
@@ -164,12 +163,6 @@ public:
 private:
   string fn;
 
-  /// Protected by flush_lock
-  Mutex flush_lock;
-  Cond write_empty_cond;
-  bool writing;
-  /// End protected by flush_lock
-
   char *zero_buf;
 
   off64_t max_size;
@@ -302,8 +295,6 @@ private:
     journaled_seq(0),
     plug_journal_completions(false),
     fn(f),
-    flush_lock("FileJournal::flush_lock"),
-    writing(false),
     zero_buf(NULL),
     max_size(0), block_size(0),
     is_bdev(false), directio(dio), aio(ai),