[
https://issues.apache.org/jira/browse/ZOOKEEPER-1485?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15328384#comment-15328384
]
Michael Han commented on ZOOKEEPER-1485:
----------------------------------------
Should we add a test case about this if there is no existing tests? We could
add a "test only" method like set_xid if it is hard to simulate the overflow
condition in a test.
I am also wondering what is the performance implication by changing get_xid
from using a compiler intrinsic / atomic operation to use explicit locks. I
think it is possible to implement the same 'wrap if overflow' operation using
CAS. Generally lock free atomic operation provides better performance comparing
to locks, but it of course depends on the use cases such as the level of
contention / number of threads, so without benchmark in a specific context it
might hard to tell. Not saying we should over optimize, just want to bring this
up see if this is a real concern or not.
> client xid overflow is not handled
> ----------------------------------
>
> Key: ZOOKEEPER-1485
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1485
> Project: ZooKeeper
> Issue Type: Bug
> Components: c client, java client
> Affects Versions: 3.4.3, 3.3.5
> Reporter: Michi Mutsuzaki
> Assignee: Martin Kuchta
> Attachments: ZOOKEEPER-1485.patch
>
>
> Both Java and C clients use signed 32-bit int as XIDs. XIDs are assumed to be
> non-negative, and zookeeper uses some negative values as special XIDs (e.g.
> -2 for ping, -4 for auth). However, neither Java nor C client ensures the
> XIDs it generates are non-negative, and the server doesn't reject negative
> XIDs.
> Pat had some suggestions on how to fix this:
> - (bin-compat) Expire the session when the client sends a negative XID.
> - (bin-incompat) In addition to expiring the session, use 64-bit int for XID
> so that overflow will practically never happen.
> --Michi
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)