亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

Ceph OSD處理客戶端寫操作處理流程是怎么樣的

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

這篇文章主要為大家展示了“Ceph OSD處理客戶端寫操作處理流程是怎么樣的”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Ceph OSD處理客戶端寫操作處理流程是怎么樣的”這篇文章吧。

1、OSD從client端收到請求的處理流程

OSD::ms_fast_dispatch()

|__OSD::dispatch_session_waiting()

     |__OSD::dispatch_op_fast()

          |__OSD::handle_op()

               |__OSD::get_pg_or_queue_for_pg()

               |__OSD::enqueue_op()

                    |__PG::queue_op()

                         |__OSD::op_wq.queue()          將client的請求寫入到隊列

主OSD處理從client端請求的處理流程

OSD::ShardOpWQ::_process()

|__OSD::dequeue_op()

     |__ReplicatedPG::do_request()

          |__ReplicatedPG::do_op()

               |__ReplicatedPG::execute_ctx()

                    |__ReplicatedPG::preapare_transcation()

                         |__ReplicatedPG::do_osd_ops()

                    |__ReplicatedPG::issue_repop()

                         |__ReplicateBackend::submit_transaction()

                              |__ReplicateBackend::issue_op()                    主OSD將寫請求發送到從OSDs

                              |__ReplicatedPG::queue_transcations()          寫主OSD FileJournal

                                   |__ObjectStore::queue_transactions()

                                        |__FileStore::queue_transactions()

                                             |__JournalingObjectStore::_op_journal_transactions()

                                                  |__FileJournal::submit_entry()     將日志寫入到FileJournal的writeq隊列

                    |__ReplicatedPG::eval_repop()

主OSD的FileJournal寫線程

FileJournal::write_thread_entry()           負責從writeq隊列中獲取待寫入的日志

|__FileJournal::prepare_multi_write()     構成日志

|__FileJournal::do_write()                       實際寫日志

     |__FIleJournal::queue_completions_thru()

          |__completion_peek_front()          獲取C_JournalAhead類實例

          |__finisher->queue()

          |__finisher_cond.Signal()               啟動FileJournal的finisher線程處理C_JournalAhead類實例

主OSD的C_JournalAhead類處理

C_JournalAhead::finish()

|__FileStore::_journaled_ahead()

     |__FileStore::queue_op()

          |__FileStore::op_wq.queue()          將數據寫入到FileStore寫線程隊列中

     |__ondisk_finisher.queue(ondisk)     調用ReplicatedBackend->op_commit()回調函數

主OSD的FileStore寫數據線程類處理

FileStore::op_wq

|__FileStore::op_wq._process()

     |__FileStore::_do_op()

          |__FileStore::_do_transactions()

               |__FileStore::_do_transaction()

                    |__FileStore::_write()          落盤到FileStore中(寫入指定的文件中)

|__FileStore::op_wq._process_finish()

     |__FileStore::_finish_op()

          |__op_finisher.queue()                    調用ReplicatedPG::op_applied()回調函數

2、從OSD處理主OSD端發送過來的請求

OSD::ms_fast_dispatch()

|__OSD::dispatch_session_waiting()

     |__OSD::dispatch_op_fast()

          |__OSD::handle_replica_op()

               |__OSD::get_pg_or_queue_for_pg()

               |__OSD::enqueue_op()

                    |__PG::queue_op()

                         |__OSD::op_wq.queue()          將主OSD的請求寫入到從OSD處理隊列中

從OSD處理workqueue

OSD::ShardOpWQ::_process()

|__OSD::dequeue_op()

     |__ReplicatedPG::do_request()

          |__ReplicatedBackend::handle_message()

               |__ReplicatedBackend::sub_op_modify()

                    |__ReplicatedBackend::sub_op_modify_impl()

                         |__注冊commit回調函數類C_OSD_RepModifyCommit()

                         |__注冊Apply回調函數類C_OSD_RepModifyApply()

                         |__ReplicatedPG::queue_transcations()          從OSD寫FileJournal

                                   |__ObjectStore::queue_transactions()

                                        |__FileStore::queue_transactions()

                                             |__JournalingObjectStore::_op_journal_transactions()

                                                  |__FileJournal::submit_entry()     將日志寫入到FileJournal的writeq隊列

                    |__ReplicatedPG::eval_repop()

從OSD的FileJournal寫線程

FileJournal::write_thread_entry()           負責從writeq隊列中獲取待寫入的日志

|__FileJournal::prepare_multi_write()     構成日志

