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