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