This is an automated email from the ASF dual-hosted git repository. guangning pushed a commit to branch branch-2.5 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 941b978d5087548d74eebfdde43dc3aa0cdc4bb1 Author: Matteo Merli <[email protected]> AuthorDate: Wed Feb 12 14:54:17 2020 -0800 Fixed casting in ZooKeeperCache.getDataIfPresent() (#6313) * Fixed casting in ZooKeeperCache.getDataIfPresent() * Missed null check --- .../src/main/java/org/apache/pulsar/zookeeper/ZooKeeperCache.java | 8 +++++++- .../test/java/org/apache/pulsar/zookeeper/ZookeeperCacheTest.java | 5 +++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/pulsar-zookeeper-utils/src/main/java/org/apache/pulsar/zookeeper/ZooKeeperCache.java b/pulsar-zookeeper-utils/src/main/java/org/apache/pulsar/zookeeper/ZooKeeperCache.java index d69a161..5052605 100644 --- a/pulsar-zookeeper-utils/src/main/java/org/apache/pulsar/zookeeper/ZooKeeperCache.java +++ b/pulsar-zookeeper-utils/src/main/java/org/apache/pulsar/zookeeper/ZooKeeperCache.java @@ -28,6 +28,7 @@ import java.io.IOException; import java.nio.file.Paths; import java.util.AbstractMap.SimpleImmutableEntry; import java.util.Collections; +import java.util.Map; import java.util.Map.Entry; import java.util.Optional; import java.util.Set; @@ -458,7 +459,12 @@ public abstract class ZooKeeperCache implements Watcher { @SuppressWarnings("unchecked") public <T> T getDataIfPresent(String path) { - return (T) dataCache.getIfPresent(path); + CompletableFuture<Map.Entry<Object, Stat>> f = dataCache.getIfPresent(path); + if (f != null && f.isDone() && !f.isCompletedExceptionally()) { + return (T) f.join().getKey(); + } else { + return null; + } } public Set<String> getChildrenIfPresent(String path) { diff --git a/pulsar-zookeeper-utils/src/test/java/org/apache/pulsar/zookeeper/ZookeeperCacheTest.java b/pulsar-zookeeper-utils/src/test/java/org/apache/pulsar/zookeeper/ZookeeperCacheTest.java index a83b370..0b4100a 100644 --- a/pulsar-zookeeper-utils/src/test/java/org/apache/pulsar/zookeeper/ZookeeperCacheTest.java +++ b/pulsar-zookeeper-utils/src/test/java/org/apache/pulsar/zookeeper/ZookeeperCacheTest.java @@ -109,6 +109,7 @@ public class ZookeeperCacheTest { zkClient.create("/my_test", value.getBytes(), null, null); assertEquals(zkCache.get("/my_test").get(), value); + assertEquals(zkCache.getDataIfPresent("/my_test"), value); String newValue = "test2"; @@ -501,11 +502,11 @@ public class ZookeeperCacheTest { assertEquals(zkCache.getAsync(key1).get().get(), value); zkExecutor.shutdown(); } - + /** * This tests verifies that {{@link ZooKeeperDataCache} invalidates the cache if the get-operation time-out on that * path. - * + * * @throws Exception */ @Test
