From 5a40ef22449481bca0223f48be8823a3c9c2b198 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Mon, 11 Dec 2017 09:06:07 +0800 Subject: [PATCH] osdc/Journaler: introduce STATE_STOPPING state Signed-off-by: "Yan, Zheng" --- src/osdc/Journaler.cc | 28 ++++++++++++++-------------- src/osdc/Journaler.h | 6 +++--- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/osdc/Journaler.cc b/src/osdc/Journaler.cc index 85e29e61c3d1a..6b05fc906d58a 100644 --- a/src/osdc/Journaler.cc +++ b/src/osdc/Journaler.cc @@ -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; diff --git a/src/osdc/Journaler.h b/src/osdc/Journaler.h index df901b3eedfe5..1c3028045e7f0 100644 --- a/src/osdc/Journaler.h +++ b/src/osdc/Journaler.h @@ -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(); -- 2.39.5