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

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

共計(jì) 5856 個(gè)字符,預(yù)計(jì)需要花費(fèi) 15 分鐘才能閱讀完成。

這篇文章主要為大家展示了“Ceph OSD 處理客戶端寫(xiě)操作處理流程是怎么樣的”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Ceph OSD 處理客戶端寫(xiě)操作處理流程是怎么樣的”這篇文章吧。

1、OSD 從 client 端收到請(qǐng)求的處理流程

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 的請(qǐng)求寫(xiě)入到隊(duì)列

主 OSD 處理從 client 端請(qǐng)求的處理流程

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 將寫(xiě)請(qǐng)求發(fā)送到從 OSDs

                         |__ReplicatedPG::queue_transcations()           寫(xiě)主 OSD FileJournal

                               |__ObjectStore::queue_transactions()

                                   |__FileStore::queue_transactions()

                                         |__JournalingObjectStore::_op_journal_transactions()

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

                    |__ReplicatedPG::eval_repop()

主 OSD 的 FileJournal 寫(xiě)線程

FileJournal::write_thread_entry()           負(fù)責(zé)從 writeq 隊(duì)列中獲取待寫(xiě)入的日志

|__FileJournal::prepare_multi_write()     構(gòu)成日志

|__FileJournal::do_write()                       實(shí)際寫(xiě)日志

     |__FIleJournal::queue_completions_thru()

          |__completion_peek_front()           獲取 C_JournalAhead 類實(shí)例

          |__finisher- queue()

          |__finisher_cond.Signal()               啟動(dòng) FileJournal 的 finisher 線程處理 C_JournalAhead 類實(shí)例

主 OSD 的 C_JournalAhead 類處理

C_JournalAhead::finish()

|__FileStore::_journaled_ahead()

     |__FileStore::queue_op()

          |__FileStore::op_wq.queue()           將數(shù)據(jù)寫(xiě)入到 FileStore 寫(xiě)線程隊(duì)列中

    |__ondisk_finisher.queue(ondisk)     調(diào)用 ReplicatedBackend- op_commit() 回調(diào)函數(shù)

主 OSD 的 FileStore 寫(xiě)數(shù)據(jù)線程類處理

FileStore::op_wq

|__FileStore::op_wq._process()

     |__FileStore::_do_op()

          |__FileStore::_do_transactions()

               |__FileStore::_do_transaction()

                    |__FileStore::_write()           落盤(pán)到 FileStore 中(寫(xiě)入指定的文件中)

|__FileStore::op_wq._process_finish()

     |__FileStore::_finish_op()

          |__op_finisher.queue()                     調(diào)用 ReplicatedPG::op_applied() 回調(diào)函數(shù)

2、從 OSD 處理主 OSD 端發(fā)送過(guò)來(lái)的請(qǐng)求

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 的請(qǐng)求寫(xiě)入到從 OSD 處理隊(duì)列中

從 OSD 處理 workqueue

OSD::ShardOpWQ::_process()

|__OSD::dequeue_op()

     |__ReplicatedPG::do_request()

          |__ReplicatedBackend::handle_message()

               |__ReplicatedBackend::sub_op_modify()

                    |__ReplicatedBackend::sub_op_modify_impl()

                         |__注冊(cè) commit 回調(diào)函數(shù)類 C_OSD_RepModifyCommit()

                         |__注冊(cè) Apply 回調(diào)函數(shù)類 C_OSD_RepModifyApply()

                         |__ReplicatedPG::queue_transcations()           從 OSD 寫(xiě) FileJournal

                               |__ObjectStore::queue_transactions()

                                   |__FileStore::queue_transactions()

                                         |__JournalingObjectStore::_op_journal_transactions()

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

                    |__ReplicatedPG::eval_repop()

從 OSD 的 FileJournal 寫(xiě)線程

FileJournal::write_thread_entry()           負(fù)責(zé)從 writeq 隊(duì)列中獲取待寫(xiě)入的日志

|__FileJournal::prepare_multi_write()     構(gòu)成日志

|__FileJournal::do_write()                       實(shí)際寫(xiě)日志

     |__FIleJournal::queue_completions_thru()

          |__completion_peek_front()           獲取 C_JournalAhead 類實(shí)例

          |__finisher- queue()

          |__finisher_cond.Signal()               啟動(dòng) FileJournal 的 finisher 線程處理 C_JournalAhead 類實(shí)例

