中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MDSDaemon的示例分析

發布時間:2021-12-18 16:57:05 來源:億速云 閱讀:106 作者:小新 欄目:云計算

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

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

MDSDaemon::asok_command()

|__對于command == “status"

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

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

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

MDSDaemon::set_up_admin_socket()

|__創建AdminSocket類實例

|__創建MDSSocketHook類實例

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

MDSDaemon::init()

|__Objecter::init()

|__設置objecter/beacon/mdsdaemon可以進行消息分發和處理

|__設置monclient的messenger

|__MonClient::init()          初始化monclient

|__設置monclient的log信息

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

|__Objecter::start()                              啟動Objecter

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

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

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

|__Beacon::init()                                   初始化Beacon

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

|__reset_tick()               

MDSDaemon::reset_tick()

|__創建C_MDS_Tick類對象

|__SafeTimer::add_event_after()               調度timer,當定時器到達時,執行MDSDaemon::tick()函數

MDSDaemon::tick()

|__reset_tick()                                        重置定時器

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

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

|__檢查參數的有效性以及權限,對于不滿足條件的,設置反饋給調用者的信息

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

|__創建MCommandReply類對象

|__設置該類對象的tid和data

|__m->get_connection->send_message()               將MCommandReply類對象發送給調用者

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值于當前mdsmap的epoch進行比較,若最新epoch小于當前MDSMap的epoch,則直接返回

|__創建MDSMap類對象且用參數進行初始化

|__遍歷當前MDSMap

     |__對于當前MDSMap中的MDS進程在最新MDSMap中不存在,則設置該MDS進程down

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

|__對于不是standby_replay模式

     |__MDSDaemon::_handle_mds_map()

|__對于是standby_replay模式

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

     |__若mds_rank為空,則創建MDSRankDispatcher類對象且初始化

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

MDSDaemon::_handle_mds_map()

|__對于最新MDSMap下此mds進程的狀態是STATE_STANDBY

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

|__對于Beacon中want state=STATE_STANDBY          

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

MDSDaemon::suicide()

|__刪除定時器timer

|__clean_up_admin_socket()               清除admin socket

|__Beacon::set_want_state(STATE_DNE)          設置Beacon狀態為STATE_DNE

|__Beacon::shutdown()

|__若mds_rank不為空

     |__mds_rank->shutdown()

|__若mds_rank為空

     |__objecter->shutdown()

     |__timer->shudown()

     |__monc->shutdown()

     |__messenger->shutdown()

MDSDaemon::respawn()

|__調用execv()系統調用函數重新啟動mds進程

MDSDaemon::ms_dispatch()

|__若beacon.get_want_state()==STATE_DNE,說明mds進程已經處于shutdown狀態,因此不能處理消息

|__MDSDaemon::handle_core_message()          優先處理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()                                        調用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()

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

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

|__根據參數Connection類對象得到Session類對象

|__Session對象為空

     |__Connection::mark_down()

|__Session對象不為空

     |__若Session::is_closed()為真

          |__Connection::mark_down()

     |__Session::is_closed()不為真

          |__Session::put()

MDSDaemon::ms_handle_remote_reset()

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

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

|__根據參數Connection類對象得到Session類對象

|__Session對象不為空

     |__若Session::is_closed()為真

          |__Connection::mark_down()

     |__Session::is_closed()不為真

          |__Session::put()

MDSDaemon::ms_verify_authorizer()

|__判斷當前是否處于stopping,若是則直接退出

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

|__根據peer_type的內容得到對應的authorize_handler(這里主要有兩種handler,即:authorize_handler_cluster_registry/authorize_handler_service_registry。若peer_type==CEPH_ENTITY_TYPE_MDS則選擇前者)

|__authorize_handler->verify_authorizer()

|__若認證成功

     |__若mds_rank不為空

          |__mds_rank->sessionmap.get_session()     通過mds_rank得到session

     |__若session為空

          |__創建Session類實例

          |__初始化Session類實例

     |__得到認證成功后的caps

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

MDSDaemon::ms_handle_accept()

|__得到連接對應的Session類實例

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

MDSDaemon::is_clean_shutdown()

|__若mds_rank不為空

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

|__若mds_rank為空

     |__返回true

感謝你能夠認真閱讀完這篇文章,希望小編分享的“MDSDaemon的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

曲松县| 东阳市| 威海市| 习水县| 阿克陶县| 化隆| 滦南县| 乐东| 西平县| 多伦县| 双流县| 宝山区| 木里| 榆树市| 千阳县| 泗阳县| 信宜市| 黄山市| 万安县| 克拉玛依市| 廊坊市| 渑池县| 特克斯县| 临西县| 东乌珠穆沁旗| 北川| 南宫市| 洛川县| 博客| 永年县| 邯郸市| 渭南市| 湖州市| 奈曼旗| 沽源县| 梁平县| 沈丘县| 吴旗县| 许昌市| 淳安县| 内江市|