]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix 'ack' to be 'request_ack' in MOSDMarkMeDown
authorSage Weil <sage@inktank.com>
Thu, 3 Apr 2014 18:51:45 +0000 (11:51 -0700)
committerSage Weil <sage@inktank.com>
Fri, 2 May 2014 00:25:00 +0000 (17:25 -0700)
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 <sage@inktank.com>
src/messages/MOSDMarkMeDown.h
src/mon/OSDMonitor.cc
src/osd/OSD.cc

index 1a0475dc5216dea2f576e7607fed42f7a0296f0d..1b34b81f41f0215b6c5c27bed1aa334e35b5a184 100644 (file)
 
 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
        << ")";
index 78799d00ca6cd188d1868ffeec4863ee3f573509..1b1e9cb5b52a9fdfea6e4c4d8241c44e6f338fa9 100644 (file)
@@ -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();
index edd5e8dc2d84134d656309c547745efd44756942..e53fa8c3e66948051e2808fa022ca31cc68d3df1 100644 (file)
@@ -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;