|__FileJournal::do_write()                       實際寫日志

     |__FIleJournal::queue_completions_thru()

          |__completion_peek_front()          獲取C_JournalAhead類實例

          |__finisher->queue()

          |__finisher_cond.Signal()               啟動FileJournal的finisher線程處理C_JournalAhead類實例

從OSD的C_JournalAhead類處理

C_JournalAhead::finish()

|__FileStore::_journaled_ahead()

     |__FileStore::queue_op()

          |__FileStore::op_wq.queue()          將數據寫入到FileStore寫線程隊列中

     |__ondisk_finisher.queue(ondisk)     調用ReplicatedBackend->op_commit()回調函數

從OSD的日志寫完成后的處理

C_OSD_RepModifyCommit()

|__finish()

     |__ReplicatedBackend::sub_op_modify_commit()

          |__生成MOSDRepOpReply消息                                   CEPH_OSD_FLAG_ONDISK

          |__ReplicatedPG::send_message_osd_cluster()          將從OSD回復信息發給主OSD

               |__OSD::send_message_osd_cluster()

從OSD的FileStore寫數據線程類處理

FileStore::op_wq

|__FileStore::op_wq._process()

     |__FileStore::_do_op()

          |__FileStore::_do_transactions()

               |__FileStore::_do_transaction()

                    |__FileStore::_write()          落盤到FileStore中(寫入指定的文件中)

|__FileStore::op_wq._process_finish()

     |__FileStore::_finish_op()

          |__op_finisher.queue()                    調用ReplicatedPG::op_applied()回調函數

從OSD的落盤完成后的處理

C_OSD_RepModifyApply()

|__finish()

     |__ReplicatedBackend::sub_op_modify_applied()

          |__生成MOSDRepOpReply消息                                   CEPH_OSD_FLAG_ACK

          |__ReplicatedPG::send_message_osd_cluster()          將從OSD回復信息發給主OSD

               |__OSD::send_message_osd_cluster()

3、主OSD處理從OSD發送Reply處理流程

從OSD處理主OSD端發送過來的請求

OSD::ms_fast_dispatch()

|__OSD::dispatch_session_waiting()

     |__OSD::dispatch_op_fast()

          |__OSD::handle_replica_op()

               |__OSD::get_pg_or_queue_for_pg()

               |__OSD::enqueue_op()

                    |__PG::queue_op()

                         |__OSD::op_wq.queue()          將從OSD的reply寫入到主OSD處理隊列中

主OSD處理從OSD端發送過來的reply

OSD::ShardOpWQ::_process()

|__OSD::dequeue_op()

     |__ReplicatedPG::do_request()

          |__ReplicatedBackend::handle_message()

               |__ReplicatedBackend::sub_op_modify_reply()

                    |__ip_op.waiting_for_commit.erase()

                    |__ip_op.waiting_for_applied.erase()

                    |__對于ip_op.waiting_for_commit為空,則調用ip_op.on_commit->complete(0),即:調用on_all_commit回調函數處理。on_all_commit回調函數在ReplicatedPG.cc::execute_ctx()函數中注冊,用來對所有副本在寫FileJournal完成后的處理。on_all_commit()函數設置all_committed=true,之后調用eval_repop()函數;

                    |__對于ip_op.waiting_for_applied為空,則調用ip_op.on_applied->complete(0),即:調用on_all_applied回調函數處理。on_all_applied回調函數在ReplicatedPG.cc::execute_ctx()函數中注冊,用來對所有副本都落盤完成后的處理。on_all_applied()函數設置all_applied=true,之后調用eval_repop()函數。在eval_repop()函數中若all_applied=true,則創建一個MOSDOpReply消息并且設置消息的flags=CEPH_OSD_FLAG_ACK且將該消息發送給客戶端;

以上是“Ceph OSD處理客戶端寫操作處理流程是怎么樣的”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

玉门市| 扎囊县| 茌平县| 谢通门县| 阿巴嘎旗| 英山县| 景东| 土默特右旗| 新邵县| 孝义市| 突泉县| 得荣县| 鄄城县| 永德县| 增城市| 彰化市| 肇东市| 文昌市| 松溪县| 石渠县| 吴忠市| 乌拉特后旗| 修文县| 咸阳市| 昌平区| 梨树县| 板桥市| 策勒县| 贺兰县| 东安县| 云阳县| 明光市| 佳木斯市| 顺平县| 达日县| 闸北区| 榆树市| 绥化市| 镇雄县| 莱西市| 胶南市|