This is an automated email from the ASF dual-hosted git repository. lhotari pushed a commit to branch branch-3.3 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 409a3be4c1a43b9ebaa23f9d4f9a0e1ff19969d6 Author: Matteo Merli <[email protected]> AuthorDate: Thu Oct 16 21:54:09 2025 -0700 [fix]Fixed getChildren('/') on Oxia based provider (#24863) (cherry picked from commit e6560657e20d30103f2f01c3a24600dad1ba9ab6) --- .../metadata/impl/oxia/OxiaMetadataStore.java | 2 +- .../apache/pulsar/metadata/MetadataStoreTest.java | 22 +++++----------------- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/oxia/OxiaMetadataStore.java b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/oxia/OxiaMetadataStore.java index 77a5eac88fd..705bafda868 100644 --- a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/oxia/OxiaMetadataStore.java +++ b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/oxia/OxiaMetadataStore.java @@ -133,7 +133,7 @@ public class OxiaMetadataStore extends AbstractMetadataStore { @Override public CompletableFuture<List<String>> getChildrenFromStore(String path) { - var pathWithSlash = path + "/"; + var pathWithSlash = path.endsWith("/") ? path : path + "/"; return client .list(pathWithSlash, pathWithSlash + "/") diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataStoreTest.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataStoreTest.java index 7a333391dc9..b679ae863a6 100644 --- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataStoreTest.java +++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/MetadataStoreTest.java @@ -668,27 +668,15 @@ public class MetadataStoreTest extends BaseMetadataStoreTest { store.put("/a/a-2", "value1".getBytes(StandardCharsets.UTF_8), Optional.empty()).join(); store.put("/b/c/b/1", "value1".getBytes(StandardCharsets.UTF_8), Optional.empty()).join(); - List<String> subPaths = store.getChildren("/").get(); - Set<String> ignoredRootPaths = Set.of("zookeeper"); - Set<String> expectedSet = Set.of("a", "b"); - for (String subPath : subPaths) { - if (ignoredRootPaths.contains(subPath)) { - continue; - } - assertThat(expectedSet).contains(subPath); - } + List<String> subPaths = new ArrayList<>(store.getChildren("/").get()); + subPaths.remove("zookeeper"); // ignored + assertThat(subPaths).containsExactlyInAnyOrderElementsOf(Set.of("a", "b")); List<String> subPaths2 = store.getChildren("/a").get(); - Set<String> expectedSet2 = Set.of("a-1", "a-2"); - for (String subPath : subPaths2) { - assertThat(expectedSet2).contains(subPath); - } + assertThat(subPaths2).containsExactlyInAnyOrderElementsOf(Set.of("a-1", "a-2")); List<String> subPaths3 = store.getChildren("/b").get(); - Set<String> expectedSet3 = Set.of("c"); - for (String subPath : subPaths3) { - assertThat(expectedSet3).contains(subPath); - } + assertThat(subPaths3).containsExactlyInAnyOrderElementsOf(Set.of("c")); } @Test(dataProvider = "impl")
