osd流程

接上次說(shuō)到的objecter的流程,現(xiàn)在看下文件的寫(xiě)入在osd側(cè)的流程。

OSD::ms_fast_dispatch -> OSD::enqueue_op,enqueue_op會(huì)把請(qǐng)求入到op_shardedwq的隊(duì)列中,op_shardedwq是一個(gè)按照pg做sharded的多線程的任務(wù)隊(duì)列,其中每個(gè)隊(duì)列的任務(wù)也是有多個(gè)線程在執(zhí)行的,相關(guān)配置有: osd_op_num_shards、osd_op_num_threads_per_shard。

op_sharededwq里的請(qǐng)求,最終由OSD::ShardedOpWQ::_process來(lái)進(jìn)行處理。
這里用到了boost::static_visitor模式,用這種方式來(lái)實(shí)現(xiàn)多態(tài)。
調(diào)用的方法實(shí)際上是這個(gè):
void PGQueueable::RunVis::operator()(const OpRequestRef &op) {
return osd->dequeue_op(pg, op, handle);
}

然后是 pg->do_request(op, handle);
在然后void PrimaryLogPG::do_request( OpRequestRef& op, ThreadPool::TPHandle &handle)
注意,在這一步有判斷pg的狀態(tài),如果pg不是active并且peered的話(huà),請(qǐng)求會(huì)加到waiting_for_peered等待隊(duì)列里,等pg狀態(tài)正常了才會(huì)處理:

  if (!is_peered()) {
    // Delay unless PGBackend says it's ok
    if (pgbackend->can_handle_while_inactive(op)) {
      bool handled = pgbackend->handle_message(op);
      assert(handled);
      return;
    } else {
      waiting_for_peered.push_back(op);
      op->mark_delayed("waiting for peered");
      return;
    }
  }

后面PrimaryLogPG::do_op(OpRequestRef& op)
PrimaryLogPG::execute_ctx
然后這里進(jìn)行事務(wù)相關(guān)的處理。

PrimaryLogPG::execute_ctx里會(huì)調(diào)用prepare_transaction,然后再調(diào)用issue_repop,在issue_repop里調(diào)用了pgbackend->submit_transaction。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 存儲(chǔ)QoS是個(gè)可以做很大也可以做很小的特性。SolidFire認(rèn)為將QoS歸類(lèi)為特性太兒戲,QoS應(yīng)該是存儲(chǔ)系統(tǒng)設(shè)...
    wuxiangwei閱讀 4,646評(píng)論 0 2
  • 一周讀一本書(shū),并隨筆記錄,是假期我的計(jì)劃之一,今天是讀這本書(shū)的最后一天。 掩卷后其實(shí)要說(shuō)的面很多,每一個(gè)面我也能一...
    小壹Odelia閱讀 340評(píng)論 0 0
  • 你在呼喚,我卻悄然離開(kāi)。 離開(kāi)了一個(gè)地方,一個(gè)水田星羅棋布的地方,田里插滿(mǎn)了彎著腰收秧的鄉(xiāng)親。我在泥水中嘻戲,知了...
    募蘭閱讀 371評(píng)論 0 0

友情鏈接更多精彩內(nèi)容