FAQ
HIVE-10895: ObjectStore does not close Query objects in some calls, causing a potential leak in some metastore db resources (Aihua Xu reviewed by Chaoyu Tang, Sergey Shelukhin, Vaibhav Gumashta)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/08595ffa
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/08595ffa
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/08595ffa

Branch: refs/heads/master
Commit: 08595ffa33d4985b43249be9b7c5a081cece2e6a
Parents: 68eab64
Author: Vaibhav Gumashta <vgumashta@apache.org>
Authored: Thu Jul 9 22:53:21 2015 +0530
Committer: Vaibhav Gumashta <vgumashta@apache.org>
Committed: Thu Jul 9 22:53:21 2015 +0530

----------------------------------------------------------------------
  .../hive/metastore/MetaStoreDirectSql.java | 56 +-
  .../hadoop/hive/metastore/ObjectStore.java | 1838 ++++++++++--------
  .../hive/metastore/tools/HiveMetaTool.java | 23 +-
  .../hadoop/hive/metastore/TestObjectStore.java | 230 +++
  4 files changed, 1330 insertions(+), 817 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/08595ffa/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
----------------------------------------------------------------------
diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
index 1c21c8b..5776ec6 100644
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
@@ -178,25 +178,44 @@ class MetaStoreDirectSql {

    private boolean ensureDbInit() {
      Transaction tx = pm.currentTransaction();
+ Query dbQuery = null, tblColumnQuery = null, partColumnQuery = null;
      try {
        // Force the underlying db to initialize.
- pm.newQuery(MDatabase.class, "name == ''").execute();
- pm.newQuery(MTableColumnStatistics.class, "dbName == ''").execute();
- pm.newQuery(MPartitionColumnStatistics.class, "dbName == ''").execute();
+ dbQuery = pm.newQuery(MDatabase.class, "name == ''");
+ dbQuery.execute();
+
+ tblColumnQuery = pm.newQuery(MTableColumnStatistics.class, "dbName == ''");
+ tblColumnQuery.execute();
+
+ partColumnQuery = pm.newQuery(MPartitionColumnStatistics.class, "dbName == ''");
+ partColumnQuery.execute();
+
        return true;
      } catch (Exception ex) {
        LOG.warn("Database initialization failed; direct SQL is disabled", ex);
        tx.rollback();
        return false;
+ } finally {
+ if (dbQuery != null) {
+ dbQuery.closeAll();
+ }
+ if (tblColumnQuery != null) {
+ tblColumnQuery.closeAll();
+ }
+ if (partColumnQuery != null) {
+ partColumnQuery.closeAll();
+ }
      }
    }

    private boolean runTestQuery() {
      Transaction tx = pm.currentTransaction();
+ Query query = null;
      // Run a self-test query. If it doesn't work, we will self-disable. What a PITA...
      String selfTestQuery = "select \"DB_ID\" from \"DBS\"";
      try {
- pm.newQuery("javax.jdo.query.SQL", selfTestQuery).execute();
+ query = pm.newQuery("javax.jdo.query.SQL", selfTestQuery);
+ query.execute();
        tx.commit();
        return true;
      } catch (Exception ex) {
@@ -204,6 +223,11 @@ class MetaStoreDirectSql {
        tx.rollback();
        return false;
      }
+ finally {
+ if (query != null) {
+ query.closeAll();
+ }
+ }
    }

    public boolean isCompatibleDatastore() {
@@ -393,14 +417,21 @@ class MetaStoreDirectSql {
    }

    private boolean isViewTable(String dbName, String tblName) throws MetaException {
- String queryText = "select \"TBL_TYPE\" from \"TBLS\"" +
- " inner join \"DBS\" on \"TBLS\".\"DB_ID\" = \"DBS\".\"DB_ID\" " +
- " where \"TBLS\".\"TBL_NAME\" = ? and \"DBS\".\"NAME\" = ?";
- Object[] params = new Object[] { tblName, dbName };
- Query query = pm.newQuery("javax.jdo.query.SQL", queryText);
- query.setUnique(true);
- Object result = executeWithArray(query, params, queryText);
- return (result != null) && result.toString().equals(TableType.VIRTUAL_VIEW.toString());
+ Query query = null;
+ try {
+ String queryText = "select \"TBL_TYPE\" from \"TBLS\"" +
+ " inner join \"DBS\" on \"TBLS\".\"DB_ID\" = \"DBS\".\"DB_ID\" " +
+ " where \"TBLS\".\"TBL_NAME\" = ? and \"DBS\".\"NAME\" = ?";
+ Object[] params = new Object[] { tblName, dbName };
+ query = pm.newQuery("javax.jdo.query.SQL", queryText);
+ query.setUnique(true);
+ Object result = executeWithArray(query, params, queryText);
+ return (result != null) && result.toString().equals(TableType.VIRTUAL_VIEW.toString());
+ } finally {
+ if (query != null) {
+ query.closeAll();
+ }
+ }
    }

    /**
@@ -1190,6 +1221,7 @@ class MetaStoreDirectSql {
          partsFound++;
        }
      }
+ query.closeAll();
      return partsFound;
    }

Search Discussions

Discussion Posts

Previous

Follow ups

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 2 of 6 | next ›
Discussion Overview
groupcommits @
categorieshive, hadoop
postedJul 9, '15 at 5:23p
activeJul 9, '15 at 5:24p
posts6
users1
websitehive.apache.org

1 user in discussion

Vgumashta: 6 posts

People

Translate

site design / logo © 2021 Grokbase