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;
