Github user lvfangmin commented on a diff in the pull request:

    https://github.com/apache/zookeeper/pull/588#discussion_r212073403
  
    --- Diff: src/java/main/org/apache/zookeeper/server/quorum/Leader.java ---
    @@ -1172,6 +1172,58 @@ synchronized public long 
startForwarding(LearnerHandler handler,
         }
         // VisibleForTesting
         protected final Set<Long> connectingFollowers = new HashSet<Long>();
    +
    +    private volatile boolean quitWaitForEpoch = false;
    +    private volatile long timeStartWaitForEpoch = -1;
    +    private volatile SyncedLearnerTracker voteSet;
    +
    +    public static final String MIN_TIME_WAIT_FOR_EPOCH = 
"zookeeper.leader.minTimeToWaitForEpoch";
    +    private static int minTimeToWaitForEpoch;
    +    static {
    +        minTimeToWaitForEpoch = 
Integer.getInteger(MIN_TIME_WAIT_FOR_EPOCH, -1);
    +        LOG.info(MIN_TIME_WAIT_FOR_EPOCH + " = " + minTimeToWaitForEpoch);
    +    }
    +
    +    // visible for test
    +    public static void setMinTimeToWaitForEpoch(int minTimeToWaitForEpoch) 
{
    +        Leader.minTimeToWaitForEpoch = minTimeToWaitForEpoch;
    +        LOG.info(MIN_TIME_WAIT_FOR_EPOCH + " set to " + 
minTimeToWaitForEpoch);
    +    }
    +
    +    /**
    +     * Quit condition:
    +     *
    +     * 1 voter goes to looking again and time waitForEpoch > 
minTimeToWaitForEpoch
    +     *
    +     * Note: the voter may go to looking again due to:
    +     * 1. change mind in the last minute when received a different 
notifications
    +     * 2. the leader hadn't started leading when it tried to connect to it.
    +     */
    --- End diff --
    
    Yes, I haven't listed all the cases here, like voter being shutdown or 
restarted will also change vote, but in those cases the leader won't know until 
they finished restarting and trying to look for leader again. 
    



---

Reply via email to