[ https://issues.apache.org/jira/browse/RATIS-1001?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Glen Geng updated RATIS-1001: ----------------------------- Affects Version/s: (was: 0.5.0) > CLONE - shouldWithholdVotes() should be triggered for handling higher term > -------------------------------------------------------------------------- > > Key: RATIS-1001 > URL: https://issues.apache.org/jira/browse/RATIS-1001 > Project: Ratis > Issue Type: Improvement > Components: server > Reporter: Glen Geng > Assignee: Glen Geng > Priority: Major > Labels: pull-request-available > > > I assume that {{shouldWithholdVotes()}} is used to handle request vote > request with higher candidate term from disruptive server, but currently it > just ignored such requests, since it only take effect when > {{(state.getCurrentTerm() >= candidateTerm)}} . > shouldWithholdVotes() should be triggered for handling higher term. If > currentTerm is larger or equal to candidateTerm, just reject the request > vote, no need further handling. > > Current code is > {code:java} > private boolean shouldWithholdVotes(long candidateTerm) { > if (state.getCurrentTerm() < candidateTerm) { > return false; > } else if (isLeader()) { > return true; > } else { > // following a leader and not yet timeout > return isFollower() && state.hasLeader() > && > role.getFollowerState().map(FollowerState::shouldWithholdVotes).orElse(false); > } > } > {code} > Modify to > {code:java} > private boolean shouldWithholdVotes(long candidateTerm) { > if (state.getCurrentTerm() >= candidateTerm) { > return false; > } else if (isLeader()) { > return true; > } else { > // following a leader and not yet timeout > return isFollower() && state.hasLeader() > && > role.getFollowerState().map(FollowerState::shouldWithholdVotes).orElse(false); > } > } > {code} > -- This message was sent by Atlassian Jira (v8.3.4#803005)