RequestProcessor相關(guān)

參考

總結(jié)

事件順序:

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

LeaderZooKeeperServer啟動CommitProcessor線程。后者對committed請求包裝成CommitWorkRequest交給線程池執(zhí)行。

ProposalRequestProcessor


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

觸發(fā)寫日志操作

CommitProcessor

取出request并設(shè)置

收集ACK

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

往前看


AckRequestProcessor之前是SyncRequestProcessor

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

往后看

添加ACK,嘗試提交

沒有過半ACK會提交失敗

commit后

TryToCommit方法

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


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

commitProcessor取出

commitProcessor

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


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

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

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