From: Sage Weil Date: Wed, 30 May 2018 18:56:52 +0000 (-0500) Subject: messages/MOSDMarkMeDown: use addrvec X-Git-Tag: v14.0.1~1208^2~18 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=2d148c5505e58204d889f1af39ec4332b5c23d64;p=ceph.git messages/MOSDMarkMeDown: use addrvec Signed-off-by: Sage Weil --- diff --git a/src/messages/MOSDMarkMeDown.h b/src/messages/MOSDMarkMeDown.h index 1a422d6abbb07..66e29063a87fd 100644 --- a/src/messages/MOSDMarkMeDown.h +++ b/src/messages/MOSDMarkMeDown.h @@ -19,35 +19,47 @@ class MOSDMarkMeDown : public PaxosServiceMessage { - static const int HEAD_VERSION = 2; - static const int COMPAT_VERSION = 2; + static const int HEAD_VERSION = 3; + static const int COMPAT_VERSION = 3; public: uuid_d fsid; - entity_inst_t target_osd; + int32_t target_osd; + entity_addrvec_t target_addrs; epoch_t epoch = 0; bool request_ack = false; // ack requested MOSDMarkMeDown() : PaxosServiceMessage(MSG_OSD_MARK_ME_DOWN, 0, HEAD_VERSION, COMPAT_VERSION) { } - MOSDMarkMeDown(const uuid_d &fs, const entity_inst_t& f, + MOSDMarkMeDown(const uuid_d &fs, int osd, const entity_addrvec_t& av, epoch_t e, bool request_ack) : PaxosServiceMessage(MSG_OSD_MARK_ME_DOWN, e, HEAD_VERSION, COMPAT_VERSION), - fsid(fs), target_osd(f), epoch(e), request_ack(request_ack) {} + fsid(fs), target_osd(osd), target_addrs(av), + epoch(e), request_ack(request_ack) {} private: ~MOSDMarkMeDown() override {} public: - entity_inst_t get_target() const { return target_osd; } epoch_t get_epoch() const { return epoch; } void decode_payload() override { auto p = payload.cbegin(); paxos_decode(p); + if (header.version <= 2) { + decode(fsid, p); + entity_inst_t i; + decode(i, p); + target_osd = i.name.num(); + target_addrs = entity_addrvec_t(i.addr); + decode(epoch, p); + decode(request_ack, p); + return; + } decode(fsid, p); decode(target_osd, p); + decode(target_addrs, p); decode(epoch, p); decode(request_ack, p); } @@ -55,8 +67,22 @@ public: void encode_payload(uint64_t features) override { using ceph::encode; paxos_encode(); + if (!HAVE_FEATURE(features, SERVER_NAUTILUS)) { + header.version = 2; + header.compat_version = 2; + encode(fsid, payload); + encode(entity_inst_t(entity_name_t::OSD(target_osd), + target_addrs.legacy_addr()), + payload, features); + encode(epoch, payload); + encode(request_ack, payload); + return; + } + header.version = HEAD_VERSION; + header.compat_version = COMPAT_VERSION; encode(fsid, payload); encode(target_osd, payload, features); + encode(target_addrs, payload, features); encode(epoch, payload); encode(request_ack, payload); } @@ -65,7 +91,8 @@ public: void print(ostream& out) const override { out << "MOSDMarkMeDown(" << "request_ack=" << request_ack - << ", target_osd=" << target_osd + << ", osd." << target_osd + << ", " << target_addrs << ", fsid=" << fsid << ")"; } diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index c9cdc5e0617d0..ff6aa16d52867 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2197,7 +2197,8 @@ public: op, new MOSDMarkMeDown( m->fsid, - m->get_target(), + m->target_osd, + m->target_addrs, m->get_epoch(), false)); // ACK itself does not request an ack } @@ -2209,8 +2210,7 @@ bool OSDMonitor::preprocess_mark_me_down(MonOpRequestRef op) { op->mark_osdmon_event(__func__); MOSDMarkMeDown *m = static_cast(op->get_req()); - int requesting_down = m->get_target().name.num(); - int from = m->get_orig_source().num(); + int from = m->target_osd; // check permissions if (check_source(m, m->fsid)) @@ -2222,7 +2222,7 @@ bool OSDMonitor::preprocess_mark_me_down(MonOpRequestRef op) if (!osdmap.exists(from) || osdmap.is_down(from) || - osdmap.get_addr(from) != m->get_target().addr) { + osdmap.get_addrs(from) != m->target_addrs) { dout(5) << "preprocess_mark_me_down from dead osd." << from << ", ignoring" << dendl; send_incremental(op, m->get_epoch()+1); @@ -2230,10 +2230,11 @@ bool OSDMonitor::preprocess_mark_me_down(MonOpRequestRef op) } // no down might be set - if (!can_mark_down(requesting_down)) + if (!can_mark_down(from)) goto reply; - dout(10) << "MOSDMarkMeDown for: " << m->get_target() << dendl; + dout(10) << "MOSDMarkMeDown for: " << m->get_orig_source() + << " " << m->target_addrs << dendl; return false; reply: @@ -2248,10 +2249,10 @@ bool OSDMonitor::prepare_mark_me_down(MonOpRequestRef op) { op->mark_osdmon_event(__func__); MOSDMarkMeDown *m = static_cast(op->get_req()); - int target_osd = m->get_target().name.num(); + int target_osd = m->target_osd; assert(osdmap.is_up(target_osd)); - assert(osdmap.get_addr(target_osd) == m->get_target().addr); + assert(osdmap.get_addrs(target_osd) == m->target_addrs); mon->clog->info() << "osd." << target_osd << " marked itself down"; pending_inc.new_state[target_osd] = CEPH_OSD_UP; diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 0ef31cd9a19f4..c0235cd170344 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -1243,11 +1243,14 @@ bool OSDService::prepare_to_stop() if (osdmap && osdmap->is_up(whoami)) { dout(0) << __func__ << " telling mon we are shutting down" << dendl; set_state(PREPARING_TO_STOP); - monc->send_mon_message(new MOSDMarkMeDown(monc->get_fsid(), - osdmap->get_inst(whoami), - osdmap->get_epoch(), - true // request ack - )); + monc->send_mon_message( + new MOSDMarkMeDown( + monc->get_fsid(), + whoami, + osdmap->get_addrs(whoami), + osdmap->get_epoch(), + true // request ack + )); utime_t now = ceph_clock_now(); utime_t timeout; timeout.set_from_double(now + cct->_conf->osd_mon_shutdown_timeout);