带着问题撸源码系列-zookeeper-不同的RequestProcessor之间是什么关系,如何协调?
问题
带着问题撸源码系列-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