[ https://issues.apache.org/jira/browse/CURATOR-151?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14162841#comment-14162841 ]
ASF GitHub Bot commented on CURATOR-151: ---------------------------------------- Github user Randgalt commented on a diff in the pull request: https://github.com/apache/curator/pull/47#discussion_r18558309 --- Diff: curator-recipes/src/main/java/org/apache/curator/framework/recipes/shared/SharedValue.java --- @@ -165,14 +153,20 @@ public boolean trySetValue(byte[] newValue) throws Exception * was not successful, {@link #getValue()} will return the updated value * @throws Exception ZK errors, interruptions, etc. */ - public boolean trySetValue(VersionedValue<byte[]> newValue) throws Exception + public boolean trySetValue(VersionedValue<byte[]> previous, byte[] newValue) throws Exception { Preconditions.checkState(state.get() == State.STARTED, "not started"); + VersionedValue<byte[]> current = currentValue.get(); + if ( previous.getVersion() != current.getVersion() || !Arrays.equals(previous.getValue(), current.getValue()) ) + { + return false; + } + try { - client.setData().withVersion(newValue.getVersion()).forPath(path, newValue.getValue()); - currentValue.set(new VersionedValue<byte[]>(newValue.getVersion() + 1, Arrays.copyOf(newValue.getValue(), newValue.getValue().length))); + Stat result = client.setData().withVersion(previous.getVersion()).forPath(path, newValue); + updateValue(result.getVersion(), Arrays.copyOf(newValue, newValue.length)); --- End diff -- If we're going to add this behavior I'd change the name of this method so it's clear about the behavior. > SharedValue has limited utility but can be improved > --------------------------------------------------- > > Key: CURATOR-151 > URL: https://issues.apache.org/jira/browse/CURATOR-151 > Project: Apache Curator > Issue Type: Improvement > Components: Recipes > Affects Versions: 2.6.0 > Reporter: Jordan Zimmerman > Assignee: Jordan Zimmerman > Fix For: 2.7.0 > > > Currently, SharedValue has limited utility as the internally managed version > is always used for trySetValue. A good improvement would be a) add an API to > get the current value AND current version and b) add an alternate trySetValue > that takes a new value AND an expected version. -- This message was sent by Atlassian JIRA (v6.3.4#6332)