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")

Reply via email to