narendly commented on a change in pull request #855: Make ZkBaseDataAccessor
realm-aware
URL: https://github.com/apache/helix/pull/855#discussion_r389205854
##########
File path:
helix-core/src/main/java/org/apache/helix/manager/zk/ZkBaseDataAccessor.java
##########
@@ -102,21 +108,75 @@ public AccessResult() {
private static Logger LOG =
LoggerFactory.getLogger(ZkBaseDataAccessor.class);
- private final HelixZkClient _zkClient;
- // true if ZkBaseDataAccessor was instantiated with a HelixZkClient, false
otherwise
+ private final RealmAwareZkClient _zkClient;
+ // true if ZkBaseDataAccessor was instantiated with a RealmAwareZkClient,
false otherwise
// This is used for close() to determine how ZkBaseDataAccessor should close
the underlying
// ZkClient
private final boolean _usesExternalZkClient;
+ /**
+ * @deprecated it is recommended to use the other constructors instead to
avoid having to manually
+ * create and maintain a RealmAwareZkClient outside of ZkBaseDataAccessor.
+ *
+ * @param zkClient A created RealmAwareZkClient
+ */
@Deprecated
- public ZkBaseDataAccessor(HelixZkClient zkClient) {
+ public ZkBaseDataAccessor(RealmAwareZkClient zkClient) {
if (zkClient == null) {
throw new NullPointerException("zkclient is null");
}
_zkClient = zkClient;
_usesExternalZkClient = true;
}
+ private ZkBaseDataAccessor(Builder builder) {
+ RealmAwareZkClient zkClient;
+ switch (builder.realmMode) {
+ case MULTI_REALM:
+ try {
+ zkClient = new
FederatedZkClient(builder.realmAwareZkConnectionConfig,
+ builder.realmAwareZkClientConfig);
+ // Break here to exit.
+ break;
+ } catch (IOException | InvalidRoutingDataException |
IllegalStateException e) {
+ if (builder.zkAddress == null || builder.zkAddress.isEmpty()) {
+ throw new IllegalStateException("Not able to connect on
multi-realm mode.", e);
+ }
+ LOG.info("Not able to connect on multi-realm mode. "
+ + "Connecting on single-realm mode to ZK: {}",
builder.zkAddress);
+ builder.setRealmMode(RealmAwareZkClient.RealmMode.SINGLE_REALM);
+ }
+ // No break here. If connecting on multi-realm fails and ZK address is
valid, connecting
+ // on single-realm is allowed.
+
Review comment:
As discussed offline, please make sure you're throwing a HelixException and
propagating the Exception.
Note that we shouldn't fall back to single-realm mode. We should fail here.
----------------------------------------------------------------
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]