You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@zookeeper.apache.org by "Enrico Olivelli (Jira)" <ji...@apache.org> on 2023/09/30 10:24:00 UTC

[jira] [Resolved] (ZOOKEEPER-4743) ZOOKEEPER-4743: Increase data version once more when going back to -1 from Integer.MIN_VALUE

     [ 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)