您好,登錄后才能下訂單哦!
小編給大家分享一下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消息實例
|__調用ReplicatePG::complete_read_ctx() 將讀操作的結果返回給client端
以上是“Ceph Jewel版本三副本讀操作的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。