From 82e9c623f8fddb8e392aec541a4b9c2a1a7a22de Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 4 Nov 2008 13:01:01 -0800 Subject: [PATCH] osd: clean up shutdown sequence --- src/osd/OSD.cc | 27 ++++++++++++++------------- src/osd/OSD.h | 2 ++ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 0e996f618c0d2..a9589a78cd64d 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -446,27 +446,32 @@ int OSD::shutdown() timer.cancel_all(); timer.join(); - osd_lock.Unlock(); - - // flush data to disk - store->sync(); - - stop_recovery_thread(); - - osd_lock.Lock(); - // finish ops wait_for_no_ops(); + dout(10) << "no ops" << dendl; // stop threads delete threadpool; threadpool = 0; + stop_recovery_thread(); + dout(10) << "recovery thread stopped" << dendl; + // zap waiters (bleh, this is messy) finished_lock.Lock(); finished.clear(); finished_lock.Unlock(); + // flush data to disk + osd_lock.Unlock(); + dout(10) << "sync" << dendl; + store->sync(); + int r = store->umount(); + delete store; + store = 0; + dout(10) << "sync done" << dendl; + osd_lock.Lock(); + // close pgs for (hash_map::iterator p = pg_map.begin(); p != pg_map.end(); @@ -478,10 +483,6 @@ int OSD::shutdown() // shut everything else down //monitor->shutdown(); messenger->shutdown(); - - osd_lock.Unlock(); - int r = store->umount(); - osd_lock.Lock(); return r; } diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 5eb1565a0cc05..265cc2a0d2a3f 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -446,11 +446,13 @@ private: recovery_lock.Unlock(); } void stop_recovery_thread() { + osd_lock.Unlock(); recovery_lock.Lock(); recovery_stop = true; recovery_cond.Signal(); recovery_lock.Unlock(); recovery_thread.join(); + osd_lock.Lock(); } void queue_for_removal(int osd, pg_t pgid) { -- 2.39.5