[
https://issues.apache.org/jira/browse/CURATOR-311?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15882153#comment-15882153
]
ASF GitHub Bot commented on CURATOR-311:
----------------------------------------
Github user oza commented on a diff in the pull request:
https://github.com/apache/curator/pull/200#discussion_r102892185
--- Diff:
curator-recipes/src/test/java/org/apache/curator/framework/recipes/shared/TestSharedCount.java
---
@@ -381,12 +385,122 @@ public void processResult(CuratorFramework client,
CuratorEvent event) throws Ex
}).forPath("/count");
flushDone.await(5, TimeUnit.SECONDS);
- Assert.assertEquals(2, numChangeEvents.get());
+ // CURATOR-311: when a Curator client's state became
RECONNECTED, countHasChanged method is called back
+ // because the Curator client calls
readValueAndNotifyListenersInBackground in
SharedValue#ConnectionStateListener#stateChanged.
+ Assert.assertEquals(numChangeEvents.get(), 3);
--- End diff --
Minor nits: this line also fixes wrong order of the argument of
Assert.assertEquals: assertEquals(actual, expected) is correct one.
To confirm the reason why I changed numChangeEvents' count, please check
the comment in the test code.
> SharedValue could hold stall data when quourm membership changes
> ----------------------------------------------------------------
>
> Key: CURATOR-311
> URL: https://issues.apache.org/jira/browse/CURATOR-311
> Project: Apache Curator
> Issue Type: Bug
> Components: Recipes
> Affects Versions: 3.1.0
> Environment: Linux
> Reporter: Jian Fang
>
> We run a Zookeeper 3.5.1-alpha quorum on EC2 instances and the quorum members
> could be changed, for example, one peer could be replaced by a new EC2
> instance due to EC2 instance termination. We use Apache Curator 3.1.0 as the
> zookeeper client. During our testing, we found the SharedValue data structure
> could hold stall data during and after one peer is replaced and thus led to
> the system failure.
> We look into the SharedValue code. Seems it always returns the value from an
> in-memory reference variable and the value is only updated by a watcher. If
> for any reason, the watch is lost, then the value would never get a chance to
> be updated again.
>
> Right now, we added a connection state listener to force SharedValue to call
> readValue(), i.e., read the data from zookeeper directly, if the connection
> state has been changed to RECONNECTED to work around this issue.
> It would be great if this issue could be fixed in Curator directly.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)