You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2018/01/26 11:20:43 UTC

[17/33] kylin git commit: KYLIN-3164 HBase connection must be closed when clearing connection pool

KYLIN-3164 HBase connection must be closed when clearing connection pool


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/3116abf1
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/3116abf1
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/3116abf1

Branch: refs/heads/sync
Commit: 3116abf1ded94cdc30e59f4613b22ce3dc5337dd
Parents: 120f9f3
Author: Li Yang <li...@apache.org>
Authored: Mon Jan 15 13:25:56 2018 +0800
Committer: Li Yang <li...@apache.org>
Committed: Fri Jan 26 18:53:19 2018 +0800

----------------------------------------------------------------------
 .../kylin/storage/hbase/HBaseConnection.java    | 38 +++++++++++++++-----
 1 file changed, 29 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/3116abf1/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseConnection.java
----------------------------------------------------------------------
diff --git a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseConnection.java b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseConnection.java
index 16bd20d..0c2fb04 100644
--- a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseConnection.java
+++ b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseConnection.java
@@ -20,8 +20,10 @@ package org.apache.kylin.storage.hbase;
 
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -74,14 +76,11 @@ public class HBaseConnection {
         Runtime.getRuntime().addShutdownHook(new Thread() {
             @Override
             public void run() {
-                closeCoprocessorPool();
-
-                for (Connection conn : connPool.values()) {
-                    try {
-                        conn.close();
-                    } catch (IOException e) {
-                        logger.error("error closing hbase connection " + conn, e);
-                    }
+                try {
+                    closeCoprocessorPool();
+                    closeAndRestConnPool().join();
+                } catch (InterruptedException e) {
+                    logger.error("", e);
                 }
             }
         });
@@ -128,9 +127,30 @@ public class HBaseConnection {
             coprocessorPool.shutdownNow();
         }
     }
+    
+    private static Thread closeAndRestConnPool() {
+        final List<Connection> copy = new ArrayList<>(connPool.values());
+        connPool.clear();
+        
+        Thread t = new Thread() {
+            public void run() {
+                logger.info("Closing HBase connections...");
+                for (Connection conn : copy) {
+                    try {
+                        conn.close();
+                    } catch (Exception e) {
+                        logger.error("error closing hbase connection " + conn, e);
+                    }
+                }
+            }
+        };
+        t.setName("close-hbase-conn");
+        t.start();
+        return t;
+    }
 
     public static void clearConnCache() {
-        connPool.clear();
+        closeAndRestConnPool();
     }
 
     public static Configuration getCurrentHBaseConfiguration() {