From: Sage Weil Date: Sun, 19 Feb 2012 05:37:09 +0000 (-0800) Subject: mon: discard messages while shutting down X-Git-Tag: v0.43~66 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1f240ca4ff32cf908c4325e3b6e6f71873f3680b;p=ceph.git mon: discard messages while shutting down 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 --- diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index d1532f310795..28b1ad23366e 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -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 diff --git a/src/mon/Monitor.h b/src/mon/Monitor.h index 6d0ed691c39d..d34d80f94be9 100644 --- a/src/mon/Monitor.h +++ b/src/mon/Monitor.h @@ -130,7 +130,8 @@ private: STATE_SLURPING, STATE_ELECTING, STATE_LEADER, - STATE_PEON + STATE_PEON, + STATE_SHUTDOWN }; int state;