From b032117e12ddd6a4f02c2d2499944fd1d6696830 Mon Sep 17 00:00:00 2001 From: shibd Date: Sun, 23 Jan 2022 13:09:24 +0800 Subject: [PATCH 1/2] Fix unit testSharedInstance fail --- .../metadata/impl/LocalMemoryMetadataStore.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/LocalMemoryMetadataStore.java b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/LocalMemoryMetadataStore.java index b80ebdbed622e..e4aeca97eb723 100644 --- a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/LocalMemoryMetadataStore.java +++ b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/LocalMemoryMetadataStore.java @@ -23,6 +23,7 @@ import java.net.URISyntaxException; import java.util.ArrayList; import java.util.EnumSet; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.NavigableMap; @@ -64,6 +65,9 @@ private static class Value { private static final Map> STATIC_MAPS = new MapMaker() .weakValues().makeMap(); + // Manage all instances to facilitate registration to the same listener + private static final Map> STATIC_INSTANCE = new MapMaker() + .weakValues().makeMap(); private static final Map STATIC_ID_GEN_MAP = new MapMaker() .weakValues().makeMap(); @@ -84,6 +88,14 @@ public LocalMemoryMetadataStore(String metadataURL, MetadataStoreConfig metadata // Use a reference from a shared data set String name = uri.getHost(); map = STATIC_MAPS.computeIfAbsent(name, __ -> new TreeMap<>()); + STATIC_INSTANCE.compute(name, (key, value) -> { + if (value == null) { + value = new HashSet<>(); + } + value.forEach(v -> registerListener(v)); + value.add(this); + return value; + }); sequentialIdGenerator = STATIC_ID_GEN_MAP.computeIfAbsent(name, __ -> new AtomicLong()); log.info("Created LocalMemoryDataStore for '{}'", name); } From 9ce1c6f899d3bd129c603559dc2e3200f6c08771 Mon Sep 17 00:00:00 2001 From: shibd Date: Mon, 24 Jan 2022 16:46:30 +0800 Subject: [PATCH 2/2] fix: registry Incomplete --- .../pulsar/metadata/impl/LocalMemoryMetadataStore.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/LocalMemoryMetadataStore.java b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/LocalMemoryMetadataStore.java index e4aeca97eb723..eab2054939048 100644 --- a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/LocalMemoryMetadataStore.java +++ b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/LocalMemoryMetadataStore.java @@ -92,7 +92,10 @@ public LocalMemoryMetadataStore(String metadataURL, MetadataStoreConfig metadata if (value == null) { value = new HashSet<>(); } - value.forEach(v -> registerListener(v)); + value.forEach(v -> { + registerListener(v); + v.registerListener(this); + }); value.add(this); return value; });