[
https://issues.apache.org/jira/browse/ZOOKEEPER-4743?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Enrico Olivelli resolved ZOOKEEPER-4743.
----------------------------------------
Fix Version/s: 3.10.0
Assignee: Zili Chen
Resolution: Fixed
> ZOOKEEPER-4743: Increase data version once more when going back to -1 from
> Integer.MIN_VALUE
> --------------------------------------------------------------------------------------------
>
> Key: ZOOKEEPER-4743
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-4743
> Project: ZooKeeper
> Issue Type: Improvement
> Reporter: HaiyuanZhao
> Assignee: Zili Chen
> Priority: Major
> Labels: pull-request-available
> Fix For: 3.10.0
>
> Time Spent: 1h 50m
> Remaining Estimate: 0h
>
> DataVersion is a 32-bit signed integer. When dataVersion exceeds Integer.MAX,
> an overflow problem will occur.
> According to my own understanding, overflow itself is not a big problem. The
> core of dataVersion is to describe the causal order. Two different values
> can be used to determine the happened-before relationship between the two.
> Then even if an overflow occurs, except for the scenario where Integer.MAX is
> larger than Integer.MAX+1, compared with any value in other scenarios and the
> value + 1, the latter is always larger than the former. As described above
> for the role of dataVersion, if it continues to increase after overflow, the
> role will still take effect.
> It is also worth nothing that zookeeper has special processing for
> dataVersion=-1. When expectedVersion==and currentVersion==-1, the dataVersion
> equality check is skipped, which violates the semantics of CAS updates. As
> shown in the following code block
> {code:java}
> private static int checkAndIncVersion(int currentVersion, int
> expectedVersion, String path) throws KeeperException.BadVersionException {
> if (expectedVersion != -1 && expectedVersion != currentVersion) {
> throw new KeeperException.BadVersionException(path);
> }
> return currentVersion + 1;
> }
> {code}
> I propose that when the current dataVersion is -2, update dataVersion to 0 to
> skip the case of -1(Inspired by [~Tison],). This will avoid breaking the
> semantics of CAS updates.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)