[ https://issues.apache.org/jira/browse/ZOOKEEPER-4743?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
ASF GitHub Bot updated ZOOKEEPER-4743: -------------------------------------- Labels: pull-request-available (was: ) > Jump from -2 to 0 when zookeeper increments znode dataVersion > ------------------------------------------------------------- > > Key: ZOOKEEPER-4743 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-4743 > Project: ZooKeeper > Issue Type: Improvement > Reporter: HaiyuanZhao > Priority: Major > Labels: pull-request-available > Time Spent: 10m > 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 noting 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)