溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MDSDaemon的示例分析

發(fā)布時(shí)間:2021-12-18 16:57:05 來(lái)源:億速云 閱讀:106 作者:小新 欄目:云計(jì)算

這篇文章主要介紹了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í)!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI