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



##########
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:
       Understood. It seems 
[`MetadataStore`](https://github.com/apache/pulsar/blob/master/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/api/MetadataStore.java#L53)
 APIs are following a different pattern: all IO operations are asynchronous by 
default. So I think `MetadataStoreLifecycle#initializeCluster` should be 
designed in the same way.




-- 
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:
[email protected]


Reply via email to