]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osdc/Journaler: introduce STATE_STOPPING state 19610/head
authorYan, Zheng <zyan@redhat.com>
Mon, 11 Dec 2017 01:06:07 +0000 (09:06 +0800)
committerYan, Zheng <zyan@redhat.com>
Wed, 20 Dec 2017 02:38:48 +0000 (10:38 +0800)
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
src/osdc/Journaler.cc
src/osdc/Journaler.h

index 85e29e61c3d1a70fd49872d79c74855ce5a0989a..6b05fc906d58ae572a822082d135ab47d8ac8504 100644 (file)
@@ -155,7 +155,7 @@ public:
 void Journaler::recover(Context *onread) 
 {
   lock_guard l(lock);
-  if (stopping) {
+  if (is_stopping()) {
     onread->complete(-EAGAIN);
     return;
   }
@@ -215,7 +215,7 @@ void Journaler::_reread_head(Context *onfinish)
 void Journaler::_finish_reread_head(int r, bufferlist& bl, Context *finish)
 {
   lock_guard l(lock);
-  if (stopping) {
+  if (is_stopping()) {
     finish->complete(-EAGAIN);
     return;
   }
@@ -247,7 +247,7 @@ void Journaler::_finish_reread_head(int r, bufferlist& bl, Context *finish)
 void Journaler::_finish_read_head(int r, bufferlist& bl)
 {
   lock_guard l(lock);
-  if (stopping)
+  if (is_stopping())
     return;
 
   assert(state == STATE_READHEAD);
@@ -339,7 +339,7 @@ void Journaler::_finish_reprobe(int r, uint64_t new_end,
                                C_OnFinisher *onfinish)
 {
   lock_guard l(lock);
-  if (stopping) {
+  if (is_stopping()) {
     onfinish->complete(-EAGAIN);
     return;
   }
@@ -356,7 +356,7 @@ void Journaler::_finish_reprobe(int r, uint64_t new_end,
 void Journaler::_finish_probe_end(int r, uint64_t end)
 {
   lock_guard l(lock);
-  if (stopping)
+  if (is_stopping())
     return;
 
   assert(state == STATE_PROBING);
@@ -410,7 +410,7 @@ void Journaler::_finish_reread_head_and_probe(int r, C_OnFinisher *onfinish)
 {
   // Expect to be called back from finish_reread_head, which already takes lock
   // lock is locked
-  if (stopping) {
+  if (is_stopping()) {
     onfinish->complete(-EAGAIN);
     return;
   }
@@ -605,7 +605,7 @@ uint64_t Journaler::append_entry(bufferlist& bl)
 
 void Journaler::_do_flush(unsigned amount)
 {
-  if (stopping)
+  if (is_stopping())
     return;
   if (write_pos == flush_pos)
     return;
@@ -696,7 +696,7 @@ void Journaler::_do_flush(unsigned amount)
 void Journaler::wait_for_flush(Context *onsafe)
 {
   lock_guard l(lock);
-  if (stopping) {
+  if (is_stopping()) {
     onsafe->complete(-EAGAIN);
     return;
   }
@@ -729,7 +729,7 @@ void Journaler::_wait_for_flush(Context *onsafe)
 void Journaler::flush(Context *onsafe)
 {
   lock_guard l(lock);
-  if (stopping) {
+  if (is_stopping()) {
     onsafe->complete(-EAGAIN);
     return;
   }
@@ -1040,7 +1040,7 @@ void Journaler::_issue_read(uint64_t len)
 
 void Journaler::_prefetch()
 {
-  if (stopping)
+  if (is_stopping())
     return;
 
   ldout(cct, 10) << "_prefetch" << dendl;
@@ -1188,7 +1188,7 @@ void Journaler::erase(Context *completion)
 void Journaler::_finish_erase(int data_result, C_OnFinisher *completion)
 {
   lock_guard l(lock);
-  if (stopping) {
+  if (is_stopping()) {
     completion->complete(-EAGAIN);
     return;
   }
@@ -1254,7 +1254,7 @@ bool Journaler::try_read_entry(bufferlist& bl)
 void Journaler::wait_for_readable(Context *onreadable)
 {
   lock_guard l(lock);
-  if (stopping) {
+  if (is_stopping()) {
     finisher->queue(onreadable, -EAGAIN);
     return;
   }
@@ -1299,7 +1299,7 @@ void Journaler::trim()
 
 void Journaler::_trim()
 {
-  if (stopping)
+  if (is_stopping())
     return;
 
   assert(!readonly);
@@ -1552,8 +1552,8 @@ void Journaler::shutdown()
 
   ldout(cct, 1) << __func__ << dendl;
 
+  state = STATE_STOPPING;
   readable = false;
-  stopping = true;
 
   // Kick out anyone reading from journal
   error = -EAGAIN;
index df901b3eedfe5b23884ac8c8a05701ce1d1dd462..1c3028045e7f0acc5745de81975a31f5ea8e2339 100644 (file)
@@ -253,6 +253,7 @@ private:
   static const int STATE_ACTIVE = 3;
   static const int STATE_REREADHEAD = 4;
   static const int STATE_REPROBING = 5;
+  static const int STATE_STOPPING = 6;
 
   int state;
   int error;
@@ -411,7 +412,7 @@ public:
     fetch_len(0), temp_fetch_len(0),
     on_readable(0), on_write_error(NULL), called_write_error(false),
     expire_pos(0), trimming_pos(0), trimmed_pos(0), readable(false),
-    write_iohint(0), stopping(false)
+    write_iohint(0)
   {
   }
 
@@ -510,8 +511,6 @@ public:
    * to -EAGAIN.
    */
   void shutdown();
-protected:
-  bool stopping;
 public:
 
   // Synchronous getters
@@ -522,6 +521,7 @@ public:
   }
   file_layout_t& get_layout() { return layout; }
   bool is_active() { return state == STATE_ACTIVE; }
+  bool is_stopping() { return state == STATE_STOPPING; }
   int get_error() { return error; }
   bool is_readonly() { return readonly; }
   bool is_readable();