91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Ceph Jewel版本三副本寫操作的示例分析

發布時間:2021-12-17 10:07:13 來源:億速云 閱讀:156 作者:小新 欄目:云計算

小編給大家分享一下Ceph Jewel版本三副本寫操作的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

一、主OSD寫處理流程

OSD::ms_fast_dispatch()

|__OSD::dispatch_session_waiting()

     |__OSD::dispatch_op_fast()

          |__OSD::handle_op()

               |__OSD::get_pg_or_queue_for_pg()           找到OpRequest中對應的PG和Pool信息

               |__OSD::enqueue_op()

                    |__PG::queue_op()

                         |__OSD::ShardedThreadPool::ShardedWQ::queue()     將PG和Op一起放入隊列中

OSD::ShardedOpWQ::_process()          負責處理OSD::ShardedThreadPool::ShardedWQ隊列中的Op

|__PGQueueable::RunVis::operator()(const OpRequestRef &op)

     |__OSD::dequeue_op()

          |__ReplicatedPG::do_request()

               |__檢查當前PG是否處于flush或peering狀態,若是則將op放入waiting_for_peered隊列中等待PG變成可用狀態

               |__檢查當前PG是否處于Active狀態,若不是則將op放入waiting_for_active隊列中

               |__檢查當前PG是否處于REPLAY狀態,若是則將op放入waiting_for_active隊列中

               |__ReplicatedPG::do_op()

                    |__RepliatedPG::do_pg_op()               對于請求中包含對PG的操作CEPH_OSD_RMW_FLAG_PGOP

                    |__根據op請求創建hobject_t類對象(head)

                    |__檢查對象名字長度/對象locator key長度/對象locator名稱空間長度是否大于osd_max_object_name_len

                    |__通過FileStore檢查object的head是否有效

                    |__檢查op請求地址是否在OSDMap的blacklist中

                    |__對于寫請求,檢查寫請求的數據大小是否大于osd_max_write_size值

                    |__對于op請求的head目前不可讀,則將op放入waiting_for_unreadable_object隊列中且調用maybe_kick_recovery()函數嘗試啟動recovery

                    |__ReplicatedPG::is_degraded_or_backfilling_object()          檢查當前op請求的head是否處于recovery或backfill狀態

                    |__ReplicatedPG::wait_for_degraded_object()                       將當前op請求的head放入waiting_for_degraded_object隊列中

                    |__檢查head是否在objects_blocked_on_degraded_snap隊列中,若是則將當前op請求的head放入waiting_for_degraded_object隊列中

                    |__檢查head是否在objects_blocked_on_snap_promotion隊列中,若是則將當前op請求的head放入waiting_for_blocked_object隊列中

                    |__檢查head是否在objects_blocked_on_cache_full隊列中,若是則將當前op請求的head放入waiting_for_cache_not_full隊列中

                    |__檢查head的snapdir是否不可讀,若是則將head的snapdir放入waiting_for_unreadable_object隊列中且調用maybe_kick_recovery()函數嘗試啟動recovery

                    |__檢查head的snapdir是否處于recovery或backfill狀態,若是則將head的snapdir放入waiting_for_degraded_object隊列中

                    |__對于op寫請求已經在PGLog中,則若已經完成了寫操作則直接給客戶端返回MOSDOpReply消息且設置CEPH_OSD_FLAG_ACK,否則將op放入到waiting_for_ack或waiting_for_ondisk隊列中

                    |__ReplicatedPG::find_object_context()               得到object context信息

                    |__檢查object context是否處于io blocked狀態,若是則將op請求放入到waiting_for_blocked_object或waiting_for_degraded_object隊列中

                    |__ReplicatedPG::execute_ctx()     

                         |__ReplicatedPG::prepare_transaction()

                         |__創建MOSDOpReply消息實例

                         |__ReplicatedPG::calc_trim_to()                    計算trim PGLog

                         |__ReplicatedPG::register_on_applied()          注冊on_applied回調處理函數,對于op請求需要ack且此時沒有向客戶端發送過sent_ack或sent_disk,則創建MOSDOpReply消息且在消息上添加CEPH_OSD_FLAG_ACK標識后將MOSDOpReply消息發送給客戶端

                         |__ReplicatedPG::register_on_commit()          注冊on_committed回調處理函數, 對于op請求需要ack且此時沒有向客戶端發送過sent_disk,則創建MOSDOpReply消息且在消息上添加CEPH_OSD_FLAG_ACK和CEPH_OSD_FLAG_ONDISK標識后將MOSDOpReply消息發送給客戶端

                         |__ReplicatedPG::register_on_success()          注冊on_success回調處理函數

                         |__ReplicatedPG::register_on_finish()               注冊on_finish回調處理函數

                         |__ReplicatedPG::new_repop()                         創建RepGather類對象

                         |__ReplicatedPG::issue_repop()

                              |__創建C_OSD_RepopCommit類對象,即:所有副本都完成commit后的回調函數類,在該函數中設置repop->all_committed=true,最后調用ReplicatedPG::eval_repop()

                              |__創建C_OSD_RepopApplied類對象,即:所有副本都完成applied后的回調函數類,在該函數中設置repop->all_applied=true,最后調用ReplicatedPG::eval_repop()

                              |__ReplicatedBackend::submit_transaction()

                                   |__ReplicatedBackend::issue_op()     

                                        |__ReplicatedBackend::generate_subop()           創建MOSDRepOp消息類對象

                                        |__ReplicatedPG::send_message_osd_cluster()         

                                             |__OSD::send_message_osd_cluster()               將MOSDRepOp消息發送給副本所在的OSDs節點

                                   |__創建C_OSD_OnOpApplied類對象,用來處理本地applied完成后的回調函數類

                                   |__創建C_OSD_OnOpCommit類對象,用來處理本地commit完成后的回調函數類

                                   |__RepliatedPG::queue_transactions()

                                        |__ObjectStore::queue_transactions()

                                             |__FileStore::queue_transactions()     

                                                  |__JournalingObjectStore::_op_journal_tranactions()

                                                       |__FileJournal::submit_entry()                    將寫日志請求提交到日志任務隊列中,日志寫完后回調C_JournaledAhead類對象

                         |__ReplicatedPG::eval_repop()

                              |__檢查repop->rep_done是否完成

                              |__檢查repop->all_commit,即:是否所有副本都完成日志寫入,若完成則回調on_committed()回調函數

                              |__檢查repop->all_applied,即:是否所有副本都完成落盤,若完成則回調on_applied()回調函數

                              |__檢查repop->all_commit和repop->all_applied,即:是否所有副本都完成寫入操作,若完成則調用repop->on_success()回調函數

