]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: send no_reply() to peon to drop ignored mdsbeacon
authorKefu Chai <kchai@redhat.com>
Tue, 2 Jun 2015 04:55:06 +0000 (12:55 +0800)
committerAbhishek Lekshmanan <abhishek.lekshmanan@ril.com>
Wed, 1 Jul 2015 17:56:51 +0000 (23:26 +0530)
so the peon can remove the ignored mdsbeacon request from the
routed_requets at seeing this reply, and hence no longer resend the
request.

Fixes: #11590
Signed-off-by: Kefu Chai <kchai@redhat.com>
(cherry picked from commit 72a37b3a8e145d8522ea67fc14ce2c5510b6852b)

src/mon/MDSMonitor.cc
src/mon/MDSMonitor.h

index fc2143610160942207674909d5ca483375827dd6..b9e28d284a0ec35f064229638e9f8341f5bc1013 100644 (file)
@@ -289,7 +289,8 @@ bool MDSMonitor::preprocess_beacon(MMDSBeacon *m)
     if (state != MDSMap::STATE_BOOT) {
       dout(7) << "mds_beacon " << *m << " is not in mdsmap" << dendl;
       mon->send_reply(m, new MMDSMap(mon->monmap->fsid, &mdsmap));
-      goto out;
+      m->put();
+      return true;
     } else {
       return false;  // not booted yet.
     }
@@ -356,9 +357,12 @@ bool MDSMonitor::preprocess_beacon(MMDSBeacon *m)
   mon->send_reply(m,
                  new MMDSBeacon(mon->monmap->fsid, m->get_global_id(), m->get_name(),
                                 mdsmap.get_epoch(), state, seq));
-  
-  // done
+  m->put();
+  return true;
+
  out:
+  // I won't reply this beacon, drop it.
+  mon->no_reply(m);
   m->put();
   return true;
 }
index 9a0dcdaa3b80a6b193a5b74f6023ddb5407e1fbd..5b858ee5aa70923b9aff88f3059ec5572400a1db 100644 (file)
@@ -58,10 +58,12 @@ class MDSMonitor : public PaxosService {
     void finish(int r) {
       if (r >= 0)
        mm->_updated(m);   // success
-      else if (r == -ECANCELED)
+      else if (r == -ECANCELED) {
+       mm->mon->no_reply(m);
        m->put();
-      else
+      } else {
        mm->dispatch((PaxosServiceMessage*)m);        // try again
+      }
     }
   };