久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MDSDaemon的示例分析

164次閱讀
沒有評論

共計 4819 個字符,預計需要花費 13 分鐘才能閱讀完成。

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

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

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

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計4819字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 盐津县| 海阳市| 深泽县| 佛冈县| 八宿县| 白山市| 丹东市| 集安市| 澎湖县| 商都县| 牙克石市| 顺义区| 高平市| 尼勒克县| 大邑县| 安徽省| 阳原县| 阆中市| 穆棱市| 玛曲县| 铁力市| 夏邑县| 高阳县| 兴义市| 桦甸市| 五莲县| 基隆市| 百色市| 南投县| 石家庄市| 丹巴县| 鲁甸县| 巴楚县| 保德县| 高碑店市| 平山县| 武邑县| 天峻县| 洛隆县| 永定县| 襄汾县|