void OSD::ms_fast_dispatch(Message *m)
{
//判断osd服务是否正在关闭,若是则减少一个message的引用,引用为0时空间会被释放。
if (service.is_stopping()) {
m->put();
return;
}
//将message结构转变成OpRequest结构,有智能指针op指向。
OpRequestRef op = op_tracker.create_request<OpRequest>(m);
{
#ifdef WITH_LTTNG
osd_reqid_t reqid = op->get_reqid();
#endif
tracepoint(osd, ms_fast_dispatch, reqid.name._type,
reqid.name._num, reqid.tid, reqid.inc);
}
//获取next_osdmap的引用,并注册该osdmap的epoch,作为预留
OSDMapRef nextmap = service.get_nextmap_reserved();
//获取与该message相关的session。
Session *session = static_cast<Session*>(m->get_connection()->get_priv());
if (session) {
{
Mutex::Locker l(session->session_dispatch_lock);
update_waiting_for_pg(session, nextmap);
session->waiting_on_map.push_back(op);
dispatch_session_waiting(session, nextmap);
}
session->put();
}
//释放之前预留的osdmap epoch。
service.release_map(nextmap);
}
OSD::ms_fast_dispatch
最新推荐文章于 2023-04-13 23:26:53 发布