您好,登錄后才能下訂單哦!
這篇文章主要介紹了MDSDaemon的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
MDSDaemon和MDSRank一起形成了MDS進(jìn)程核心架構(gòu),本文只描述MDSDaemon部分,MDSRank部分后面會(huì)講述。
MDSDaemon::asok_command()
|__對(duì)于command == “status"
|__MDSDaemon::dump_status() 打印mds狀態(tài)信息
|__對(duì)于command != “status”且mds_rank != NULL
|__MDSRank::handle_asok_command() 由MDSRank類來(lái)處理command請(qǐng)求
MDSDaemon::set_up_admin_socket()
|__創(chuàng)建AdminSocket類實(shí)例
|__創(chuàng)建MDSSocketHook類實(shí)例
|__調(diào)用AdminSocket->register_command()來(lái)注冊(cè)MDSDaemon支持的命令
MDSDaemon::init()
|__Objecter::init()
|__設(shè)置objecter/beacon/mdsdaemon可以進(jìn)行消息分發(fā)和處理
|__設(shè)置monclient的messenger
|__MonClient::init() 初始化monclient
|__設(shè)置monclient的log信息
|__MonClient::authenticate() 向monitor進(jìn)行認(rèn)證
|__Objecter::start() 啟動(dòng)Objecter
|__MonClient::sub_want(“mdsmap”) 向monitor索取mdsmap信息
|__set_up_admin_socket() 設(shè)置admin通過(guò)socket可以處理的命令
|__SaftTimer::init() 初始化定時(shí)器
|__Beacon::init() 初始化Beacon
|__Messenger::set_myname() 設(shè)置Messenger名稱
|__reset_tick()
MDSDaemon::reset_tick()
|__創(chuàng)建C_MDS_Tick類對(duì)象
|__SafeTimer::add_event_after() 調(diào)度timer,當(dāng)定時(shí)器到達(dá)時(shí),執(zhí)行MDSDaemon::tick()函數(shù)
MDSDaemon::tick()
|__reset_tick() 重置定時(shí)器
|__MDSRank::tick() 執(zhí)行MDSRank的tick操作
MDSDaemon::handle_command(MCommand *m) 該函數(shù)主要用來(lái)處理參數(shù)提供的命令,之后將命令執(zhí)行結(jié)果反饋給調(diào)用者
|__檢查參數(shù)的有效性以及權(quán)限,對(duì)于不滿足條件的,設(shè)置反饋給調(diào)用者的信息
|__MDSDaemon::_handle_command() 執(zhí)行具體的命令處理
|__創(chuàng)建MCommandReply類對(duì)象
|__設(shè)置該類對(duì)象的tid和data
|__m->get_connection->send_message() 將MCommandReply類對(duì)象發(fā)送給調(diào)用者
MDSDaemon::_handle_command()
|__cmd_getval() 解析command
|__對(duì)于prefix="get_command_descriptions/injectargs/exit/respawn/heap/cpu_profiler”,則由MDSDaemon進(jìn)行處理,否則由MDSRank::handle_command()進(jìn)行處理
MDSDaemon::handle_mds_map(MMDSMap *m)
|__得到最新MDSMap的epoch值
|__將最新的MDSMap的epoch值于當(dāng)前mdsmap的epoch進(jìn)行比較,若最新epoch小于當(dāng)前MDSMap的epoch,則直接返回
|__創(chuàng)建MDSMap類對(duì)象且用參數(shù)進(jìn)行初始化
|__遍歷當(dāng)前MDSMap
|__對(duì)于當(dāng)前MDSMap中的MDS進(jìn)程在最新MDSMap中不存在,則設(shè)置該MDS進(jìn)程down
|__對(duì)于在最新的MDSMap中此MDS作為STANDBY_REPLAY形式出現(xiàn),則得到standby_for_rank值且寫(xiě)道whoami中
|__對(duì)于不是standby_replay模式
|__MDSDaemon::_handle_mds_map()
|__對(duì)于是standby_replay模式
|__對(duì)于變換了standby_for_rank的,則調(diào)用respawn()函數(shù)重新啟動(dòng)MDS進(jìn)程
|__若mds_rank為空,則創(chuàng)建MDSRankDispatcher類對(duì)象且初始化
|__mds_rank->handle_mds_map() 由MDSRank處理mdsmap
MDSDaemon::_handle_mds_map()
|__對(duì)于最新MDSMap下此mds進(jìn)程的狀態(tài)是STATE_STANDBY
|__Beacon::set_want_state(STATE_STANDBY) 更新Beacon中want state狀態(tài)為STATE_STANDBY
|__對(duì)于Beacon中want state=STATE_STANDBY
|__Beacon::set_want_state(STATE_BOOT) 更新Beacon中want state狀態(tài)為STATE_BOOT
MDSDaemon::suicide()
|__刪除定時(shí)器timer
|__clean_up_admin_socket() 清除admin socket
|__Beacon::set_want_state(STATE_DNE) 設(shè)置Beacon狀態(tài)為STATE_DNE
|__Beacon::shutdown()
|__若mds_rank不為空
|__mds_rank->shutdown()
|__若mds_rank為空
|__objecter->shutdown()
|__timer->shudown()
|__monc->shutdown()
|__messenger->shutdown()
MDSDaemon::respawn()
|__調(diào)用execv()系統(tǒng)調(diào)用函數(shù)重新啟動(dòng)mds進(jìn)程
MDSDaemon::ms_dispatch()
|__若beacon.get_want_state()==STATE_DNE,說(shuō)明mds進(jìn)程已經(jīng)處于shutdown狀態(tài),因此不能處理消息
|__MDSDaemon::handle_core_message() 優(yōu)先處理MDSDaemon消息
|__若mds_rank不為空
|__mds_rank->ms_dispatch() 由mds_rank處理消息
MDSDaemon::ms_get_authorizer()
|__monc->auth->build_authorizer() 由monitor的auth模塊生成auth
MDSDaemon::handle_core_message()
|__ CEPH_MSG_MON_MAP
|__不處理
|__CEPH_MSG_MDS_MAP
|__handle_mds_map() 調(diào)用handle_mds_map()處理新的mds map消息
|__CEPH_MON_COMMAND
|__handle_command()
|__CEPH_COMMAND
|__handle_command()
|__CEPH_MSG_OSD_MAP
|__mds_rank->handle_osd_map() 由mds_rank來(lái)處理osd map
MDSDaemon::ms_handle_reset()
|__判斷消息發(fā)送端是否是client,若不是則直接退出
|__判斷beacon.get_want_state()是否是STATE_DNE,若是則直接退出
|__根據(jù)參數(shù)Connection類對(duì)象得到Session類對(duì)象
|__Session對(duì)象為空
|__Connection::mark_down()
|__Session對(duì)象不為空
|__若Session::is_closed()為真
|__Connection::mark_down()
|__Session::is_closed()不為真
|__Session::put()
MDSDaemon::ms_handle_remote_reset()
|__判斷消息發(fā)送端是否是client,若不是則直接退出
|__判斷beacon.get_want_state()是否是STATE_DNE,若是則直接退出
|__根據(jù)參數(shù)Connection類對(duì)象得到Session類對(duì)象
|__Session對(duì)象不為空
|__若Session::is_closed()為真
|__Connection::mark_down()
|__Session::is_closed()不為真
|__Session::put()
MDSDaemon::ms_verify_authorizer()
|__判斷當(dāng)前是否處于stopping,若是則直接退出
|__判斷beacon.get_want_state()是否是STATE_DNE,若是則直接退出
|__根據(jù)peer_type的內(nèi)容得到對(duì)應(yīng)的authorize_handler(這里主要有兩種handler,即:authorize_handler_cluster_registry/authorize_handler_service_registry。若peer_type==CEPH_ENTITY_TYPE_MDS則選擇前者)
|__authorize_handler->verify_authorizer()
|__若認(rèn)證成功
|__若mds_rank不為空
|__mds_rank->sessionmap.get_session() 通過(guò)mds_rank得到session
|__若session為空
|__創(chuàng)建Session類實(shí)例
|__初始化Session類實(shí)例
|__得到認(rèn)證成功后的caps
|__Session::auth_caps.parse() 解析認(rèn)證成功后的caps且保存到Session中
MDSDaemon::ms_handle_accept()
|__得到連接對(duì)應(yīng)的Session類實(shí)例
|__設(shè)置連接到session類實(shí)例,即:s->connection = con
MDSDaemon::is_clean_shutdown()
|__若mds_rank不為空
|__返回mds_rank是否停止,即:mds_rank->is_stopped()
|__若mds_rank為空
|__返回true
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“MDSDaemon的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。