You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by jx...@apache.org on 2018/01/25 21:49:31 UTC

[40/50] [abbrv] helix git commit: HELIX-690: don't new zkClient and its dependencies in ServerContext constructor

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 <hr...@linkedin.com>
Authored: Thu Jan 4 17:43:36 2018 -0800
Committer: Junkai Xue <jx...@linkedin.com>
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;
   }