MDSDaemon的示例分析

這篇文章主要介紹了MDSDaemon的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)是一家以網(wǎng)絡(luò)技術(shù)公司,為中小企業(yè)提供網(wǎng)站維護、成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、網(wǎng)站備案、服務(wù)器租用、域名注冊、軟件開發(fā)、微信小程序定制開發(fā)等企業(yè)互聯(lián)網(wǎng)相關(guān)業(yè)務(wù),是一家有著豐富的互聯(lián)網(wǎng)運營推廣經(jīng)驗的科技公司,有著多年的網(wǎng)站建站經(jīng)驗,致力于幫助中小企業(yè)在互聯(lián)網(wǎng)讓打出自已的品牌和口碑,讓企業(yè)在互聯(lián)網(wǎng)上打開一個面向全國乃至全球的業(yè)務(wù)窗口:建站歡迎來電:13518219792

MDSDaemon和MDSRank一起形成了MDS進程核心架構(gòu),本文只描述MDSDaemon部分,MDSRank部分后面會講述。

MDSDaemon::asok_command()

|__對于command == “status"

     |__MDSDaemon::dump_status()          打印mds狀態(tài)信息

|__對于command != “status”且mds_rank != NULL

     |__MDSRank::handle_asok_command()     由MDSRank類來處理command請求

MDSDaemon::set_up_admin_socket()

|__創(chuàng)建AdminSocket類實例

|__創(chuàng)建MDSSocketHook類實例

|__調(diào)用AdminSocket->register_command()來注冊MDSDaemon支持的命令

MDSDaemon::init()

|__Objecter::init()

|__設(shè)置objecter/beacon/mdsdaemon可以進行消息分發(fā)和處理

|__設(shè)置monclient的messenger

|__MonClient::init()          初始化monclient

|__設(shè)置monclient的log信息

|__MonClient::authenticate()               向monitor進行認(rèn)證

|__Objecter::start()                              啟動Objecter

|__MonClient::sub_want(“mdsmap”)          向monitor索取mdsmap信息

|__set_up_admin_socket()                    設(shè)置admin通過socket可以處理的命令

|__SaftTimer::init()                              初始化定時器

|__Beacon::init()                                   初始化Beacon

|__Messenger::set_myname()               設(shè)置Messenger名稱

|__reset_tick()               

MDSDaemon::reset_tick()

|__創(chuàng)建C_MDS_Tick類對象

|__SafeTimer::add_event_after()               調(diào)度timer,當(dāng)定時器到達(dá)時,執(zhí)行MDSDaemon::tick()函數(shù)

MDSDaemon::tick()

|__reset_tick()                                        重置定時器

|__MDSRank::tick()                               執(zhí)行MDSRank的tick操作

MDSDaemon::handle_command(MCommand *m)          該函數(shù)主要用來處理參數(shù)提供的命令,之后將命令執(zhí)行結(jié)果反饋給調(diào)用者

|__檢查參數(shù)的有效性以及權(quán)限,對于不滿足條件的,設(shè)置反饋給調(diào)用者的信息

|__MDSDaemon::_handle_command()                     執(zhí)行具體的命令處理

|__創(chuàng)建MCommandReply類對象

|__設(shè)置該類對象的tid和data

|__m->get_connection->send_message()               將MCommandReply類對象發(fā)送給調(diào)用者

MDSDaemon::_handle_command()

|__cmd_getval()                         解析command

|__對于prefix="get_command_descriptions/injectargs/exit/respawn/heap/cpu_profiler”,則由MDSDaemon進行處理,否則由MDSRank::handle_command()進行處理

MDSDaemon::handle_mds_map(MMDSMap *m)

|__得到最新MDSMap的epoch值

|__將最新的MDSMap的epoch值于當(dāng)前mdsmap的epoch進行比較,若最新epoch小于當(dāng)前MDSMap的epoch,則直接返回

|__創(chuàng)建MDSMap類對象且用參數(shù)進行初始化

|__遍歷當(dāng)前MDSMap

     |__對于當(dāng)前MDSMap中的MDS進程在最新MDSMap中不存在,則設(shè)置該MDS進程down

|__對于在最新的MDSMap中此MDS作為STANDBY_REPLAY形式出現(xiàn),則得到standby_for_rank值且寫道whoami中

|__對于不是standby_replay模式

     |__MDSDaemon::_handle_mds_map()

|__對于是standby_replay模式

     |__對于變換了standby_for_rank的,則調(diào)用respawn()函數(shù)重新啟動MDS進程

     |__若mds_rank為空,則創(chuàng)建MDSRankDispatcher類對象且初始化

     |__mds_rank->handle_mds_map()                    由MDSRank處理mdsmap

MDSDaemon::_handle_mds_map()

|__對于最新MDSMap下此mds進程的狀態(tài)是STATE_STANDBY

     |__Beacon::set_want_state(STATE_STANDBY)                    更新Beacon中want state狀態(tài)為STATE_STANDBY

|__對于Beacon中want state=STATE_STANDBY          

     |__Beacon::set_want_state(STATE_BOOT)                          更新Beacon中want state狀態(tài)為STATE_BOOT

MDSDaemon::suicide()

|__刪除定時器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ù)重新啟動mds進程

MDSDaemon::ms_dispatch()

|__若beacon.get_want_state()==STATE_DNE,說明mds進程已經(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來處理osd map

MDSDaemon::ms_handle_reset()

|__判斷消息發(fā)送端是否是client,若不是則直接退出

|__判斷beacon.get_want_state()是否是STATE_DNE,若是則直接退出

|__根據(jù)參數(shù)Connection類對象得到Session類對象

|__Session對象為空

     |__Connection::mark_down()

|__Session對象不為空

     |__若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類對象得到Session類對象

|__Session對象不為空

     |__若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)容得到對應(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()     通過mds_rank得到session

     |__若session為空

          |__創(chuàng)建Session類實例

          |__初始化Session類實例

     |__得到認(rèn)證成功后的caps

          |__Session::auth_caps.parse()          解析認(rèn)證成功后的caps且保存到Session中

MDSDaemon::ms_handle_accept()

|__得到連接對應(yīng)的Session類實例

|__設(shè)置連接到session類實例,即:s->connection = con

MDSDaemon::is_clean_shutdown()

|__若mds_rank不為空

     |__返回mds_rank是否停止,即:mds_rank->is_stopped()

|__若mds_rank為空

     |__返回true

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“MDSDaemon的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

名稱欄目:MDSDaemon的示例分析
文章鏈接:http://muchs.cn/article36/gjchsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣微信公眾號、企業(yè)建站網(wǎng)站建設(shè)、移動網(wǎng)站建設(shè)外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管