You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ya...@apache.org on 2020/10/30 17:17:37 UTC

[phoenix] branch master updated: PHOENIX-6002 : Resolve connection leak through QueryUtil.getConnectionOnServer()

This is an automated email from the ASF dual-hosted git repository.

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


The following commit(s) were added to refs/heads/master by this push:
     new bbe2aec  PHOENIX-6002 : Resolve connection leak through QueryUtil.getConnectionOnServer()
bbe2aec is described below

commit bbe2aecdd41c807abe31423d4dcd16da6c8f76de
Author: Viraj Jasani <vj...@apache.org>
AuthorDate: Thu Oct 29 15:27:28 2020 +0530

    PHOENIX-6002 : Resolve connection leak through QueryUtil.getConnectionOnServer()
    
    Signed-off-by: Xinyi Yan <ya...@apache.org>
---
 .../IndexHalfStoreFileReaderGenerator.java         | 16 +++++-----
 .../phoenix/coprocessor/DropColumnMutator.java     | 34 ++++++++++++----------
 .../phoenix/coprocessor/MetaDataEndpointImpl.java  | 24 +++++++++------
 .../phoenix/mapreduce/FormatToKeyValueReducer.java |  4 +--
 4 files changed, 43 insertions(+), 35 deletions(-)

diff --git a/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexHalfStoreFileReaderGenerator.java b/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexHalfStoreFileReaderGenerator.java
index 7254f57..5e59136 100644
--- a/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexHalfStoreFileReaderGenerator.java
+++ b/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexHalfStoreFileReaderGenerator.java
@@ -276,24 +276,22 @@ public class IndexHalfStoreFileReaderGenerator implements RegionObserver, Region
                 scan.addFamily(s.getColumnFamilyDescriptor().getName());
             }
         }
