HELIX-690: don't new zkClient and its dependencies in ServerContext constructor
Project: http://git-wip-us.apache.org/repos/asf/helix/repo Commit: http://git-wip-us.apache.org/repos/asf/helix/commit/4d2734e7 Tree: http://git-wip-us.apache.org/repos/asf/helix/tree/4d2734e7 Diff: http://git-wip-us.apache.org/repos/asf/helix/diff/4d2734e7 Branch: refs/heads/master Commit: 4d2734e723e79e2f7659be9fcbe238ed49fcb574 Parents: 310d476 Author: hrzhang <[email protected]> Authored: Thu Jan 4 17:43:36 2018 -0800 Committer: Junkai Xue <[email protected]> Committed: Wed Jan 24 18:33:02 2018 -0800 ---------------------------------------------------------------------- .../apache/helix/rest/server/ServerContext.java | 33 +++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/4d2734e7/helix-rest/src/main/java/org/apache/helix/rest/server/ServerContext.java ---------------------------------------------------------------------- diff --git a/helix-rest/src/main/java/org/apache/helix/rest/server/ServerContext.java b/helix-rest/src/main/java/org/apache/helix/rest/server/ServerContext.java index 2a79e6b..02e74c5 100644 --- a/helix-rest/src/main/java/org/apache/helix/rest/server/ServerContext.java +++ b/helix-rest/src/main/java/org/apache/helix/rest/server/ServerContext.java @@ -37,10 +37,10 @@ import org.apache.helix.tools.ClusterSetup; public class ServerContext { private final String _zkAddr; - private final ZkClient _zkClient; - private final ZKHelixAdmin _zkHelixAdmin; - private final ClusterSetup _clusterSetup; - private final ConfigAccessor _configAccessor; + private ZkClient _zkClient; + private ZKHelixAdmin _zkHelixAdmin; + private ClusterSetup _clusterSetup; + private ConfigAccessor _configAccessor; // 1 Cluster name will correspond to 1 helix data accessor private final Map<String, HelixDataAccessor> _helixDataAccessorPool; @@ -50,28 +50,34 @@ public class ServerContext { public ServerContext(String zkAddr) { _zkAddr = zkAddr; - _zkClient = new ZkClient(_zkAddr, ZkClient.DEFAULT_SESSION_TIMEOUT, - ZkClient.DEFAULT_CONNECTION_TIMEOUT, new ZNRecordSerializer()); - // Accessors - _configAccessor = new ConfigAccessor(getZkClient()); + // We should NOT initiate _zkClient and anything that depends on _zkClient in + // constructor, as it is reasonable to start up HelixRestServer first and then + // ZooKeeper. In this case, initializing _zkClient will fail and HelixRestServer + // cannot be started correctly. _helixDataAccessorPool = new HashMap<>(); _taskDriverPool = new HashMap<>(); - - // High level interfaces - _zkHelixAdmin = new ZKHelixAdmin(getZkClient()); - _clusterSetup = new ClusterSetup(getZkClient(), getHelixAdmin()); } public ZkClient getZkClient() { + if (_zkClient == null) { + _zkClient = new ZkClient(_zkAddr, ZkClient.DEFAULT_SESSION_TIMEOUT, + ZkClient.DEFAULT_CONNECTION_TIMEOUT, new ZNRecordSerializer()); + } return _zkClient; } public HelixAdmin getHelixAdmin() { + if (_zkHelixAdmin == null) { + _zkHelixAdmin = new ZKHelixAdmin(getZkClient()); + } return _zkHelixAdmin; } public ClusterSetup getClusterSetup() { + if (_clusterSetup == null) { + _clusterSetup = new ClusterSetup(getZkClient(), getHelixAdmin()); + } return _clusterSetup; } @@ -85,6 +91,9 @@ public class ServerContext { } public ConfigAccessor getConfigAccessor() { + if (_configAccessor == null) { + _configAccessor = new ConfigAccessor(getZkClient()); + } return _configAccessor; }
