You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by yu...@apache.org on 2023/05/30 10:47:08 UTC
[pulsar] branch master updated: [improve][test] Add unit test for metadata cache #20363 (#20436)
This is an automated email from the ASF dual-hosted git repository.
yubiao 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 113d70d9299 [improve][test] Add unit test for metadata cache #20363 (#20436)
113d70d9299 is described below
commit 113d70d9299d5bc893cee9b524c7b1623dee5892
Author: 萧易客 <km...@live.com>
AuthorDate: Tue May 30 18:46:56 2023 +0800
[improve][test] Add unit test for metadata cache #20363 (#20436)
- Add `MetadataStoreTest#testExistsDistributed` for distributed metaStore implementations only
- Add `MetadataStoreTest#testGetChildrenDistributed` for distributed metaStore implementations only
---
.../pulsar/metadata/BaseMetadataStoreTest.java | 8 ++++
.../apache/pulsar/metadata/MetadataStoreTest.java | 52 ++++++++++++++++++++++
2 files changed, 60 insertions(+)
diff --git a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java
index ec6e6e03eae..411ee038c48 100644
--- a/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java
+++ b/pulsar-metadata/src/test/java/org/apache/pulsar/metadata/BaseMetadataStoreTest.java
@@ -82,6 +82,14 @@ public abstract class BaseMetadataStoreTest extends TestRetrySupport {
};
}
+ @DataProvider(name = "distributedImpl")
+ public Object[][] distributedImplementations() {
+ return new Object[][]{
+ {"ZooKeeper", stringSupplier(() -> zks.getConnectionString())},
+ {"Etcd", stringSupplier(() -> "etcd:" + getEtcdClusterConnectString())},
+ };
+ }
+
private synchronized String getEtcdClusterConnectString() {
if (etcdCluster == null) {
etcdCluster = EtcdClusterExtension.builder().withClusterName("test").withNodes(1).withSsl(false).build()
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 c87e9bda436..246661edc43 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
@@ -663,4 +663,56 @@ public class MetadataStoreTest extends BaseMetadataStoreTest {
assertTrue(e.getCause() instanceof MetadataStoreException.AlreadyClosedException);
}
}
+
+ @Test(dataProvider = "distributedImpl")
+ public void testGetChildrenDistributed(String provider, Supplier<String> urlSupplier) throws Exception {
+ @Cleanup
+ MetadataStore store1 = MetadataStoreFactory.create(urlSupplier.get(),
+ MetadataStoreConfig.builder().fsyncEnable(false).build());
+ @Cleanup
+ MetadataStore store2 = MetadataStoreFactory.create(urlSupplier.get(),
+ MetadataStoreConfig.builder().fsyncEnable(false).build());
+
+ String parent = newKey();
+ byte[] value = "value1".getBytes(StandardCharsets.UTF_8);
+ store1.put(parent, value, Optional.empty()).get();
+ store1.put(parent + "/a", value, Optional.empty()).get();
+ assertEquals(store1.getChildren(parent).get(), List.of("a"));
+ store1.delete(parent + "/a", Optional.empty()).get();
+ assertEquals(store1.getChildren(parent).get(), Collections.emptyList());
+ store1.delete(parent, Optional.empty()).get();
+ assertEquals(store1.getChildren(parent).get(), Collections.emptyList());
+ store2.put(parent + "/b", value, Optional.empty()).get();
+ // There is a chance watcher event is not triggered before the store1.getChildren() call.
+ Awaitility.await().atMost(3, TimeUnit.SECONDS)
+ .pollInterval(100, TimeUnit.MILLISECONDS)
+ .untilAsserted(() -> assertEquals(store1.getChildren(parent).get(), List.of("b")));
+ store2.put(parent + "/c", value, Optional.empty()).get();
+ Awaitility.await().atMost(3, TimeUnit.SECONDS)
+ .pollInterval(100, TimeUnit.MILLISECONDS)
+ .untilAsserted(() -> assertEquals(store1.getChildren(parent).get(), List.of("b", "c")));
+ }
+
+ @Test(dataProvider = "distributedImpl")
+ public void testExistsDistributed(String provider, Supplier<String> urlSupplier) throws Exception {
+ @Cleanup
+ MetadataStore store1 = MetadataStoreFactory.create(urlSupplier.get(),
+ MetadataStoreConfig.builder().fsyncEnable(false).build());
+ @Cleanup
+ MetadataStore store2 = MetadataStoreFactory.create(urlSupplier.get(),
+ MetadataStoreConfig.builder().fsyncEnable(false).build());
+
+ String parent = newKey();
+ byte[] value = "value1".getBytes(StandardCharsets.UTF_8);
+ assertFalse(store1.exists(parent).get());
+ store1.put(parent, value, Optional.empty()).get();
+ assertTrue(store1.exists(parent).get());
+ assertFalse(store1.exists(parent + "/a").get());
+ store2.put(parent + "/a", value, Optional.empty()).get();
+ assertTrue(store1.exists(parent + "/a").get());
+ // There is a chance watcher event is not triggered before the store1.exists() call.
+ Awaitility.await().atMost(3, TimeUnit.SECONDS)
+ .pollInterval(100, TimeUnit.MILLISECONDS)
+ .untilAsserted(() -> assertFalse(store1.exists(parent + "/b").get()));
+ }
}