[GitHub] [kafka] guozhangwang commented on a change in pull request #9531: KAFKA-10661; Add new resigned state for graceful shutdown/initialization

2020-11-09 Thread GitBox


guozhangwang commented on a change in pull request #9531:
URL: https://github.com/apache/kafka/pull/9531#discussion_r520020029



##
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:
   Okay now I remembered what we discussed before.
   
   What I was wondering is, say with quorum size 6, we would need 4 votes to 
elect leader; if the current leader shutdown and before it is restarted, the 
quorum size is 5 so logically we only need 3 votes --- but as long as we 
require that during this transition we still require 4 votes even with 5 alive 
quorum members we are fine.





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




[GitHub] [kafka] guozhangwang commented on a change in pull request #9531: KAFKA-10661; Add new resigned state for graceful shutdown/initialization

2020-11-08 Thread GitBox


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