從 OSD 的 C_JournalAhead 類處理

C_JournalAhead::finish()

|__FileStore::_journaled_ahead()

     |__FileStore::queue_op()

          |__FileStore::op_wq.queue()           將數(shù)據(jù)寫(xiě)入到 FileStore 寫(xiě)線程隊(duì)列中

    |__ondisk_finisher.queue(ondisk)     調(diào)用 ReplicatedBackend- op_commit() 回調(diào)函數(shù)

從 OSD 的日志寫(xiě)完成后的處理

C_OSD_RepModifyCommit()

|__finish()

     |__ReplicatedBackend::sub_op_modify_commit()

          |__生成 MOSDRepOpReply 消息                                   CEPH_OSD_FLAG_ONDISK

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

               |__OSD::send_message_osd_cluster()

從 OSD 的 FileStore 寫(xiě)數(shù)據(jù)線程類處理

FileStore::op_wq

|__FileStore::op_wq._process()

     |__FileStore::_do_op()

          |__FileStore::_do_transactions()

               |__FileStore::_do_transaction()

                    |__FileStore::_write()           落盤(pán)到 FileStore 中(寫(xiě)入指定的文件中)

|__FileStore::op_wq._process_finish()

     |__FileStore::_finish_op()

          |__op_finisher.queue()                     調(diào)用 ReplicatedPG::op_applied() 回調(diào)函數(shù)

從 OSD 的落盤(pán)完成后的處理

C_OSD_RepModifyApply()

|__finish()

     |__ReplicatedBackend::sub_op_modify_applied()

          |__生成 MOSDRepOpReply 消息                                   CEPH_OSD_FLAG_ACK

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

               |__OSD::send_message_osd_cluster()

3、主 OSD 處理從 OSD 發(fā)送 Reply 處理流程

從 OSD 處理主 OSD 端發(fā)送過(guò)來(lái)的請(qǐng)求

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 寫(xiě)入到主 OSD 處理隊(duì)列中

主 OSD 處理從 OSD 端發(fā)送過(guò)來(lái)的 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()

 |__對(duì)于 ip_op.waiting_for_commit 為空,則調(diào)用 ip_op.on_commit- complete(0),即:調(diào)用 on_all_commit 回調(diào)函數(shù)處理。on_all_commit 回調(diào)函數(shù)在 ReplicatedPG.cc::execute_ctx() 函數(shù)中注冊(cè),用來(lái)對(duì)所有副本在寫(xiě) FileJournal 完成后的處理。on_all_commit() 函數(shù)設(shè)置 all_committed=true,之后調(diào)用 eval_repop() 函數(shù);

               |__對(duì)于 ip_op.waiting_for_applied 為空,則調(diào)用 ip_op.on_applied- complete(0),即:調(diào)用 on_all_applied 回調(diào)函數(shù)處理。on_all_applied 回調(diào)函數(shù)在 ReplicatedPG.cc::execute_ctx() 函數(shù)中注冊(cè),用來(lái)對(duì)所有副本都落盤(pán)完成后的處理。on_all_applied() 函數(shù)設(shè)置 all_applied=true,之后調(diào)用 eval_repop() 函數(shù)。在 eval_repop() 函數(shù)中若 all_applied=true,則創(chuàng)建一個(gè) MOSDOpReply 消息并且設(shè)置消息的 flags=CEPH_OSD_FLAG_ACK 且將該消息發(fā)送給客戶端;

以上是“Ceph OSD 處理客戶端寫(xiě)操作處理流程是怎么樣的”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-16發(fā)表,共計(jì)5856字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 宁波市| 龙海市| 大理市| 淮北市| 景宁| 上饶市| 惠安县| 勃利县| 天祝| 漳平市| 济阳县| 衢州市| 乌苏市| 高雄县| 仁寿县| 黄陵县| 上蔡县| 刚察县| 吴堡县| 韶关市| 邹平县| 黎平县| 青河县| 临潭县| 寿阳县| 正蓝旗| 呼和浩特市| 寿光市| 云和县| 和龙市| 谢通门县| 深州市| 无锡市| 南安市| 阳山县| 诸暨市| 绥德县| 舒兰市| 绥棱县| 郑州市| 阜南县|