本地寫日志完成后的處理流程

C_JournaledAhead::finish()

|__FileStore::_journaled_ahead()

     |__FileStore::queue_op()                    將寫請求放入到FileStore的op_wq隊列中

     |__回調C_OSD_OnOpCommit類對象的處理函數

本地數據落盤處理流程

FileStore::_do_op()

|__從op_wq隊列中讀取寫請求

|__FileStore::_do_transactions()     執行實際的寫數據操作

本地數據落完完成后的處理流程

FileStore::_finish_op()

|__回調C_OSD_OnOpApplied類對象的處理函數

二、副本OSD處理主OSD發送過來的寫請求(消息是MOSDRepOp,消息類型是MSG_OSD_REPOP)

OSD::ms_fast_dispatch()

|__OSD::dispatch_session_waiting()

     |__OSD::dispatch_op_fast()

          |__OSD::handle_replica_op()

               |__檢查發送方有效性

               |__OSD::get_pg_or_queue_for_pg()           找到OpRequest中對應的PG和Pool信息

               |__OSD::enqueue_op()

                    |__PG::queue_op()

                         |__OSD::ShardedThreadPool::ShardedWQ::queue()     將PG和Op一起放入隊列中

OSD::ShardedOpWQ::_process()          負責處理OSD::ShardedThreadPool::ShardedWQ隊列中的Op

|__PGQueueable::RunVis::operator()(const OpRequestRef &op)

     |__OSD::dequeue_op()

          |__ReplicatedPG::do_request()

               |__ReplicatedBackend::handle_message()

                    |__ReplicatedBackend::sub_op_modify()

                         |__ReplicatedPG::log_operation()

                              |__PG::append_log()                         寫PGLog

                         |__創建C_OSD_RepModifyCommit類實例,用于處理日志commit完成后的回調處理

                         |__創建C_OSD_RepModifyApply類實例,用于處理數據落盤完成后的回調處理

                         |__ReplicatedPG::queue_transactions()

                              |__FileStore::queue_transactions()

                                   |__JournalingObjectStore::_op_journal_tranactions()

                                        |__FileJournal::submit_entry()                    將寫日志請求提交到日志任務隊列中,日志寫完后回調C_JournaledAhead類對象

