mon/Monitor: early return if routed request is not found

* early return if routed request is not found in routed_requests.
  reduce the indent level, for better readability.
* do not look up the request twice. for better performance.
* use unique_ptr<> for holding the request, for better readability

Signed-off-by: Kefu Chai <kchai@redhat.com>
This commit is contained in:
Kefu Chai 2021-03-11 17:09:57 +08:00
parent 4bcf9c3422
commit 164ff62aa5

View File

@ -4190,10 +4190,16 @@ void Monitor::handle_route(MonOpRequestRef op)
dout(10) << "handle_route tid " << m->session_mon_tid << " null" << dendl;
// look it up
if (m->session_mon_tid) {
if (routed_requests.count(m->session_mon_tid)) {
RoutedRequest *rr = routed_requests[m->session_mon_tid];
if (!m->session_mon_tid) {
dout(10) << " not a routed request, ignoring" << dendl;
return;
}
auto found = routed_requests.find(m->session_mon_tid);
if (found == routed_requests.end()) {
dout(10) << " don't have routed request tid " << m->session_mon_tid << dendl;
return;
}
std::unique_ptr<RoutedRequest> rr{found->second};
// reset payload, in case encoding is dependent on target features
if (m->msg) {
m->msg->clear_payload();
@ -4206,15 +4212,8 @@ void Monitor::handle_route(MonOpRequestRef op)
true, MonOpRequestRef());
}
ceph_assert(rr->tid == m->session_mon_tid && rr->session->routed_request_tids.count(m->session_mon_tid));
routed_requests.erase(m->session_mon_tid);
routed_requests.erase(found);
rr->session->routed_request_tids.erase(m->session_mon_tid);
delete rr;
} else {
dout(10) << " don't have routed request tid " << m->session_mon_tid << dendl;
}
} else {
dout(10) << " not a routed request, ignoring" << dendl;
}
}
void Monitor::resend_routed_requests()