narendly commented on a change in pull request #655: Add an option for using
dedicated ZkConnection in ZkBaseDataAccessor
URL: https://github.com/apache/helix/pull/655#discussion_r357393385
##########
File path:
helix-core/src/main/java/org/apache/helix/manager/zk/ZkBaseDataAccessor.java
##########
@@ -103,35 +122,103 @@ public ZkBaseDataAccessor(HelixZkClient zkClient) {
/**
* The ZkBaseDataAccessor with custom serializer support of ZkSerializer
type.
+ * Note: This constructor will use a shared ZkConnection.
+ * Do NOT use this for ephemeral node creation/callbacks/session management.
+ * Do use this for simple CRUD operations to ZooKeeper.
* @param zkAddress The zookeeper address
*/
public ZkBaseDataAccessor(String zkAddress, ZkSerializer zkSerializer) {
- _zkClient = SharedZkClientFactory.getInstance().buildZkClient(
- new HelixZkClient.ZkConnectionConfig(zkAddress),
- new HelixZkClient.ZkClientConfig().setZkSerializer(zkSerializer));
- _usesExternalZkClient = false;
+ this(zkAddress, zkSerializer, ZkClientType.SHARED);
}
/**
* The ZkBaseDataAccessor with custom serializer support of
PathBasedZkSerializer type.
+ * Note: This constructor will use a shared ZkConnection.
+ * Do NOT use this for ephemeral node creation/callbacks/session management.
+ * Do use this for simple CRUD operations to ZooKeeper.
* @param zkAddress The zookeeper address
*/
- public ZkBaseDataAccessor(String zkAddress, PathBasedZkSerializer
zkSerializer) {
- _zkClient = SharedZkClientFactory.getInstance().buildZkClient(
- new HelixZkClient.ZkConnectionConfig(zkAddress),
- new HelixZkClient.ZkClientConfig().setZkSerializer(zkSerializer));
- _usesExternalZkClient = false;
+ public ZkBaseDataAccessor(String zkAddress, PathBasedZkSerializer
pathBasedZkSerializer) {
+ this(zkAddress, pathBasedZkSerializer, ZkClientType.SHARED);
}
/**
- * The default ZkBaseDataAccessor with {@link org.apache.helix.ZNRecord} as
the data model;
+ * Creates a ZkBaseDataAccessor with {@link org.apache.helix.ZNRecord} as
the data model.
+ * Uses a shared ZkConnection resource.
+ * Does NOT support ephemeral node creation, callbacks, or session
management.
* Uses {@link ZNRecordSerializer} serializer
* @param zkAddress The zookeeper address
*/
public ZkBaseDataAccessor(String zkAddress) {
this(zkAddress, new ZNRecordSerializer());
}
+ /**
+ * Creates a ZkBaseDataAccessor with {@link org.apache.helix.ZNRecord} as
the data model.
+ * If DEDICATED, it will use a dedicated ZkConnection, which allows ephemeral
+ * node creation, callbacks, and session management.
+ * If SHARED, it will use a shared ZkConnection, which only allows simple
+ * CRUD operations to ZooKeeper.
+ * @param zkAddress
+ * @param zkClientType
+ */
+ public ZkBaseDataAccessor(String zkAddress, ZkClientType zkClientType) {
Review comment:
I don't agree that we should include this in the interface. The
BaseDataAccessor interface does *not* assume the use of ZooKeeper. The change
here is specific to ZooKeeper.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]