guozhangwang commented on a change in pull request #9531:
URL: https://github.com/apache/kafka/pull/9531#discussion_r519551394
##
File path: raft/src/main/java/org/apache/kafka/raft/QuorumState.java
##
@@ -21,18 +21,21 @@
import org.slf4j.Logger;
import java.io.IOException;
+import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.Optional;
import java.util.OptionalInt;
import java.util.Random;
import java.util.Set;
import java.util.stream.Collectors;
/**
- * This class is responsible for managing the current state of this node and
ensuring only
- * valid state transitions.
+ * This class is responsible for managing the current state of this node and
ensuring
+ * only valid state transitions. Below we define the possible state
transitions and
+ * how they are triggered:
*
- * Unattached =>
+ * Unattached|Resigned =>
Review comment:
Makes me thinking: if we have an even number sized quorum (say 2N), and
the leader is resigning. Then before the leader shutdown we need N+1 votes,
while after the leader shutdown, the quorum size shrink to 2N-1 and we would
only need N votes. So if the resigning leader gives it a vote to a candidate
and then shutdown, while the candidates thinks they only need N votes, would
that potentially result in two candidates claiming victory --- somehow this
sounds quite close to the real world :P --- each with N votes while one of them
has the vote from the resigned leader?
##
File path: raft/src/main/java/org/apache/kafka/raft/KafkaRaftClient.java
##
@@ -1601,7 +1618,12 @@ private long pollFollower(long currentTimeMs) throws
IOException {
}
private long pollFollowerAsVoter(FollowerState state, long currentTimeMs)
throws IOException {
-if (state.hasFetchTimeoutExpired(currentTimeMs)) {
+GracefulShutdown shutdown = this.shutdown.get();
+if (shutdown != null) {
+// If we are a follower, then we can shutdown immediately. We want
to
+// skip the transition to candidate in any case.
+return 0;
Review comment:
Why the behavior of `pollFollowerAsVoter` and `pollVoted` are different
when shutting down? Could the former case still help in casting and completing
a vote as well?
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org