[ https://issues.apache.org/jira/browse/CURATOR-151?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14162840#comment-14162840 ]
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_r18558295 --- Diff: curator-recipes/src/main/java/org/apache/curator/framework/recipes/shared/SharedValue.java --- @@ -129,29 +127,19 @@ public void setValue(byte[] newValue) throws Exception * value is updated. i.e. if the value is not successful you can get the updated value * by calling {@link #getValue()}. * + * @deprecated use {@link #trySetValue(VersionedValue, byte[])} for stronger atomicity + * guarantees. Even if this object's internal state is up-to-date, the caller has no way to + * ensure that they've read the most recently seen value. + * * @param newValue the new value to attempt * @return true if the change attempt was successful, false if not. If the change * was not successful, {@link #getValue()} will return the updated value * @throws Exception ZK errors, interruptions, etc. */ + @Deprecated public boolean trySetValue(byte[] newValue) throws Exception { - Preconditions.checkState(state.get() == State.STARTED, "not started"); - - try - { - VersionedValue<byte[]> localCopy = currentValue.get(); - client.setData().withVersion(localCopy.getVersion()).forPath(path, newValue); - currentValue.set(new VersionedValue<byte[]>(localCopy.getVersion() + 1, Arrays.copyOf(newValue, newValue.length))); - return true; - } - catch ( KeeperException.BadVersionException ignore ) - { - // ignore - } - - readValue(); - return false; + return trySetValue(currentValue.get(), newValue); } --- End diff -- I don't like this because it changes the behavior of the class. If anyone was depending on old behavior their code will break. > 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)