Glen Geng created RATIS-1001: -------------------------------- Summary: 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: Bug Components: server Affects Versions: 0.5.0 Reporter: Glen Geng Assignee: Glen Geng
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)