[ https://issues.apache.org/jira/browse/CURATOR-151?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14164489#comment-14164489 ]
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_r18621853 --- Diff: curator-recipes/src/main/java/org/apache/curator/framework/recipes/shared/SharedValue.java --- @@ -184,6 +178,25 @@ public boolean trySetValue(VersionedValue<byte[]> newValue) throws Exception return false; } + private void updateValue(int version, byte[] bytes) + { + while (true) + { + VersionedValue<byte[]> current = currentValue.get(); + if (current.getVersion() >= version) + { + // A newer version was concurrently set. + return; + } + if ( currentValue.compareAndSet(current, new VersionedValue<byte[]>(version, bytes)) ) + { + // Successfully set. + return; + } + // Lost a race, retry. + } + } + /** --- End diff -- This is the new behavior as I see it. It loops until it successfully updates the value. Right? > 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)