本地寫日志完成后的處理流程

C_JournaledAhead::finish()

|__FileStore::_journaled_ahead()

     |__FileStore::queue_op()                    將寫請求放入到FileStore的op_wq隊列中

     |__回調C_OSD_RepModifyCommit類對象的處理函數

本地數據落盤處理流程

FileStore::_do_op()

|__從op_wq隊列中讀取寫請求

|__FileStore::_do_transactions()     執行實際的寫數據操作

本地數據落完完成后的處理流程

FileStore::_finish_op()

|__回調C_OSD_RepModifyApply類對象的處理函數

三、主OSD處理副本OSDs發送過來的MOSDRepOpReply消息處理流程(消息類型MSG_OSD_REPOPREPLY)

OSD::ms_fast_dispatch()

|__OSD::dispatch_session_waiting()

     |__OSD::dispatch_op_fast()

          |__OSD::handle_replica_op()

               |__檢查發送方有效性

               |__OSD::get_pg_or_queue_for_pg()           找到OpRequest中對應的PG和Pool信息

               |__OSD::enqueue_op()

                    |__PG::queue_op()

                         |__OSD::ShardedThreadPool::ShardedWQ::queue()     將PG和Op一起放入隊列中

OSD::ShardedOpWQ::_process()          負責處理OSD::ShardedThreadPool::ShardedWQ隊列中的Op

|__PGQueueable::RunVis::operator()(const OpRequestRef &op)

     |__OSD::dequeue_op()

          |__ReplicatedPG::do_request()

               |__ReplicatedBackend::handle_message()

                    |__ReplicatedBackend::sub_op_modify_reply()

                         |__對于設置了CEPH_OSD_FLAG_ONDISK標識的消息來說,刪除waiting_for_commit隊列中對應的OSD ID

                         |__刪除waiting_for_applied隊列中對應的OSD ID

                         |__對于waiting_for_commit隊列為空,則調用C_OSD_RepopCommit類對象的回調函數

                         |__對于waiting_for_applied隊列為空,則調用C_OSD_RepopApplied類對象的回調函數

四、回調函數類處理

C_OSD_RepModifyCommit類處理流程

C_OSD_RepModifyCommit::finish()

|__ReplicatedBackend::sub_op_modify_commit()

     |__創建MOSDRepOpReply消息且設置CEPH_OSD_FLAG_ONDISK標識

     |__ReplicatedPG::send_message_osd_cluster()

          |__OSD::send_message_osd_cluster()                    將MOSDRepOpReply消息發送回主OSD

C_OSD_RepModifyApply類處理流程

C_OSD_RepModifyApply::finish()

|__ReplicatedBackend::sub_op_modify_applied()

     |__創建MOSDRepOpReply消息且設置CEPH_OSD_FLAG_ACK標識(針對沒有進行日志處理的情況)

     |__ReplicatedPG::send_message_osd_cluster()

          |__OSD::send_message_osd_cluster()                    將MOSDRepOpReply消息發送回主OSD

C_OSD_OnOpCommit處理流程

C_OSD_OnOpCommit::finish()

|__ReplicatedBackend::op_commit()

     |__刪除waiting_for_commit數組中對應OSD ID信息

     |__檢查waiting_for_commit數組是否為空,若為空則調用C_OSD_RepopCommit類對象的回調函數

C_OSD_OnOpApplied處理流程

C_OSD_OnOpApplied::finish()

|__ReplicatedBackend::op_applied()

     |__刪除waiting_for_applied數組中對應OSD ID信息

     |__檢查waiting_for_applied數組是否為空,若為空則調用C_OSD_RepopApplied類對象的回調函數

看完了這篇文章,相信你對“Ceph Jewel版本三副本寫操作的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

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

AI

黄骅市| 思茅市| 石柱| 正镶白旗| 亳州市| 镇赉县| 西华县| 西丰县| 江城| 惠来县| 石家庄市| 丹江口市| 松江区| 皋兰县| 濮阳县| 镇远县| 濉溪县| 全州县| 福海县| 石楼县| 大城县| 南乐县| 正阳县| 佛山市| 虞城县| 鸡东县| 安吉县| 赣榆县| 疏附县| 思南县| 凤山县| 南雄市| 无棣县| 岱山县| 吉木萨尔县| 玉溪市| 万年县| 盐山县| 钟山县| 探索| 黄石市|