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

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


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

commit fc46ca0b7ff542f36af0f0b5814f17e91e770983
Author: Viraj Jasani <[email protected]>
AuthorDate: Fri Oct 30 12:20:47 2020 +0530

    PHOENIX-6002 : Resolve connection leak through 
QueryUtil.getConnectionOnServer()
    
    Signed-off-by: Xinyi Yan <[email protected]>
---
 .../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 6a44e33..c56e890 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
@@ -259,24 +259,22 @@ public class IndexHalfStoreFileReaderGenerator extends 
BaseRegionObserver {
                 scan.addFamily(s.getFamily().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().getTableDesc());
             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.getFamily().getName(),env.getConfiguration());
-            
-
+            return new DataTableLocalIndexRegionScanner(
+                env.getRegion().getScanner(scan), env.getRegion(), maintainers,
+                store.getFamily().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 3213744..735a40b 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
@@ -131,23 +131,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 847379b..61cb297 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
@@ -2271,16 +2271,16 @@ public class MetaDataEndpointImpl extends 
MetaDataProtocol implements Coprocesso
                             && (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);
                         }
@@ -3188,6 +3188,9 @@ public class MetaDataEndpointImpl extends 
MetaDataProtocol implements Coprocesso
                 invalidateList.add(new ImmutableBytesPtr(indexKey));
             }
         }
+        if (connection != null) {
+            connection.close();
+        }
         return null;
     }
 
@@ -3255,6 +3258,9 @@ public class MetaDataEndpointImpl extends 
MetaDataProtocol implements Coprocesso
                         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 343f42d..0b0b1b9 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
@@ -78,8 +78,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);

Reply via email to