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