From 7fe435ccee9cf693b8e7d2136538498cab0b68c9 Mon Sep 17 00:00:00 2001 From: John Spray Date: Tue, 12 May 2015 14:57:17 +0100 Subject: [PATCH] mon: handle DNE beacon from MDS ...by calling fail_mds_gid for that MDS. Signed-off-by: John Spray --- src/mon/MDSMonitor.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index 34d18d5bfb78b..7dc6c92df8d26 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) -- 2.39.5