Return-Path: X-Original-To: apmail-curator-dev-archive@minotaur.apache.org Delivered-To: apmail-curator-dev-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 44116173A0 for ; Thu, 9 Oct 2014 08:51:34 +0000 (UTC) Received: (qmail 42762 invoked by uid 500); 9 Oct 2014 08:51:34 -0000 Delivered-To: apmail-curator-dev-archive@curator.apache.org Received: (qmail 42717 invoked by uid 500); 9 Oct 2014 08:51:34 -0000 Mailing-List: contact dev-help@curator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@curator.apache.org Delivered-To: mailing list dev@curator.apache.org Received: (qmail 42700 invoked by uid 99); 9 Oct 2014 08:51:34 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 09 Oct 2014 08:51:34 +0000 Date: Thu, 9 Oct 2014 08:51:34 +0000 (UTC) From: "ASF GitHub Bot (JIRA)" To: dev@curator.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (CURATOR-151) SharedValue has limited utility but can be improved MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/CURATOR-151?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14164928#comment-14164928 ] ASF GitHub Bot commented on CURATOR-151: ---------------------------------------- Github user dragonsinth commented on a diff in the pull request: https://github.com/apache/curator/pull/47#discussion_r18633269 --- Diff: curator-recipes/src/main/java/org/apache/curator/framework/recipes/shared/SharedValue.java --- @@ -184,6 +178,25 @@ public boolean trySetValue(VersionedValue newValue) throws Exception return false; } + private void updateValue(int version, byte[] bytes) + { + while (true) + { + VersionedValue current = currentValue.get(); + if (current.getVersion() >= version) + { + // A newer version was concurrently set. + return; + } + if ( currentValue.compareAndSet(current, new VersionedValue(version, bytes)) ) + { + // Successfully set. + return; + } + // Lost a race, retry. + } + } + /** --- End diff -- Ah, gotcha. So this isn't new behavior -- this is just a standard compare-and-set loop that replaces the synchronized keyword. It's not round tripping to the server multiple times. There's still only one attempt to set the server value, and if it fails the calling methods return false. This is just atomically setting currentValue. We could replace the loop with a synchronized block, but performance would be worse. > 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)