mon: send no_reply() to peon to drop ignored mdsbeacon

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>
This commit is contained in:
Kefu Chai 2015-06-02 12:55:06 +08:00
parent 16e8e2cc82
commit 72a37b3a8e
2 changed files with 11 additions and 5 deletions

View File

@ -291,7 +291,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.
}
@ -358,9 +359,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;
}

View 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
}
}
};