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)
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.
}
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;
}
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
+ }
}
};