]> 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)
committerNathan Cutler <ncutler@suse.com>
Fri, 10 Jul 2015 20:08:03 +0000 (22:08 +0200)
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 342420fa8cd578108606a8c9795acecf2a52f26f..eb524d66ecdabb233d7bce26aceaf6ca040668d1 100644 (file)
@@ -251,7 +251,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.
     }
@@ -310,9 +311,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 901e93e379b7fe1c6dde618c0b5fd2bb1450fc31..230f0ac9e41e8aa7ca1d6ede1f0221e468df6646 100644 (file)
@@ -56,10 +56,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
+      }
     }
   };