之前的文章我们说过,celeborn是使用了ratis来做master的高可用的。它的请求都是由对应的“active master”处理的,这个active master其实就是ratis的leader node。
本文的目标就是弄清楚celeborn里,怎么实现的让raits的leader node处理客户端和worker的RPC请求的。
核心方法是HARaftServer#isLeader(),用于判断当前节点是否是leader节点,如果是,返回true,否则,返回false。
看下具体实现,checkCachedPeerRoleIsLeader方法持有读锁,去判断cachedPeerRole的角色是否是Raft的Leader,如果是,直接返回true。如果不是leader,那么执行updateServerRole方法向Raft Server端发送一个getGroupInfo RPC,更新当前节点的角色信息,更新缓存。最后再从缓存里返回当前节点的角色信息。
/**
* Check if the current node is the leader node.
*
* @return true if Leader, false otherwise.
*/
publ