ceph——创建pg

bool OSD::ms_dispatch(Message *m)
|---如果是标记osd down的话,直接返回service.got_stop_ack(), return true
|---如果osd已经已经停止服务,则return true |---do_waiters() //list<OpRequestRef> finished 只保存pg创建的请求 |---dispatch_op(next) |---handle_pg_create(op) //处理新的请求的时候,需要等待创建pg的请求处理完成 |---_dispatch(m) |---handle_osd_map(static_cast<MOSDMap*>(m)) //CEPH_MSG_OSD_MAP 创建osd map |--- |---handle_scrub(static_cast<MOSDScrub*>www.chaoyueyule.com/ (m)); //MSG_OSD_SCRUB |--- |---handle_command(static_cast<MCommand*>(m)) //MSG_COMMAND |--- |---osdmap //MSG_OSD_PG_CREATE,如果是创建pg的前提是osdmap存在 |---如果osdmap不存在,则waiting_for_osdmap.push_back(op),然后延时执行 |---dispatch_op(op) //只处理MSG_OSD_PG_CREATE |---handle_pg_create(op) |--- void OSD::handle_pg_create(OpRequestRef op) |---require_mon_peer //如果不是由MON发过来的消息,则不能执行 |---require_same_or_newer_map www.huayiyul.com //如果osdmap的epoch比消息中的epoch新,则不能执行 |---op->mark_started() //www.taohuayuan178.com op www.yingka178.com is struct OpRequest : public TrackedOp |---OpRequest::mark_flag_point |---for |---如果处于split(分裂)状态,则不用处理 |---如果已经存在pool,则不用处理 |---osdmap->pg_to_up_acting_osds(on, &up, www.00534.cn &up_primary, &acting, &acting_primary) //OSDMap.h |---void OSDMap::_pg_to_up_acting_osds( |---acting_primary 获取主OSD的id |---role = osdmap->calc_pg_role //OSDMap::calc_pg_role |---OSDMap::calc_pg_rank //确定OSD的角色 |---如果当前osd不是主osd(MON只给主OSD发消息),则不能处理 |---history.same_primary_since > m->epoch 如果之前处理的最新的epoch比该消息中的epoch新,则不能处理 |---enqueue_peering_evt |---op_shardedwq.queue //入队,等待process处理

猜你喜欢

转载自www.cnblogs.com/qwangxiao/p/9268912.html