問題
帶着問題擼源碼系列-zookeeper-不同的RequestProcessor之間是什麼關係,如何協調?
參考
思考了頗久實在沒找到突破的方法,只好找網上文章找突破口了:
處理寫請求過程
讀源碼
在這裏配置每個RequestProcessor的關係,先調用哪個再調用哪個:
org.apache.zookeeper.server.quorum.FollowerZooKeeperServer#setupRequestProcessors
可以看到是
可以看到,第一個是FollowerRequestProcessor
,緊接着是commitProcessor
,最後是FinalRequestProcessor
這個就有點像責任鏈模式,讓每個模塊都有處理事情的機會,GOT IT!
每個RequestProcessor都會在調用過程中,調用下一個Processor,讓下一個Processor完成他的任務,如在FollowerRequestProcessor
中:
斷點調試
我們在FollowerRequestProcessor
中打斷點條件斷點:request.type!=11
,同時在下一個Processor:commitProcessor
中也打斷點,然後我們來發一個讀請求:ls /
可以看到確實是先在
FollowerRequestProcessor
停住了
然後在commitProcessor
停住了
回答問題
setUp的時候,指定了每個Processor的下一個Processor是誰,然後在每個Processor處理的過程中會調用自己的nextProcessor來處理,以一個責任鏈的模式將Request傳遞。
具體到Follower的責任鏈,是 FollowerRequestProcessor -》 commitProcessor -》 FinalRequestProcesoor