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";
