helix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hu...@apache.org
Subject [helix] branch master updated: Add close() to ClusterSetup to avoid ZkClient leak (#629)
Date Fri, 22 Nov 2019 17:57:41 GMT
This is an automated email from the ASF dual-hosted git repository.

hulee pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/helix.git


The following commit(s) were added to refs/heads/master by this push:
     new 4d4cca9  Add close() to ClusterSetup to avoid ZkClient leak (#629)
4d4cca9 is described below

commit 4d4cca9b289cede16b67abb607c9d54ba1921809
Author: Hunter Lee <hulee@linkedin.com>
AuthorDate: Fri Nov 22 09:57:35 2019 -0800

    Add close() to ClusterSetup to avoid ZkClient leak (#629)
    
    ClusterSetup is a helper class that's used for cluster-related operations. This class
is missing a close() method users could call to prevent ZkClient/ZkConnection leak. This commit
adds close() method.
---
 .../java/org/apache/helix/tools/ClusterSetup.java  | 25 ++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/helix-core/src/main/java/org/apache/helix/tools/ClusterSetup.java b/helix-core/src/main/java/org/apache/helix/tools/ClusterSetup.java
index f0c909d..5d5f864 100644
--- a/helix-core/src/main/java/org/apache/helix/tools/ClusterSetup.java
+++ b/helix-core/src/main/java/org/apache/helix/tools/ClusterSetup.java
@@ -134,10 +134,14 @@ public class ClusterSetup {
   public static final String setConstraint = "setConstraint";
   public static final String removeConstraint = "removeConstraint";
 
-  static Logger _logger = LoggerFactory.getLogger(ClusterSetup.class);
-  String _zkServerAddress;
-  HelixZkClient _zkClient;
-  HelixAdmin _admin;
+  private static final Logger _logger = LoggerFactory.getLogger(ClusterSetup.class);
+  private final String _zkServerAddress;
+  private final HelixZkClient _zkClient;
+  // true if ZkBaseDataAccessor was instantiated with a HelixZkClient, false otherwise
+  // This is used for close() to determine how ZkBaseDataAccessor should close the underlying
+  // ZkClient
+  private final boolean _usesExternalZkClient;
+  private final HelixAdmin _admin;
 
   public ClusterSetup(String zkServerAddress) {
     _zkServerAddress = zkServerAddress;
@@ -145,18 +149,31 @@ public class ClusterSetup {
         .buildZkClient(new HelixZkClient.ZkConnectionConfig(_zkServerAddress));
     _zkClient.setZkSerializer(new ZNRecordSerializer());
     _admin = new ZKHelixAdmin(_zkClient);
+    _usesExternalZkClient = false;
   }
 
   public ClusterSetup(HelixZkClient zkClient) {
     _zkServerAddress = zkClient.getServers();
     _zkClient = zkClient;
     _admin = new ZKHelixAdmin(_zkClient);
+    _usesExternalZkClient = true;
   }
 
   public ClusterSetup(HelixZkClient zkClient, HelixAdmin zkHelixAdmin) {
     _zkServerAddress = zkClient.getServers();
     _zkClient = zkClient;
     _admin = zkHelixAdmin;
+    _usesExternalZkClient = true;
+  }
+
+  /**
+   * Closes any stateful resources in ClusterSetup.
+   */
+  public void close() {
+    if (_zkClient != null && !_usesExternalZkClient) {
+      _admin.close();
+      _zkClient.close();
+    }
   }
 
   public void addCluster(String clusterName, boolean overwritePrevious) {


Mime
View raw message