CURATOR-546
Bad copy/paste bug. ModeledCacheImpl.currentData() was removing from entries instead of calling get()
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCacheImpl.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCacheImpl.java
index 72e6762..b95e92d 100644
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCacheImpl.java
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCacheImpl.java
@@ -100,7 +100,7 @@
@Override
public Optional<ZNode<T>> currentData(ZPath path)
{
- Entry<T> entry = entries.remove(path);
+ Entry<T> entry = entries.get(path);
if ( entry != null )
{
return Optional.of(new ZNodeImpl<>(path, entry.stat, entry.model));
diff --git a/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestCachedModeledFramework.java b/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestCachedModeledFramework.java
index 825d4b7..2d33c13 100644
--- a/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestCachedModeledFramework.java
+++ b/curator-x-async/src/test/java/org/apache/curator/x/async/modeled/TestCachedModeledFramework.java
@@ -30,6 +30,7 @@
import java.math.BigInteger;
import java.util.Arrays;
import java.util.List;
+import java.util.Optional;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Semaphore;
@@ -144,15 +145,30 @@
});
});
- complete(client.child("p").child("c1").childrenAsZNodes(), (v, e) ->
- {
- Assert.assertEquals(toSet(v.stream(), ZNode::model), Sets.newHashSet(grandChild1));
- });
+ complete(client.child("p").child("c1").childrenAsZNodes(), (v, e) -> Assert.assertEquals(toSet(v.stream(), ZNode::model), Sets.newHashSet(grandChild1)));
+ complete(client.child("p").child("c2").childrenAsZNodes(), (v, e) -> Assert.assertEquals(toSet(v.stream(), ZNode::model), Sets.newHashSet(grandChild2)));
+ }
+ }
- complete(client.child("p").child("c2").childrenAsZNodes(), (v, e) ->
- {
- Assert.assertEquals(toSet(v.stream(), ZNode::model), Sets.newHashSet(grandChild2));
- });
+ // note: CURATOR-546
+ @Test
+ public void testAccessCacheDirectly()
+ {
+ TestModel model = new TestModel("a", "b", "c", 20, BigInteger.ONE);
+ try (CachedModeledFramework<TestModel> client = ModeledFramework.wrap(async, modelSpec).cached())
+ {
+ CountDownLatch latch = new CountDownLatch(1);
+ client.listenable().addListener((t, p, s, m) -> latch.countDown());
+
+ client.start();
+ complete(client.child("m").set(model));
+ Assert.assertTrue(timing.awaitLatch(latch));
+
+ // call 2 times in a row to validate CURATOR-546
+ Optional<ZNode<TestModel>> optZNode = client.cache().currentData(modelSpec.path().child("m"));
+ Assert.assertEquals(optZNode.orElseThrow(() -> new AssertionError("node is missing")).model(), model);
+ optZNode = client.cache().currentData(modelSpec.path().child("m"));
+ Assert.assertEquals(optZNode.orElseThrow(() -> new AssertionError("node is missing")).model(), model);
}
}