-        try {
-            PhoenixConnection conn = QueryUtil.getConnectionOnServer(env.getConfiguration())
-                    .unwrap(PhoenixConnection.class);
+        try (PhoenixConnection conn = QueryUtil.getConnectionOnServer(
+                env.getConfiguration()).unwrap(PhoenixConnection.class)) {
             PTable dataPTable = IndexUtil.getPDataTable(conn, env.getRegion().getTableDescriptor());
             final List<IndexMaintainer> maintainers = Lists
-                    .newArrayListWithExpectedSize(dataPTable.getIndexes().size());
+                .newArrayListWithExpectedSize(dataPTable.getIndexes().size());
             for (PTable index : dataPTable.getIndexes()) {
                 if (index.getIndexType() == IndexType.LOCAL) {
                     maintainers.add(index.getIndexMaintainer(dataPTable, conn));
                 }
             }
-            return new DataTableLocalIndexRegionScanner(env.getRegion().getScanner(scan), env.getRegion(),
-                    maintainers, store.getColumnFamilyDescriptor().getName(),env.getConfiguration());
-            
-
+            return new DataTableLocalIndexRegionScanner(
+                env.getRegion().getScanner(scan), env.getRegion(), maintainers,
+                store.getColumnFamilyDescriptor().getName(),
+                env.getConfiguration());
         } catch (SQLException e) {
             throw new IOException(e);
-
         }
     }
 }
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/DropColumnMutator.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/DropColumnMutator.java
index f1491b9..1fe9d84 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/DropColumnMutator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/DropColumnMutator.java
@@ -132,23 +132,27 @@ public class DropColumnMutator implements ColumnMutator {
                 if (existingViewColumn != null && view.getViewStatement() != null) {
                     ParseNode viewWhere =
                             new SQLParser(view.getViewStatement()).parseQuery().getWhere();
-                    PhoenixConnection conn = QueryUtil.getConnectionOnServer(conf).unwrap(
-                            PhoenixConnection.class);
-                    PhoenixStatement statement = new PhoenixStatement(conn);
-                    TableRef baseTableRef = new TableRef(view);
-                    ColumnResolver columnResolver = FromCompiler.getResolver(baseTableRef);
-                    StatementContext context = new StatementContext(statement, columnResolver);
-                    Expression whereExpression = WhereCompiler.compile(context, viewWhere);
-                    Expression colExpression =
-                            new ColumnRef(baseTableRef, existingViewColumn.getPosition())
-                                    .newColumnExpression();
-                    MetaDataEndpointImpl.ColumnFinder columnFinder =
-                            new MetaDataEndpointImpl.ColumnFinder(colExpression);
-                    whereExpression.accept(columnFinder);
-                    if (columnFinder.getColumnFound()) {
-                        return new MetaDataProtocol.MetaDataMutationResult(
+                    try (PhoenixConnection conn =
+                            QueryUtil.getConnectionOnServer(conf)
+                                .unwrap(PhoenixConnection.class)) {
+                        PhoenixStatement statement = new PhoenixStatement(conn);
+                        TableRef baseTableRef = new TableRef(view);
+                        ColumnResolver columnResolver =
+                            FromCompiler.getResolver(baseTableRef);
+                        StatementContext context =
+                            new StatementContext(statement, columnResolver);
+                        Expression whereExpression =
+                            WhereCompiler.compile(context, viewWhere);
+                        Expression colExpression = new ColumnRef(baseTableRef,
+                            existingViewColumn.getPosition()).newColumnExpression();
+                        MetaDataEndpointImpl.ColumnFinder columnFinder =
+                          new MetaDataEndpointImpl.ColumnFinder(colExpression);
+                        whereExpression.accept(columnFinder);
+                        if (columnFinder.getColumnFound()) {
+                            return new MetaDataProtocol.MetaDataMutationResult(
                                 MetaDataProtocol.MutationCode.UNALLOWED_TABLE_MUTATION,
                                 EnvironmentEdgeManager.currentTimeMillis(), table);
+                        }
                     }
                 }
 
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
index a830d7f..e4e6742 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
@@ -2290,16 +2290,16 @@ public class MetaDataEndpointImpl extends MetaDataProtocol implements RegionCopr
                             && (clientVersion >= MIN_SPLITTABLE_SYSTEM_CATALOG ||
                             SchemaUtil.getPhysicalTableName(SYSTEM_CHILD_LINK_NAME_BYTES,
                                     env.getConfiguration()).equals(hTable.getName()))) {
-                        try {
-                            PhoenixConnection conn =
-                                    QueryUtil.getConnectionOnServer(env.getConfiguration())
-                                            .unwrap(PhoenixConnection.class);
+                        try (PhoenixConnection conn =
+                                QueryUtil.getConnectionOnServer(env.getConfiguration())
+                                    .unwrap(PhoenixConnection.class)) {
                             Task.addTask(conn, PTable.TaskType.DROP_CHILD_VIEWS,
-                                    Bytes.toString(tenantIdBytes), Bytes.toString(schemaName),
-                                    Bytes.toString(tableOrViewName),
-                                    PTable.TaskStatus.CREATED.toString(),
-                                    null, null, null, null,
-                                    this.accessCheckEnabled);
+                                Bytes.toString(tenantIdBytes),
+                                Bytes.toString(schemaName),
+                                Bytes.toString(tableOrViewName),
+                                PTable.TaskStatus.CREATED.toString(),
+                                null, null, null, null,
+                                this.accessCheckEnabled);
                         } catch (Throwable t) {
                             LOGGER.error("Adding a task to drop child views failed!", t);
                         }
@@ -3201,6 +3201,9 @@ public class MetaDataEndpointImpl extends MetaDataProtocol implements RegionCopr
                 invalidateList.add(new ImmutableBytesPtr(indexKey));
             }
         }
+        if (connection != null) {
+            connection.close();
+        }
         return null;
     }
 
@@ -3268,6 +3271,9 @@ public class MetaDataEndpointImpl extends MetaDataProtocol implements RegionCopr
                         index.getSchemaName().getBytes() : ByteUtil.EMPTY_BYTE_ARRAY, index.getTableName().getBytes());
             }
         }
+        if (connection != null) {
+            connection.close();
+        }
         return null;
     }
 
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/FormatToKeyValueReducer.java b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/FormatToKeyValueReducer.java
index ea727f7..9dccd6c 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/FormatToKeyValueReducer.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/mapreduce/FormatToKeyValueReducer.java
@@ -77,8 +77,8 @@ public class FormatToKeyValueReducer
         for (Map.Entry<String, String> entry : conf) {
             clientInfos.setProperty(entry.getKey(), entry.getValue());
         }
-        try {
-            PhoenixConnection conn = (PhoenixConnection) QueryUtil.getConnectionOnServer(clientInfos, conf);
+        try (PhoenixConnection conn = (PhoenixConnection) QueryUtil
+                .getConnectionOnServer(clientInfos, conf)) {
             builder = conn.getKeyValueBuilder();
             final String tableNamesConf = conf.get(FormatToBytesWritableMapper.TABLE_NAMES_CONFKEY);
             final String logicalNamesConf = conf.get(FormatToBytesWritableMapper.LOGICAL_NAMES_CONFKEY);