codelipenghui commented on a change in pull request #14283:
URL: https://github.com/apache/pulsar/pull/14283#discussion_r806517157



##########
File path: 
pulsar-metadata/src/main/java/org/apache/pulsar/metadata/cache/impl/MetadataCacheImpl.java
##########
@@ -261,12 +268,17 @@ public void invalidate(String path) {
     }
 
     @Override
-    public void refresh(String path) {
+    public CompletableFuture<Void> refresh(String path) {
         // Refresh object of path if only it is cached before.
-        if (objCache.getIfPresent(path) != null) {
-            objCache.synchronous().invalidate(path);
-            objCache.synchronous().refresh(path);
-        }
+        CompletableFuture<Void> promise = new CompletableFuture<>();
+        scheduler.executeOrdered(path, () -> {

Review comment:
       ```diff
   --- 
a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/RocksdbMetadataStore.java
   +++ 
b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/RocksdbMetadataStore.java
   @@ -397,7 +397,16 @@ public class RocksdbMetadataStore extends 
AbstractMetadataStore {
                                metaValue.getModifiedTimestamp(),
                                metaValue.ephemeral,
                                metaValue.getOwner() == instanceId));
   -            return CompletableFuture.completedFuture(Optional.of(result));
   +            CompletableFuture<Optional<GetResult>> future = new 
CompletableFuture<>();
   +            new Thread(() -> {
   +                try {
   +                    Thread.sleep(10000);
   +                } catch (InterruptedException e) {
   +                    e.printStackTrace();
   +                }
   +                future.complete(Optional.of(result));
   +            }).start();
   +            return future;
            } catch (Throwable e) {
                return FutureUtil.failedFuture(MetadataStoreException.wrap(e));
            } finally {
   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 a6292e0b3ab..4414ca7061c 100644
   ```
   
   Here is the result:
   ```
   2022-02-15T15:19:48,482+0800 WARN  [main] o.a.z.s.ServerCnxnFactory@309 - 
maxCnxns is not configured, using default value 0. {}
   2022-02-15T15:19:48,558+0800 INFO  [main] o.a.p.m.TestZKServer@74 - Started 
test ZK server on port 49310 {}
   2022-02-15T15:19:48,578+0800 INFO  [main] o.a.p.m.TestZKServer@180 - ZK 
Server UP {}
   2022-02-15T15:19:49,440+0800 INFO  [main] o.a.p.m.i.RocksdbMetadataStore@244 
- new 
RocksdbMetadataStore,url=org.apache.pulsar.metadata.api.MetadataStoreConfig@49bd54f7,instanceId=1
 {}
   2022-02-15T15:19:49,722+0800 INFO  [main] o.a.p.m.c.i.MetadataCacheImpl@271 
- 1. Refresh path /key-83830190436902 {}
   2022-02-15T15:19:49,723+0800 INFO  [main] o.a.p.m.c.i.MetadataCacheImpl@282 
- Refresh triggered for /key-83830190436902 {}
   2022-02-15T15:19:49,723+0800 INFO  [pool-3-thread-1] 
o.a.p.m.c.i.MetadataCacheImpl@278 - 0. Skip Refresh path /key-83830190436902 {}
   2022-02-15T15:19:49,728+0800 INFO  [main] o.a.p.m.c.i.MetadataCacheImpl@83 - 
Async load for objCache /key-83830190436902 {}
   2022-02-15T15:19:59,778+0800 INFO  [main] o.a.p.m.c.i.MetadataCacheImpl@298 
- 3. Refresh cache by notification /key-83830190436902 {}
   2022-02-15T15:19:59,778+0800 INFO  [main] o.a.p.m.c.i.MetadataCacheImpl@271 
- 1. Refresh path /key-83830190436902 {}
   2022-02-15T15:19:59,778+0800 INFO  [main] o.a.p.m.c.i.MetadataCacheImpl@282 
- Refresh triggered for /key-83830190436902 {}
   2022-02-15T15:19:59,778+0800 INFO  [main] o.a.p.m.c.i.MetadataCacheImpl@271 
- 1. Refresh path /key-83830190436902 {}
   2022-02-15T15:19:59,779+0800 INFO  [main] o.a.p.m.c.i.MetadataCacheImpl@282 
- Refresh triggered for /key-83830190436902 {}
   2022-02-15T15:19:59,779+0800 INFO  [pool-3-thread-1] 
o.a.p.m.c.i.MetadataCacheImpl@83 - Async load for objCache /key-83830190436902 
{}
   2022-02-15T15:20:09,783+0800 INFO  [pool-3-thread-1] 
o.a.p.m.c.i.MetadataCacheImpl@276 - 2. Refresh path complete 
/key-83830190436902:MetadataCacheTest.MyClass(a=a, b=2) {}
   2022-02-15T15:20:09,783+0800 INFO  [pool-3-thread-1] 
o.a.p.m.c.i.MetadataCacheImpl@83 - Async load for objCache /key-83830190436902 
{}
   2022-02-15T15:20:19,788+0800 INFO  [pool-3-thread-1] 
o.a.p.m.c.i.MetadataCacheImpl@276 - 2. Refresh path complete 
/key-83830190436902:MetadataCacheTest.MyClass(a=a, b=2) {}
   2022-02-15T15:20:19,788+0800 INFO  [pool-3-thread-1] 
o.a.p.m.c.i.MetadataCacheImpl@271 - 1. Refresh path /key-83830190436902 {}
   2022-02-15T15:20:19,789+0800 INFO  [pool-3-thread-1] 
o.a.p.m.c.i.MetadataCacheImpl@282 - Refresh triggered for /key-83830190436902 {}
   2022-02-15T15:20:19,789+0800 INFO  [pool-3-thread-1] 
o.a.p.m.c.i.MetadataCacheImpl@83 - Async load for objCache /key-83830190436902 
{}
   2022-02-15T15:20:29,794+0800 INFO  [pool-3-thread-1] 
o.a.p.m.c.i.MetadataCacheImpl@276 - 2. Refresh path complete 
/key-83830190436902:MetadataCacheTest.MyClass(a=a, b=2) {}
   2022-02-15T15:20:29,794+0800 INFO  [main] o.a.p.m.MetadataCacheTest@467 - 
Get new value from cache /key-83830190436902:MetadataCacheTest.MyClass(a=a, 
b=2) {}
   2022-02-15T15:20:29,795+0800 INFO  [main] o.a.p.m.c.i.MetadataCacheImpl@83 - 
Async load for objCache /key-83870530038528 {}
   2022-02-15T15:20:29,797+0800 INFO  [main] o.a.p.m.i.RocksdbMetadataStore@359 
- close.instanceId=1 {}
   ```




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to