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