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

lhotari pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new 24eba102031 [fix][meta] Metadata cache refresh might not take effect 
(#25246)
24eba102031 is described below

commit 24eba102031e3696e87ca6f5b14d96cd84f1b96a
Author: Yunze Xu <[email protected]>
AuthorDate: Mon Feb 16 18:03:41 2026 +0800

    [fix][meta] Metadata cache refresh might not take effect (#25246)
---
 .../pulsar/metadata/cache/impl/MetadataCacheImpl.java    |  7 -------
 .../org/apache/pulsar/metadata/MetadataCacheTest.java    | 16 ++++++++++++++++
 2 files changed, 16 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 ca165f0464e..b1f6f0a4f50 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
@@ -153,13 +153,6 @@ public class MetadataCacheImpl<T> implements 
MetadataCache<T>, Consumer<Notifica
                 return FutureUtils.value(Optional.<CacheGetResult<T>>empty());
             }
             final var res = optRes.get();
-            final var cachedFuture = objCache.getIfPresent(path);
-            if (cachedFuture != null && cachedFuture != future) {
-                if (log.isDebugEnabled()) {
-                    log.debug("A new read on key {} is in progress or 
completed, ignore this one", path);
-                }
-                return cachedFuture;
-            }
             try {
                 T obj = serde.deserialize(path, res.getValue(), res.getStat());
                 if (log.isDebugEnabled()) {
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 fade12e07ca..c3ae22aeb54 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
@@ -33,6 +33,7 @@ import com.github.benmanes.caffeine.cache.AsyncLoadingCache;
 import java.io.IOException;
 import java.lang.reflect.Field;
 import java.nio.charset.StandardCharsets;
+import java.time.Duration;
 import java.util.ArrayList;
 import java.util.EnumSet;
 import java.util.List;
@@ -69,6 +70,7 @@ import org.apache.pulsar.metadata.api.NotificationType;
 import org.apache.pulsar.metadata.api.Stat;
 import org.apache.pulsar.metadata.api.extended.CreateOption;
 import org.apache.pulsar.metadata.cache.impl.MetadataCacheImpl;
+import org.apache.pulsar.metadata.impl.LocalMemoryMetadataStore;
 import org.awaitility.Awaitility;
 import org.mockito.stubbing.Answer;
 import org.testng.annotations.Test;
@@ -739,4 +741,18 @@ public class MetadataCacheTest extends 
BaseMetadataStoreTest {
         assertTrue(backoff.isMandatoryStopMade());
         assertEquals(backoff.getFirstBackoffTimeInMillis(), 0);
     }
+
+    @Test
+    public void testRefreshRace() throws Exception {
+        @Cleanup final var store = new 
LocalMemoryMetadataStore("memory:local", MetadataStoreConfig.builder().build());
+        final var cache = store.getMetadataCache(String.class);
+        for (int i = 0; i < 500; i++) {
+            final var key = "/key" + i;
+            assertTrue(cache.get(key).get().isEmpty());
+
+            store.put(key, "\"value\"".getBytes(StandardCharsets.UTF_8), 
Optional.empty()).get();
+            
Awaitility.await().pollInterval(Duration.ofMillis(1)).atMost(Duration.ofSeconds(3)).untilAsserted(()
 ->
+                assertTrue(cache.get(key).get().isPresent(), "Failed at key " 
+ key));
+        }
+    }
 }

Reply via email to