RequestProcessor相關(guān)

參考

總結(jié)

事件順序:

  1. leader把proposal發(fā)給followers
  2. leader寫日志, 并回復(fù)自己ack。followers開始寫日志, 并回復(fù)leader ack
  3. leader收到過(guò)半ack后,異步向followers發(fā)送commit,并將事務(wù)應(yīng)用到DataTree上
  4. followers收到commit后,將事務(wù)應(yīng)用到DataTree上

LeaderZooKeeperServer啟動(dòng)CommitProcessor線程。后者對(duì)committed請(qǐng)求包裝成CommitWorkRequest交給線程池執(zhí)行。

ProposalRequestProcessor


生成事務(wù)發(fā)給所有follower

觸發(fā)寫日志操作

CommitProcessor

取出request并設(shè)置

收集ACK

多個(gè)線程調(diào)用此處

往前看


AckRequestProcessor之前是SyncRequestProcessor

SyncRequestProcessor.flush調(diào)用之
flush只有三處調(diào)用,第三處調(diào)用在shutdown方法

往后看

添加ACK,嘗試提交

沒(méi)有過(guò)半ACK會(huì)提交失敗

commit后

TryToCommit方法

這里會(huì)判斷ACK是否過(guò)半,未過(guò)半則失敗,這里假設(shè)判斷成功。


  1. 調(diào)用commit方法,異步發(fā)commit給所有成員
  2. 異步讓commitProcessor確保日志寫入
    異步發(fā)commit給所有成員

commitProcessor取出

commitProcessor

取出committedRequests異步交給下一個(gè)處理器Leader.ToBeAppliedRequestProcessor -> FinalRequestProcessor


?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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