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

commit 41aa9ea9ebf48255859fdf6e57a55a044cf2fa54
Author: Marcos Rico Peng <[email protected]>
AuthorDate: Wed Jan 18 20:43:20 2023 +0100

    Metaclient - Implementation of Create from CRUD operations
    
    Metaclient - Implementation of Create from CRUD operations
---
 .../metaclient/constants/MetaClientException.java  |  2 +-
 .../helix/metaclient/impl/zk/ZkMetaClient.java     | 29 ++++++++++++++++++----
 .../helix/metaclient/impl/zk/TestZkMetaClient.java | 16 ++++++++++++
 3 files changed, 41 insertions(+), 6 deletions(-)

diff --git 
a/meta-client/src/main/java/org/apache/helix/metaclient/constants/MetaClientException.java
 
b/meta-client/src/main/java/org/apache/helix/metaclient/constants/MetaClientException.java
index 5ace636e3..a40b8148f 100644
--- 
a/meta-client/src/main/java/org/apache/helix/metaclient/constants/MetaClientException.java
+++ 
b/meta-client/src/main/java/org/apache/helix/metaclient/constants/MetaClientException.java
@@ -35,4 +35,4 @@ public class MetaClientException extends RuntimeException {
   public MetaClientException(Throwable cause) {
     super(cause);
   }
-}
\ No newline at end of file
+}
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 35529454a..2fada4b28 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
@@ -47,8 +47,8 @@ import 
org.apache.helix.zookeeper.zkclient.exception.ZkInterruptedException;
 import org.apache.helix.zookeeper.zkclient.exception.ZkNodeExistsException;
 import org.apache.helix.zookeeper.zkclient.exception.ZkTimeoutException;
 import org.apache.zookeeper.CreateMode;
+import org.apache.zookeeper.KeeperException;
 import org.apache.zookeeper.Watcher;
-import org.apache.zookeeper.ZooDefs;
 import org.apache.zookeeper.server.EphemeralType;
 
 
@@ -67,14 +67,33 @@ public class ZkMetaClient<T> implements 
MetaClientInterface<T>, AutoCloseable {
   }
 
   @Override
-  public void create(String key, T data) {
-    // TODO: This function is implemented only for test. It does not have 
proper error handling
-    _zkClient.create(key, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, 
CreateMode.PERSISTENT);
+  public void create(String key, Object data) {
+    try {
+      create(key, data, EntryMode.PERSISTENT);
+    } catch (Exception e) {
+      throw new MetaClientException(e);
+    }
   }
 
   @Override
-  public void create(String key, T data, EntryMode mode) {
+  public void create(String key, Object data, MetaClientInterface.EntryMode 
mode) {
 
+    try{
+      _zkClient.create(key, data, metaClientModeToZkMode(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
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 0eab0315e..d822c2fa8 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
@@ -58,6 +58,22 @@ public class TestZkMetaClient {
     _zkServer.shutdown();
   }
 
+  @Test
+  public void testCreate() {
+    final String key = "/TestZkMetaClient_testCreate";
+    try (ZkMetaClient<String> zkMetaClient = createZkMetaClient()) {
+      zkMetaClient.connect();
+      zkMetaClient.create(key, ENTRY_STRING_VALUE);
+      Assert.assertNotNull(zkMetaClient.exists(key));
+
+      try {
+        zkMetaClient.create("a/b/c", "invalid_path");
+        Assert.fail("Should have failed with incorrect path.");
+      } catch (Exception ignored) {
+      }
+    }
+  }
+
   @Test
   public void testGet() {
     final String key = "/TestZkMetaClient_testGet";

Reply via email to