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_r357435052
##########
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) {
+ this(zkAddress, new ZNRecordSerializer(), zkClientType);
+ }
+
+ /**
+ * Creates a ZkBaseDataAccessor with a custom implementation of ZkSerializer.
+ * 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 zkSerializer
+ */
+ public ZkBaseDataAccessor(String zkAddress, ZkSerializer zkSerializer,
Review comment:
Yes. @i3wangyi also pointed this out. I see the value in that proposition,
but since that would be considered refactoring, I'd like to get to it at a
later time.
----------------------------------------------------------------
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]