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 1a0475dc521..1b34b81f41f 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 78799d00ca6..1b1e9cb5b52 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 edd5e8dc2d8..e53fa8c3e66 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;