PHOENIX-2552 Fix hanging Jenkins builds

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

Branch: refs/heads/4.x-HBase-1.0
Commit: 4cc7f3c9296e64c66fe2fbf08c2829660f4ed788
Parents: 4c99fc2
Author: James Taylor <[email protected]>
Authored: Thu Dec 31 09:55:38 2015 -0800
Committer: James Taylor <[email protected]>
Committed: Thu Dec 31 11:18:44 2015 -0800

----------------------------------------------------------------------
 .../ConnectionQueryServicesTestImpl.java        | 20 ++++++++++++++++++++
 .../phoenix/iterate/ScanningResultIterator.java | 10 +++++++---
 .../apache/phoenix/jdbc/PhoenixConnection.java  |  2 +-
 3 files changed, 28 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/4cc7f3c9/phoenix-core/src/it/java/org/apache/phoenix/end2end/ConnectionQueryServicesTestImpl.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ConnectionQueryServicesTestImpl.java
 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ConnectionQueryServicesTestImpl.java
index 2028223..d941fd5 100644
--- 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ConnectionQueryServicesTestImpl.java
+++ 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ConnectionQueryServicesTestImpl.java
@@ -19,10 +19,15 @@ package org.apache.phoenix.end2end;
 
 import java.sql.SQLException;
 import java.util.Properties;
+import java.util.Set;
 
+import org.apache.phoenix.jdbc.PhoenixConnection;
 import org.apache.phoenix.jdbc.PhoenixEmbeddedDriver.ConnectionInfo;
 import org.apache.phoenix.query.ConnectionQueryServicesImpl;
 import org.apache.phoenix.query.QueryServices;
+import org.apache.phoenix.util.SQLCloseables;
+
+import com.google.common.collect.Sets;
 
 /**
  * 
@@ -34,12 +39,24 @@ import org.apache.phoenix.query.QueryServices;
  */
 public class ConnectionQueryServicesTestImpl extends 
ConnectionQueryServicesImpl {
     protected int NUM_SLAVES_BASE = 1; // number of slaves for the cluster
+    // Track open connections to free them on close as unit tests don't always 
do this.
+    private Set<PhoenixConnection> connections = Sets.newHashSet();
     
     public ConnectionQueryServicesTestImpl(QueryServices services, 
ConnectionInfo info, Properties props) throws SQLException {
         super(services, info, props);
     }
     
     @Override
+    public void addConnection(PhoenixConnection connection) throws 
SQLException {
+        connections.add(connection);
+    }
+    
+    @Override
+    public void removeConnection(PhoenixConnection connection) throws 
SQLException {
+        connections.remove(connection);
+    }
+
+    @Override
     public void init(String url, Properties props) throws SQLException {
         try {
             super.init(url, props);
@@ -61,6 +78,9 @@ public class ConnectionQueryServicesTestImpl extends 
ConnectionQueryServicesImpl
     @Override
     public void close() throws SQLException {
         try {
+            Set<PhoenixConnection> connections = this.connections;
+            this.connections = Sets.newHashSet();
+            SQLCloseables.closeAll(connections);
             clearCache();
         } finally {
             super.close();

http://git-wip-us.apache.org/repos/asf/phoenix/blob/4cc7f3c9/phoenix-core/src/main/java/org/apache/phoenix/iterate/ScanningResultIterator.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/iterate/ScanningResultIterator.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/iterate/ScanningResultIterator.java
index b722794..604e1a7 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/iterate/ScanningResultIterator.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/iterate/ScanningResultIterator.java
@@ -28,9 +28,9 @@ import org.apache.hadoop.hbase.KeyValue;
 import org.apache.hadoop.hbase.KeyValueUtil;
 import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.ResultScanner;
+import org.apache.phoenix.monitoring.CombinableMetric;
 import org.apache.phoenix.monitoring.CombinableMetric.NoOpRequestMetric;
 import org.apache.phoenix.monitoring.GlobalClientMetrics;
-import org.apache.phoenix.monitoring.CombinableMetric;
 import org.apache.phoenix.schema.tuple.ResultTuple;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.ServerUtil;
@@ -53,10 +53,14 @@ public class ScanningResultIterator implements 
ResultIterator {
     public Tuple next() throws SQLException {
         try {
             Result result = scanner.next();
+            if (result == null) {
+                close(); // Free up resources early
+                return null;
+            }
             calculateScanSize(result);
-            // TODO: use ResultTuple.setResult(result)
+            // TODO: use ResultTuple.setResult(result)?
             // Need to create a new one if holding on to it (i.e. 
OrderedResultIterator)
-            return result == null ? null : new ResultTuple(result);
+            return new ResultTuple(result);
         } catch (IOException e) {
             throw ServerUtil.parseServerException(e);
         }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/4cc7f3c9/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixConnection.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixConnection.java 
b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixConnection.java
index 2a7b933..d547fb4 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixConnection.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/PhoenixConnection.java
@@ -123,7 +123,7 @@ import co.cask.tephra.TransactionContext;
  * 
  * @since 0.1
  */
-public class PhoenixConnection implements Connection, MetaDataMutated {
+public class PhoenixConnection implements Connection, MetaDataMutated, 
SQLCloseable {
     private final String url;
     private final ConnectionQueryServices services;
     private final Properties info;

Reply via email to