You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by xi...@apache.org on 2022/12/05 05:25:42 UTC

[pulsar] branch branch-2.10 updated: [fix][broker] Fix executeWithRetry result is null (#17694)

This is an automated email from the ASF dual-hosted git repository.

xiangying pushed a commit to branch branch-2.10
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/branch-2.10 by this push:
     new d9594e48f6d [fix][broker] Fix executeWithRetry result is null (#17694)
d9594e48f6d is described below

commit d9594e48f6da5ba619eeca73d4b87d4c8c22747b
Author: Cong Zhao <zh...@apache.org>
AuthorDate: Tue Oct 11 10:14:58 2022 +0800

    [fix][broker] Fix executeWithRetry result is null (#17694)
    
    (cherry picked from commit 628e7607dd837e3201aa9d3f96970f7dc182fc1a)
---
 .../pulsar/metadata/cache/impl/MetadataCacheImpl.java    |  4 ++--
 .../org/apache/pulsar/metadata/MetadataCacheTest.java    | 16 +++++++++++-----
 2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/cache/impl/MetadataCacheImpl.java b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/cache/impl/MetadataCacheImpl.java
index 2cbe9a6dc19..f58530bde31 100644
--- a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/cache/impl/MetadataCacheImpl.java
+++ b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/cache/impl/MetadataCacheImpl.java
@@ -294,12 +294,12 @@ public class MetadataCacheImpl<T> implements MetadataCache<T>, Consumer<Notifica
 
     private CompletableFuture<T> executeWithRetry(Supplier<CompletableFuture<T>> op, String key) {
         CompletableFuture<T> result = new CompletableFuture<>();
-        op.get().thenAccept(r -> result.complete(r)).exceptionally((ex) -> {
+        op.get().thenAccept(result::complete).exceptionally((ex) -> {
             if (ex.getCause() instanceof BadVersionException) {
                 // if resource is updated by other than metadata-cache then metadata-cache will get bad-version
                 // exception. so, try to invalidate the cache and try one more time.
                 objCache.synchronous().invalidate(key);
-                op.get().thenAccept((c) -> result.complete(null)).exceptionally((ex1) -> {
+                op.get().thenAccept(result::complete).exceptionally((ex1) -> {
                     result.completeExceptionally(ex1.getCause());
                     return null;
                 });
diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataCacheTest.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataCacheTest.java
index be6a03d0eac..43af3ad757e 100644
--- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataCacheTest.java
+++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataCacheTest.java
@@ -491,15 +491,21 @@ public class MetadataCacheTest extends BaseMetadataStoreTest {
 
         MyClass value1 = new MyClass("a", 1);
         objCache1.create(key1, value1).join();
-        objCache1.get(key1).join();
+        assertEquals(objCache1.get(key1).join().get().b, 1);
 
-        objCache2.readModifyUpdate(key1, v -> {
+        CompletableFuture<MyClass> future1 = objCache1.readModifyUpdate(key1, v -> {
             return new MyClass(v.a, v.b + 1);
-        }).join();
+        });
 
-        objCache1.readModifyUpdate(key1, v -> {
+        CompletableFuture<MyClass> future2 = objCache2.readModifyUpdate(key1, v -> {
             return new MyClass(v.a, v.b + 1);
-        }).join();
+        });
+
+        MyClass myClass1 = future1.join();
+        assertEquals(myClass1.b, 2);
+
+        MyClass myClass2 = future2.join();
+        assertEquals(myClass2.b, 3);
     }
 
     @Test(dataProvider = "impl")