]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: discard messages while shutting down
authorSage Weil <sage.weil@dreamhost.com>
Sun, 19 Feb 2012 05:37:09 +0000 (21:37 -0800)
committerSage Weil <sage.weil@dreamhost.com>
Sun, 19 Feb 2012 05:41:13 +0000 (21:41 -0800)
Add SHUTDOWN state.  Ignore any msgr callbacks if set.

Fixes crash like

2012-02-18T21:57:58.912 INFO:teuthology.task.ceph:Shutting down mon daemons...
2012-02-18T21:57:58.912 DEBUG:teuthology.task.ceph.mon.a:waiting for process to exit
2012-02-18T21:57:58.913 INFO:teuthology.task.ceph.mon.a.err:2012-02-18 21:57:58.927759 7fe98dfa1700 mon.a@1(peon) e1 *** Got Signal Terminated ***
2012-02-18T21:57:59.014 INFO:teuthology.task.ceph.mon.a.err:*** Caught signal (Segmentation fault) **
2012-02-18T21:57:59.014 INFO:teuthology.task.ceph.mon.a.err: in thread 7fe98d7a0700
2012-02-18T21:57:59.014 INFO:teuthology.task.ceph.mon.a.err: ceph version 0.41-382-gc1db900 (commit:c1db9009c2cde9dc7ab8857b0d28a1b6d931e98a)
2012-02-18T21:57:59.015 INFO:teuthology.task.ceph.mon.a.err: 1: /tmp/cephtest/binary/usr/local/bin/ceph-mon() [0x5b0871]
2012-02-18T21:57:59.015 INFO:teuthology.task.ceph.mon.a.err: 2: (()+0xfb40) [0x7fe991a1eb40]
2012-02-18T21:57:59.015 INFO:teuthology.task.ceph.mon.a.err: 3: (PerfCounters::set(int, unsigned long)+0x1a) [0x52008a]
2012-02-18T21:57:59.015 INFO:teuthology.task.ceph.mon.a.err: 4: (PGMonitor::update_logger()+0x96) [0x4d4bf6]
2012-02-18T21:57:59.015 INFO:teuthology.task.ceph.mon.a.err: 5: (PGMonitor::update_from_paxos()+0xa70) [0x4e0980]
2012-02-18T21:57:59.016 INFO:teuthology.task.ceph.mon.a.err: 6: (Monitor::_ms_dispatch(Message*)+0x143b) [0x47bd6b]
2012-02-18T21:57:59.016 INFO:teuthology.task.ceph.mon.a.err: 7: (Monitor::ms_dispatch(Message*)+0x90) [0x489210]
2012-02-18T21:57:59.016 INFO:teuthology.task.ceph.mon.a.err: 8: (SimpleMessenger::dispatch_entry()+0x89a) [0x53959a]
2012-02-18T21:57:59.016 INFO:teuthology.task.ceph.mon.a.err: 9: (SimpleMessenger::DispatchThread::entry()+0x1c) [0x46358c]
2012-02-18T21:57:59.016 INFO:teuthology.task.ceph.mon.a.err: 10: (()+0x7971) [0x7fe991a16971]
2012-02-18T21:57:59.017 INFO:teuthology.task.ceph.mon.a.err: 11: (clone()+0x6d) [0x7fe9902a592d]

which is analogous to #2014.

Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
src/mon/Monitor.cc
src/mon/Monitor.h

index d1532f31079560d21a2b90563b65b265c922e1a5..28b1ad23366e404f337132559604ee26cee47761 100644 (file)
@@ -343,6 +343,8 @@ void Monitor::shutdown()
 {
   dout(1) << "shutdown" << dendl;
   
+  state = STATE_SHUTDOWN;
+
   if (admin_hook) {
     AdminSocket* admin_socket = cct->get_admin_socket();
     admin_socket->unregister_command("mon_status");
@@ -1336,6 +1338,9 @@ bool Monitor::_ms_dispatch(Message *m)
 {
   bool ret = true;
 
+  if (state == STATE_SHUTDOWN)
+    return false;
+
   Connection *connection = m->get_connection();
   MonSession *s = NULL;
   bool reuse_caps = false;
@@ -1644,6 +1649,9 @@ bool Monitor::ms_handle_reset(Connection *con)
 {
   dout(10) << "ms_handle_reset " << con << " " << con->get_peer_addr() << dendl;
 
+  if (state == STATE_SHUTDOWN)
+    return false;
+
   // ignore lossless monitor sessions
   if (con->get_peer_type() == CEPH_ENTITY_TYPE_MON)
     return false;
@@ -1835,6 +1843,9 @@ bool Monitor::ms_get_authorizer(int service_id, AuthAuthorizer **authorizer, boo
 {
   dout(10) << "ms_get_authorizer for " << ceph_entity_type_name(service_id) << dendl;
 
+  if (state == STATE_SHUTDOWN)
+    return false;
+
   // we only connect to other monitors; every else connects to us.
   if (service_id != CEPH_ENTITY_TYPE_MON)
     return false;
@@ -1895,6 +1906,9 @@ bool Monitor::ms_verify_authorizer(Connection *con, int peer_type,
           << " " << ceph_entity_type_name(peer_type)
           << " protocol " << protocol << dendl;
 
+  if (state == STATE_SHUTDOWN)
+    return false;
+
   if (peer_type == CEPH_ENTITY_TYPE_MON &&
       auth_supported.is_supported_auth(CEPH_AUTH_CEPHX)) {
     // monitor, and cephx is enabled
index 6d0ed691c39dbb321a58afdc45c1a58598dde9eb..d34d80f94be914ae0b69ef1b5d71a566ea5a576e 100644 (file)
@@ -130,7 +130,8 @@ private:
     STATE_SLURPING,
     STATE_ELECTING,
     STATE_LEADER,
-    STATE_PEON
+    STATE_PEON,
+    STATE_SHUTDOWN
   };
   int state;