溫馨提示×

溫馨提示×

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

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

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

發(fā)布時(shí)間:2021-12-17 10:07:46 來源:億速云 閱讀:114 作者:小新 欄目:云計(jì)算

小編給大家分享一下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中對應(yīng)的PG和Pool信息

               |__OSD::enqueue_op()

                    |__PG::queue_op()

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

OSD::ShardedOpWQ::_process()          負(fù)責(zé)處理OSD::ShardedThreadPool::ShardedWQ隊(duì)列中的Op

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

     |__OSD::dequeue_op()

          |__ReplicatedPG::do_request()

               |__檢查當(dāng)前PG是否處于flush或peering狀態(tài),若是則將op放入waiting_for_peered隊(duì)列中等待PG變成可用狀態(tài)

               |__檢查當(dāng)前PG是否處于Active狀態(tài),若不是則將op放入waiting_for_active隊(duì)列中

               |__檢查當(dāng)前PG是否處于REPLAY狀態(tài),若是則將op放入waiting_for_active隊(duì)列中

               |__ReplicatedPG::do_op()

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

                    |__根據(jù)op請求創(chuàng)建hobject_t類對象(head)

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

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

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

                    |__對于寫請求,檢查寫請求的數(shù)據(jù)大小是否大于osd_max_write_size值

                    |__對于op請求的head目前不可讀,則將op放入waiting_for_unreadable_object隊(duì)列中且調(diào)用maybe_kick_recovery()函數(shù)嘗試啟動(dòng)recovery

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

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

                    |__檢查head是否在objects_blocked_on_degraded_snap隊(duì)列中,若是則將當(dāng)前op請求的head放入waiting_for_degraded_object隊(duì)列中

                    |__檢查head是否在objects_blocked_on_snap_promotion隊(duì)列中,若是則將當(dāng)前op請求的head放入waiting_for_blocked_object隊(duì)列中

                    |__檢查head是否在objects_blocked_on_cache_full隊(duì)列中,若是則將當(dāng)前op請求的head放入waiting_for_cache_not_full隊(duì)列中

                    |__檢查head的snapdir是否不可讀,若是則將head的snapdir放入waiting_for_unreadable_object隊(duì)列中且調(diào)用maybe_kick_recovery()函數(shù)嘗試啟動(dòng)recovery

                    |__檢查head的snapdir是否處于recovery或backfill狀態(tài),若是則將head的snapdir放入waiting_for_degraded_object隊(duì)列中

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

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

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

                    |__ReplicatedPG::execute_ctx()     

                         |__ReplicatedPG::prepare_transaction()

                         |__創(chuàng)建MOSDOpReply消息實(shí)例

                         |__調(diào)用ReplicatePG::complete_read_ctx()     將讀操作的結(jié)果返回給client端

以上是“Ceph Jewel版本三副本讀操作的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI