From f91faa7cef36c5ac86f94591f9650535a56b4193 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Tue, 31 Jul 2018 08:57:36 +0800 Subject: [PATCH] mds: change MDSRank::finished_queue to deque Signed-off-by: "Yan, Zheng" --- src/mds/MDSContext.h | 4 ++-- src/mds/MDSRank.cc | 17 +++++++++-------- src/mds/MDSRank.h | 6 +++--- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/mds/MDSContext.h b/src/mds/MDSContext.h index 29952f9b3dd3e..e9c0d52ab0109 100644 --- a/src/mds/MDSContext.h +++ b/src/mds/MDSContext.h @@ -17,7 +17,7 @@ #define MDS_CONTEXT_H #include -#include +#include #include "include/Context.h" #include "include/elist.h" @@ -52,7 +52,7 @@ public: using vec = vec_alloc; template class A> - using que_alloc = std::queue>>; + using que_alloc = std::deque>; using que = que_alloc; void complete(int r) override; diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 2289508410e18..2997baf719b6e 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -818,14 +818,15 @@ void MDSRank::_advance_queues() { assert(mds_lock.is_locked_by_me()); - while (!finished_queue.empty()) { + if (!finished_queue.empty()) { dout(7) << "mds has " << finished_queue.size() << " queued contexts" << dendl; - dout(10) << finished_queue << dendl; - decltype(finished_queue) ls; - ls.swap(finished_queue); - for (auto& c : ls) { - dout(10) << " finish " << c << dendl; - c->complete(0); + while (!finished_queue.empty()) { + auto fin = finished_queue.front(); + finished_queue.pop_front(); + + dout(10) << " finish " << fin << dendl; + fin->complete(0); + heartbeat_reset(); } } @@ -1535,7 +1536,7 @@ bool MDSRank::queue_one_replay() return false; } queue_waiter(replay_queue.front()); - replay_queue.pop(); + replay_queue.pop_front(); return true; } diff --git a/src/mds/MDSRank.h b/src/mds/MDSRank.h index 7cf3be6a65e5b..2b8807ae283ec 100644 --- a/src/mds/MDSRank.h +++ b/src/mds/MDSRank.h @@ -249,7 +249,7 @@ class MDSRank { } progress_thread; list waiting_for_nolaggy; - MDSInternalContextBase::vec finished_queue; + MDSInternalContextBase::que finished_queue; // Dispatch, retry, queues int dispatch_depth; void inc_dispatch_depth() { ++dispatch_depth; } @@ -304,7 +304,7 @@ class MDSRank { void queue_waiters(MDSInternalContextBase::vec& ls) { MDSInternalContextBase::vec v; v.swap(ls); - finished_queue.insert(finished_queue.end(), v.begin(), v.end()); + std::copy(v.begin(), v.end(), std::back_inserter(finished_queue)); progress_thread.signal(); } @@ -407,7 +407,7 @@ class MDSRank { waiting_for_mdsmap[e].push_back(c); } void enqueue_replay(MDSInternalContextBase *c) { - replay_queue.push(c); + replay_queue.push_back(c); } bool queue_one_replay(); -- 2.39.5