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 b16a10d0e Metaclient - Implementation of Create from CRUD operations
b16a10d0e is described below
commit b16a10d0ea07614ce2d5e738cca14495c2dadbdc
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";