From 5e6c8c5eeb6dcf667ebe1d59c30e46d8a4b8802c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 11 Sep 2008 10:41:57 -0700 Subject: [PATCH] use vector or deque in place of list in finisher, ebofs --- src/common/Finisher.cc | 2 +- src/common/Finisher.h | 14 +++++++++++--- src/ebofs/Ebofs.h | 2 +- src/include/Context.h | 24 +++++++++++++++++++++++- src/os/FileJournal.h | 4 ++-- src/os/JournalingObjectStore.h | 2 +- 6 files changed, 39 insertions(+), 9 deletions(-) diff --git a/src/common/Finisher.cc b/src/common/Finisher.cc index cd4b4cd570cce..9f00afbe232e6 100644 --- a/src/common/Finisher.cc +++ b/src/common/Finisher.cc @@ -23,7 +23,7 @@ void *Finisher::finisher_thread_entry() while (!finisher_stop) { while (!finisher_queue.empty()) { - list ls; + vector ls; ls.swap(finisher_queue); finisher_lock.Unlock(); diff --git a/src/common/Finisher.h b/src/common/Finisher.h index e3ef5bf1dec09..666ab40d02593 100644 --- a/src/common/Finisher.h +++ b/src/common/Finisher.h @@ -23,7 +23,7 @@ class Finisher { Mutex finisher_lock; Cond finisher_cond; bool finisher_stop; - list finisher_queue; + vector finisher_queue; void *finisher_thread_entry(); @@ -40,11 +40,19 @@ class Finisher { finisher_cond.Signal(); finisher_lock.Unlock(); } - void queue(list& ls) { + void queue(vector& ls) { finisher_lock.Lock(); - finisher_queue.splice(finisher_queue.end(), ls); + finisher_queue.insert(finisher_queue.end(), ls.begin(), ls.end()); finisher_cond.Signal(); finisher_lock.Unlock(); + ls.clear(); + } + void queue(deque& ls) { + finisher_lock.Lock(); + finisher_queue.insert(finisher_queue.end(), ls.begin(), ls.end()); + finisher_cond.Signal(); + finisher_lock.Unlock(); + ls.clear(); } void start(); diff --git a/src/ebofs/Ebofs.h b/src/ebofs/Ebofs.h index 3fab714a65d68..c3984bf100a73 100644 --- a/src/ebofs/Ebofs.h +++ b/src/ebofs/Ebofs.h @@ -56,7 +56,7 @@ protected: Cond sync_cond; uint64_t super_fsid; - map > commit_waiters; + map > commit_waiters; void prepare_super(version_t epoch, bufferptr& bp); void write_super(version_t epoch, bufferptr& bp); diff --git a/src/include/Context.h b/src/include/Context.h index d68fea99ed2d8..47bf0fea32bfd 100644 --- a/src/include/Context.h +++ b/src/include/Context.h @@ -44,9 +44,9 @@ inline void finish_contexts(std::list& finished, using std::cout; using std::endl; - list ls; if (finished.empty()) return; + list ls; ls.swap(finished); // swap out of place to avoid weird loops generic_dout(10) << ls.size() << " contexts to finish with " << result << dendl; @@ -60,6 +60,28 @@ inline void finish_contexts(std::list& finished, } } +inline void finish_contexts(std::vector& finished, + int result = 0) +{ + using std::cout; + using std::endl; + + if (finished.empty()) return; + + vector ls; + ls.swap(finished); // swap out of place to avoid weird loops + + generic_dout(10) << ls.size() << " contexts to finish with " << result << dendl; + for (std::vector::iterator it = ls.begin(); + it != ls.end(); + it++) { + Context *c = *it; + generic_dout(10) << "---- " << c << dendl; + c->finish(result); + delete c; + } +} + class C_NoopContext : public Context { public: void finish(int r) { } diff --git a/src/os/FileJournal.h b/src/os/FileJournal.h index 04872d6017cb9..3c46397a23dde 100644 --- a/src/os/FileJournal.h +++ b/src/os/FileJournal.h @@ -107,10 +107,10 @@ private: // to be journaled list > writeq; - list commitq; + deque commitq; // being journaled - list writingq; + deque writingq; // write thread Mutex write_lock; diff --git a/src/os/JournalingObjectStore.h b/src/os/JournalingObjectStore.h index 27cdf9024f339..0600f0a1463c1 100644 --- a/src/os/JournalingObjectStore.h +++ b/src/os/JournalingObjectStore.h @@ -23,7 +23,7 @@ protected: epoch_t super_epoch; Journal *journal; Finisher finisher; - map > commit_waiters; + map > commit_waiters; void journal_start() { finisher.start(); -- 2.39.5