Repository: tajo
Updated Branches:
  refs/heads/master bbfa076e1 -> 4b2ab6107


TAJO-1619: JDBC program is stuck after closing. (jihoon)

Closes #584


Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/4b2ab610
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/4b2ab610
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/4b2ab610

Branch: refs/heads/master
Commit: 4b2ab61072031ee39565755c285ef267e9451b55
Parents: bbfa076
Author: Jihoon Son <[email protected]>
Authored: Tue May 26 16:14:21 2015 +0900
Committer: Jihoon Son <[email protected]>
Committed: Tue May 26 16:14:21 2015 +0900

----------------------------------------------------------------------
 CHANGES                                               |  2 ++
 .../org/apache/tajo/client/SessionConnection.java     | 14 ++++++++++++++
 .../java/org/apache/tajo/jdbc/JdbcConnection.java     |  4 +++-
 3 files changed, 19 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/4b2ab610/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index f1b7e6e..0d71d2f 100644
--- a/CHANGES
+++ b/CHANGES
@@ -136,6 +136,8 @@ Release 0.11.0 - unreleased
 
   BUG FIXES
 
+    TAJO-1619: JDBC program is stuck after closing. (jihoon)
+
     TAJO-1620: random() in an SQL should generate RANDOM numbers.
     (Contributed by Jongyoung Park, Committed by jihoon)
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/4b2ab610/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
----------------------------------------------------------------------
diff --git 
a/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java 
b/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
index 84decd5..ee2d45a 100644
--- a/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
@@ -30,9 +30,11 @@ import org.apache.tajo.ipc.ClientProtos.ResultCode;
 import org.apache.tajo.ipc.ClientProtos.SessionUpdateResponse;
 import org.apache.tajo.ipc.TajoMasterClientProtocol;
 import org.apache.tajo.rpc.NettyClientBase;
+import org.apache.tajo.rpc.RpcChannelFactory;
 import org.apache.tajo.rpc.RpcClientManager;
 import org.apache.tajo.rpc.RpcConstants;
 import org.apache.tajo.service.ServiceTracker;
+import org.apache.tajo.util.CommonTestingUtil;
 import org.apache.tajo.util.KeyValueSet;
 import org.apache.tajo.util.ProtoUtil;
 
@@ -45,6 +47,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import static org.apache.tajo.ipc.ClientProtos.CreateSessionRequest;
 import static org.apache.tajo.ipc.ClientProtos.CreateSessionResponse;
@@ -54,6 +57,8 @@ public class SessionConnection implements Closeable {
 
   private final static Log LOG = LogFactory.getLog(SessionConnection.class);
 
+  private final static AtomicInteger connections = new AtomicInteger();
+
   final RpcClientManager manager;
 
   private String baseDatabase;
@@ -112,6 +117,7 @@ public class SessionConnection implements Closeable {
         // Client do not closed on idle state for support high available
         this.client = manager.newClient(getTajoMasterAddr(), 
TajoMasterClientProtocol.class, false,
             manager.getRetries(), 0, TimeUnit.SECONDS, false);
+        connections.incrementAndGet();
       } catch (Exception e) {
         throw new ServiceException(e);
       }
@@ -272,6 +278,14 @@ public class SessionConnection implements Closeable {
       // ignore
     } finally {
       RpcClientManager.cleanup(client);
+      if(connections.decrementAndGet() == 0) {
+        if (!System.getProperty(CommonTestingUtil.TAJO_TEST_KEY, 
"FALSE").equals(CommonTestingUtil.TAJO_TEST_TRUE)) {
+          RpcChannelFactory.shutdownGracefully();
+          if (LOG.isDebugEnabled()) {
+            LOG.debug("RPC connection is closed");
+          }
+        }
+      }
     }
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/4b2ab610/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/JdbcConnection.java
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/JdbcConnection.java 
b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/JdbcConnection.java
index 2879540..959860d 100644
--- a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/JdbcConnection.java
+++ b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/JdbcConnection.java
@@ -33,7 +33,9 @@ import org.apache.tajo.util.KeyValueSet;
 import java.io.IOException;
 import java.net.URI;
 import java.sql.*;
-import java.util.*;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
 import java.util.concurrent.Executor;
 import java.util.concurrent.atomic.AtomicBoolean;
 

Reply via email to