From: John Spray Date: Tue, 12 May 2015 13:57:17 +0000 (+0100) Subject: mon: handle DNE beacon from MDS X-Git-Tag: v9.0.2~138^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7fe435ccee9cf693b8e7d2136538498cab0b68c9;p=ceph.git mon: handle DNE beacon from MDS ...by calling fail_mds_gid for that MDS. Signed-off-by: John Spray --- diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index 34d18d5bfb78..7dc6c92df8d2 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -579,6 +579,21 @@ bool MDSMonitor::prepare_beacon(MMDSBeacon *m) // after we remove the instance from the map. pending_mdsmap.mds_info.erase(gid); + // Respond to MDS, so that it knows it can continue to shut down + mon->send_reply(m, new MMDSBeacon(mon->monmap->fsid, m->get_global_id(), + m->get_name(), mdsmap.get_epoch(), state, seq)); + } else if (state == MDSMap::STATE_DNE) { + if (!mon->osdmon()->is_writeable()) { + dout(4) << __func__ << ": DNE from rank " << info.rank + << " waiting for osdmon writeable to blacklist it" << dendl; + mon->osdmon()->wait_for_writeable(new C_RetryMessage(this, m)); + return false; + } + + fail_mds_gid(gid); + assert(mon->osdmon()->is_writeable()); + request_proposal(mon->osdmon()); + // Respond to MDS, so that it knows it can continue to shut down mon->send_reply(m, new MMDSBeacon(mon->monmap->fsid, m->get_global_id(), m->get_name(), mdsmap.get_epoch(), state, seq)); @@ -940,6 +955,8 @@ void MDSMonitor::fail_mds_gid(mds_gid_t gid) } pending_mdsmap.mds_info.erase(gid); + + last_beacon.erase(gid); } mds_gid_t MDSMonitor::gid_from_arg(const std::string& arg, std::ostream &ss)