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

Reply via email to