]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: clean up shutdown sequence
authorSage Weil <sage@newdream.net>
Tue, 4 Nov 2008 21:01:01 +0000 (13:01 -0800)
committerSage Weil <sage@newdream.net>
Tue, 4 Nov 2008 21:01:01 +0000 (13:01 -0800)
src/osd/OSD.cc
src/osd/OSD.h

index 0e996f618c0d2a56bdacae3fb0a2bae231b4d9d5..a9589a78cd64d2f5c3bb900d89c675b5b84dd405 100644 (file)
@@ -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<pg_t, PG*>::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;
 }
 
index 5eb1565a0cc05fe95a6a7399de8031a78024b57b..265cc2a0d2a3f4723193732e497595fd1b3ff058 100644 (file)
@@ -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) {