You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by GitBox <gi...@apache.org> on 2021/05/17 05:46:19 UTC

[GitHub] [pulsar] eolivelli commented on a change in pull request #10600: [broker] Setup pulsar cluster with MetadataStore

eolivelli commented on a change in pull request #10600:
URL: https://github.com/apache/pulsar/pull/10600#discussion_r633235901



##########
File path: pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/ZKMetadataStore.java
##########
@@ -360,4 +368,35 @@ private static CreateMode getCreateMode(EnumSet<CreateOption> options) {
     public long getZkSessionId() {
         return zkc.getSessionId();
     }
+
+    @Override
+    public CompletableFuture<Void> initializeCluster() {
+        if (this.metadataURL == null) {
+            return FutureUtil.failedFuture(new MetadataStoreException("metadataURL is not set"));
+        }
+        if (this.metadataStoreConfig == null) {
+            return FutureUtil.failedFuture(new MetadataStoreException("metadataStoreConfig is not set"));
+        }
+        int chrootIndex = metadataURL.indexOf("/");
+        if (chrootIndex > 0) {
+            String chrootPath = metadataURL.substring(chrootIndex);
+            String zkConnectForChrootCreation = metadataURL.substring(0, chrootIndex);
+            try (ZooKeeper chrootZk = ZooKeeperClient.newBuilder()
+                    .connectString(zkConnectForChrootCreation)
+                    .sessionTimeoutMs(metadataStoreConfig.getSessionTimeoutMillis())
+                    .connectRetryPolicy(
+                            new BoundExponentialBackoffRetryPolicy(metadataStoreConfig.getSessionTimeoutMillis(),
+                                    metadataStoreConfig.getSessionTimeoutMillis(), 0))
+                    .build()) {
+                if (chrootZk.exists(chrootPath, false) == null) {
+                    ZkUtils.createFullPathOptimistic(chrootZk, chrootPath, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
+                            CreateMode.PERSISTENT);
+                    log.info("Created zookeeper chroot path {} successfully", chrootPath);
+                }
+            } catch (Exception e) {
+                return FutureUtil.failedFuture(e);
+            }
+        }
+        return CompletableFuture.completedFuture(null);

Review comment:
       Apart from the creating of the ZooKeeper client you could use all ZK async API calls in order to make it fully async.
   But I believe it is overkilling, as you usually are going to wait for this setup operation to complete in real world operations.
   
   I am fine to keep using CompletableFuture, it makes sense to me, for consistency as @fantapsody said
   




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org