From: Sage Weil Date: Thu, 3 Apr 2014 18:51:45 +0000 (-0700) Subject: osd: fix 'ack' to be 'request_ack' in MOSDMarkMeDown X-Git-Tag: v0.81~59^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=58ace1aac3fccd79b252d8c485c343d75e5175d3;p=ceph.git osd: fix 'ack' to be 'request_ack' in MOSDMarkMeDown This field was passed along but always set to false. It did not seem to indicate whether this was/wasn't an ack (the reply message kept the same value) or whether an ack was requested (it was always false but we always reply). Change this by bumping the message encoding, renaming the field, and making old messages that are decoded force request_ack to true. Reply messages will always have request_ack false (although that part doesn't matter much since the fact that it is a reply is clear from context). Signed-off-by: Sage Weil --- diff --git a/src/messages/MOSDMarkMeDown.h b/src/messages/MOSDMarkMeDown.h index 1a0475dc5216..1b34b81f41f0 100644 --- a/src/messages/MOSDMarkMeDown.h +++ b/src/messages/MOSDMarkMeDown.h @@ -19,20 +19,23 @@ class MOSDMarkMeDown : public PaxosServiceMessage { - static const int HEAD_VERSION = 1; + static const int COMPAT_VERSION = 1; + static const int HEAD_VERSION = 2; public: uuid_d fsid; entity_inst_t target_osd; epoch_t epoch; - bool ack; + bool request_ack; // ack requested MOSDMarkMeDown() - : PaxosServiceMessage(MSG_OSD_MARK_ME_DOWN, 0, HEAD_VERSION) { } + : PaxosServiceMessage(MSG_OSD_MARK_ME_DOWN, 0, + HEAD_VERSION, COMPAT_VERSION) { } MOSDMarkMeDown(const uuid_d &fs, const entity_inst_t& f, - epoch_t e, bool ack) - : PaxosServiceMessage(MSG_OSD_MARK_ME_DOWN, e, HEAD_VERSION), - fsid(fs), target_osd(f), epoch(e), ack(ack) {} + 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) {} private: ~MOSDMarkMeDown() {} @@ -46,20 +49,22 @@ public: ::decode(fsid, p); ::decode(target_osd, p); ::decode(epoch, p); - ::decode(ack, p); + ::decode(request_ack, p); + if (header.version < 2) + request_ack = true; // assume true for older clients } void encode_payload(uint64_t features) { paxos_encode(); ::encode(fsid, payload); ::encode(target_osd, payload); ::encode(epoch, payload); - ::encode(ack, payload); + ::encode(request_ack, payload); } const char *get_type_name() const { return "osd_mark_me_down"; } void print(ostream& out) const { out << "osd_mark_me_down(" - << "ack=" << ack + << "request_ack=" << request_ack << ", target_osd=" << target_osd << ", fsid=" << fsid << ")"; diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 78799d00ca6c..1b1e9cb5b52a 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -866,7 +866,7 @@ public: m->fsid, m->get_target(), m->get_epoch(), - m->ack)); + false)); // ACK itself does not request an ack } ~C_AckMarkedDown() { m->put(); diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index edd5e8dc2d84..e53fa8c3e669 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -5227,7 +5227,7 @@ bool OSDService::prepare_to_stop() monc->send_mon_message(new MOSDMarkMeDown(monc->get_fsid(), osdmap->get_inst(whoami), osdmap->get_epoch(), - false + true // request ack )); utime_t now = ceph_clock_now(cct); utime_t timeout;