[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-3113?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16655504#comment-16655504
 ] 

Hudson commented on ZOOKEEPER-3113:
-----------------------------------

FAILURE: Integrated in Jenkins build ZooKeeper-trunk #238 (See 
[https://builds.apache.org/job/ZooKeeper-trunk/238/])
ZOOKEEPER-3113: EphemeralType.get() fails to verify ephemeralOwner when (andor: 
rev 5c85a236c9eb0805ea8389a52dab3b1bc0efadac)
* (edit) 
zookeeper-server/src/test/java/org/apache/zookeeper/server/EphemeralTypeTest.java
* (edit) 
zookeeper-server/src/test/java/org/apache/zookeeper/server/Emulate353TTLTest.java


> EphemeralType.get() fails to verify ephemeralOwner when currentElapsedTime() 
> is small enough
> --------------------------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-3113
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-3113
>             Project: ZooKeeper
>          Issue Type: Bug
>          Components: server
>    Affects Versions: 3.5.4, 3.6.0
>            Reporter: Andor Molnar
>            Priority: Critical
>              Labels: pull-request-available
>             Fix For: 3.6.0, 3.5.5
>
>          Time Spent: 4h
>  Remaining Estimate: 0h
>
> EphemeralTypeTest.testServerIds() unit test fails on some systems that 
> System.nanoTime() is smaller than a certain value.
> The test generates ephemeralOwner in the old way (pre ZOOKEEPER-2901) without 
> enabling the emulation flag and asserts for exception to be thrown when 
> serverId == 255. This is right. ZooKeeper should fail on this case, because 
> serverId cannot be larger than 254 if extended types are enabled. In this 
> case ephemeralOwner with 0xff in the most significant byte indicates an 
> extended type.
> The logic which does the validation is in EphemeralType.get().
> It checks 2 things:
>  * the extended type byte is set: 0xff,
>  * reserved bits (next 2 bytes) corresponds to a valid extended type.
> Here is the problem: currently we only have 1 extended type: TTL with value 
> of 0x0000 in the reserved bits.
> Logic expects that if we have anything different from it in the reserved 
> bits, the ephemeralOwner is invalid and exception should be thrown. That's 
> what the test asserts for and it works on most systems, because the timestamp 
> part of the sessionId usually have some bits in the reserved bits as well 
> which eventually will be larger than 0, so the value is unsupported.
> I think the problem is twofold:
>  * Either if we have more extended types, we'll increase the possibility that 
> this logic will accept invalid sessionIds (as long as reserved bits indicate 
> a valid extended type),
>  * Or (which happens on some systems) if the currentElapsedTime (timestamp 
> part of sessionId) is small enough and doesn't occupy reserved bits, this 
> logic will accept the invalid sessionId.
> Unfortunately I cannot repro the problem yet: it constantly happens on a 
> specific Jenkins slave, but even with the same distro and same JDK version I 
> cannot reproduce the same nanoTime() values.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to