This is an automated email from the ASF dual-hosted git repository.

xyuanlu pushed a commit to branch metaclient
in repository https://gitbox.apache.org/repos/asf/helix.git


The following commit(s) were added to refs/heads/metaclient by this push:
     new 20683d48f MetaClient Container Node Implementation (#2377)
20683d48f is described below

commit 20683d48fe3d06170df7213dd06a737ab7ee9e36
Author: Marcos Rico Peng <[email protected]>
AuthorDate: Wed Feb 15 18:36:33 2023 -0500

    MetaClient Container Node Implementation (#2377)
    
    Implementation of Container Nodes in ZkMetaClient
---
 .../helix/metaclient/impl/zk/ZkMetaClient.java     | 13 +------------
 .../metaclient/impl/zk/util/ZkMetaClientUtil.java  |  2 +-
 .../helix/metaclient/impl/zk/TestZkMetaClient.java | 22 ++++++++++++++++++++++
 3 files changed, 24 insertions(+), 13 deletions(-)

diff --git 
a/meta-client/src/main/java/org/apache/helix/metaclient/impl/zk/ZkMetaClient.java
 
b/meta-client/src/main/java/org/apache/helix/metaclient/impl/zk/ZkMetaClient.java
index e042368d3..875eb6a50 100644
--- 
a/meta-client/src/main/java/org/apache/helix/metaclient/impl/zk/ZkMetaClient.java
+++ 
b/meta-client/src/main/java/org/apache/helix/metaclient/impl/zk/ZkMetaClient.java
@@ -77,23 +77,12 @@ public class ZkMetaClient<T> implements 
MetaClientInterface<T>, AutoCloseable {
   public void create(String key, Object data, MetaClientInterface.EntryMode 
mode) {
 
     try{
-      _zkClient.create(key, data, metaClientModeToZkMode(mode));
+      _zkClient.create(key, data, 
ZkMetaClientUtil.convertMetaClientMode(mode));
     } catch (ZkException | KeeperException e) {
       throw new MetaClientException(e);
     }
   }
 
-  private static CreateMode metaClientModeToZkMode(EntryMode mode) throws 
KeeperException {
-    switch (mode) {
-      case PERSISTENT:
-        return CreateMode.PERSISTENT;
-      case EPHEMERAL:
-        return CreateMode.EPHEMERAL;
-      default:
-        return CreateMode.PERSISTENT;
-    }
-  }
-
   @Override
   public void set(String key, T data, int version) {
     try {
diff --git 
a/meta-client/src/main/java/org/apache/helix/metaclient/impl/zk/util/ZkMetaClientUtil.java
 
b/meta-client/src/main/java/org/apache/helix/metaclient/impl/zk/util/ZkMetaClientUtil.java
index cd625f169..a733ba4fb 100644
--- 
a/meta-client/src/main/java/org/apache/helix/metaclient/impl/zk/util/ZkMetaClientUtil.java
+++ 
b/meta-client/src/main/java/org/apache/helix/metaclient/impl/zk/util/ZkMetaClientUtil.java
@@ -110,7 +110,7 @@ public class ZkMetaClientUtil {
     return OpMapHolder.OPMAP;
   }
 
-  private static CreateMode 
convertMetaClientMode(MetaClientInterface.EntryMode entryMode) throws 
KeeperException {
+  public static CreateMode convertMetaClientMode(MetaClientInterface.EntryMode 
entryMode) throws KeeperException {
     switch (entryMode) {
       case PERSISTENT:
         return CreateMode.PERSISTENT;
diff --git 
a/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestZkMetaClient.java
 
b/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestZkMetaClient.java
index 6cccfae72..70a7afccd 100644
--- 
a/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestZkMetaClient.java
+++ 
b/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestZkMetaClient.java
@@ -51,6 +51,7 @@ import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
+import static 
org.apache.helix.metaclient.api.MetaClientInterface.EntryMode.CONTAINER;
 import static 
org.apache.helix.metaclient.api.MetaClientInterface.EntryMode.PERSISTENT;
 
 
@@ -67,8 +68,19 @@ public class TestZkMetaClient {
 
   private ZkServer _zkServer;
 
+  /**
+   * Creates local Zk Server
+   * Note: Cannot test container / TTL node end to end behavior as
+   * the zk server setup doesn't allow for that. To enable this, zk server
+   * setup must invoke ContainerManager.java. However, the actual
+   * behavior has been verified to work on native ZK Client.
+   * TODO: Modify zk server setup to include ContainerManager.
+   * This can be done through ZooKeeperServerMain.java or
+   * LeaderZooKeeperServer.java.
+   */
   @BeforeClass
   public void prepare() {
+    System.setProperty("zookeeper.extendedTypesEnabled", "true");
     // start local zookeeper server
     _zkServer = startZkServer(ZK_ADDR);
   }
@@ -94,6 +106,16 @@ public class TestZkMetaClient {
     }
   }
 
+  @Test
+  public void testCreateContainer() {
+    final String key = "/TestZkMetaClient_testCreateContainer";
+    try (ZkMetaClient<String> zkMetaClient = createZkMetaClient()) {
+      zkMetaClient.connect();
+      zkMetaClient.create(key, ENTRY_STRING_VALUE, CONTAINER);
+      Assert.assertNotNull(zkMetaClient.exists(key));
+    }
+  }
+  
   @Test
   public void testGet() {
     final String key = "/TestZkMetaClient_testGet";

Reply via email to