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));
+ }
+ }
}