in ratis-server/src/main/java/org/apache/ratis/server/impl/LeaderStateImpl.java [1063:1093]
private void checkPeersForYieldingLeader() {
final RaftConfigurationImpl conf = server.getRaftConf();
final RaftPeer leader = conf.getPeer(server.getId());
if (leader == null) {
LOG.error("{} the leader {} is not in the conf {}", this, server.getId(), conf);
return;
}
final int leaderPriority = leader.getPriority();
final List<LogAppender> highestPriorityInfos = new ArrayList<>();
int highestPriority = Integer.MIN_VALUE;
for (LogAppender logAppender : senders) {
final RaftPeer follower = conf.getPeer(logAppender.getFollowerId());
if (follower == null) {
continue;
}
final int followerPriority = follower.getPriority();
if (followerPriority > leaderPriority && followerPriority >= highestPriority) {
if (followerPriority > highestPriority) {
highestPriority = followerPriority;
highestPriorityInfos.clear();
}
highestPriorityInfos.add(logAppender);
}
}
final TermIndex leaderLastEntry = server.getState().getLastEntry();
final LogAppender appender = chooseUpToDateFollower(highestPriorityInfos, leaderLastEntry);
if (appender != null) {
server.getTransferLeadership().start(appender);
}
}