Eric Newton created ZOOKEEPER-1622:
--------------------------------------

             Summary: session ids will be negative in the year 2022
                 Key: ZOOKEEPER-1622
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1622
             Project: ZooKeeper
          Issue Type: Bug
            Reporter: Eric Newton
            Priority: Trivial


Someone decided to use a large number for their myid file.  This cause session 
ids to go negative, and our software (Apache Accumulo) did not handle this very 
well.  While diagnosing the problem, I noticed this in SessionImpl:

{noformat}
   public static long initializeNextSession(long id) {
        long nextSid = 0;
        nextSid = (System.currentTimeMillis() << 24) >> 8;
        nextSid =  nextSid | (id <<56);
        return nextSid;
    }
{noformat}

When the 40th bit in System.currentTimeMillis() is a one, sign extension will 
fill the upper 8 bytes of nextSid, and id will not make the session id unique.  
I recommend changing the right shift to the logical shift:

{noformat}
   public static long initializeNextSession(long id) {
        long nextSid = 0;
        nextSid = (System.currentTimeMillis() << 24) >>> 8;
        nextSid =  nextSid | (id <<56);
        return nextSid;
    }
{noformat}

But, we have until the year 2022 before we have to worry about it.


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to