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

index a573cffd26278c3ee447e1cedb8595dc0885ce2c..59463c8a1df70b114b0cf692b942a83cac601530 100644 (file)
@@ -153,7 +153,7 @@ public:
 void Journaler::recover(Context *onread) 
 {
   lock_guard l(lock);
-  if (stopping) {
+  if (is_stopping()) {
     onread->complete(-EAGAIN);
     return;
   }
@@ -213,7 +213,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;
   }
@@ -245,7 +245,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);
@@ -337,7 +337,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;
   }
@@ -354,7 +354,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);
@@ -408,7 +408,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;
   }
@@ -603,7 +603,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;
@@ -694,7 +694,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;
   }
@@ -727,7 +727,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;
   }
@@ -1035,7 +1035,7 @@ void Journaler::_issue_read(uint64_t len)
 
 void Journaler::_prefetch()
 {
-  if (stopping)
+  if (is_stopping())
     return;
 
   ldout(cct, 10) << "_prefetch" << dendl;
@@ -1183,7 +1183,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;
   }
@@ -1249,7 +1249,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;
   }
@@ -1294,7 +1294,7 @@ void Journaler::trim()
 
 void Journaler::_trim()
 {
-  if (stopping)
+  if (is_stopping())
     return;
 
   assert(!readonly);
@@ -1547,8 +1547,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();