Hi, I may be find a bug in the file 
org.apache.zookeeper.server.quorum.FastLeaderElection.java when I read the 
source code of Zookeeper. These codes as follow are copied from the file 
between 255th and 282th line. 
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????boolean
 backCompatibility40 = (capacity == 40);

response.buffer.clear();

// Instantiate Notification and set its attributes
Notification n = new Notification();

int rstate = response.buffer.getInt(); //4
long rleader = response.buffer.getLong(); //8
long rzxid = response.buffer.getLong(); //8
long relectionEpoch = response.buffer.getLong(); //8

long rpeerepoch;

int version = 0x0;
QuorumVerifier rqv = null;

try {
    if (!backCompatibility28) {
        rpeerepoch = response.buffer.getLong(); //8
        if (!backCompatibility40) { // here may be a bug 
            /*
             * Version added in 3.4.6
             */

            version = response.buffer.getInt(); //4
        } else {
            LOG.info("Backward compatibility mode (36 bits), server id: {}", 
response.sid);
        }
    } else {
        LOG.info("Backward compatibility mode (28 bits), server id: {}", 
response.sid);
        rpeerepoch = ZxidUtils.getEpochFromZxid(rzxid);
    } 
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????The
 variable "backCompatibility40 = (capacity == 40)", but "if 
(!backCompatibility40) {version = response.buffer.getInt();}" The variable 
response.buffer has been read 36 bytes before this line "if 
(!backCompatibility40)". It should be "if (backCompatibility40)", then "version 
= response.buffer.getInt()". It can be seen the log of "Backward compatibility 
mode (36 bits)".Thank you for your reply and explain me if I am wrong.

Reply via email to