You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by xu...@apache.org on 2015/09/09 09:09:04 UTC
[34/50] [abbrv] hive git commit: HIVE-11668 : make sure directsql
calls pre-query init when needed (Sergey Shelukhin,
reviewed by Sushanth Sowmyan)
HIVE-11668 : make sure directsql calls pre-query init when needed (Sergey Shelukhin, reviewed by Sushanth Sowmyan)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/5a1957fc
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/5a1957fc
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/5a1957fc
Branch: refs/heads/beeline-cli
Commit: 5a1957fc61da4d5e32c46e8e38bdf596eaeef8a3
Parents: 308ae90
Author: Sergey Shelukhin <se...@apache.org>
Authored: Wed Sep 2 11:05:44 2015 -0700
Committer: Sergey Shelukhin <se...@apache.org>
Committed: Wed Sep 2 12:27:11 2015 -0700
----------------------------------------------------------------------
.../hive/metastore/MetaStoreDirectSql.java | 29 ++++++++++++++++----
1 file changed, 23 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/5a1957fc/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 522fcc2..1f89b7c 100644
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
@@ -178,7 +178,13 @@ class MetaStoreDirectSql {
private boolean ensureDbInit() {
Transaction tx = pm.currentTransaction();
+ boolean doCommit = false;
+ if (!tx.isActive()) {
+ tx.begin();
+ doCommit = true;
+ }
Query dbQuery = null, tblColumnQuery = null, partColumnQuery = null;
+
try {
// Force the underlying db to initialize.
dbQuery = pm.newQuery(MDatabase.class, "name == ''");
@@ -192,10 +198,14 @@ class MetaStoreDirectSql {
return true;
} catch (Exception ex) {
+ doCommit = false;
LOG.warn("Database initialization failed; direct SQL is disabled", ex);
tx.rollback();
return false;
} finally {
+ if (doCommit) {
+ tx.commit();
+ }
if (dbQuery != null) {
dbQuery.closeAll();
}
@@ -210,23 +220,28 @@ class MetaStoreDirectSql {
private boolean runTestQuery() {
Transaction tx = pm.currentTransaction();
+ boolean doCommit = false;
if (!tx.isActive()) {
tx.begin();
+ doCommit = true;
}
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 {
+ doDbSpecificInitializationsBeforeQuery();
query = pm.newQuery("javax.jdo.query.SQL", selfTestQuery);
query.execute();
- tx.commit();
return true;
- } catch (Exception ex) {
- LOG.warn("Self-test query [" + selfTestQuery + "] failed; direct SQL is disabled", ex);
+ } catch (Throwable t) {
+ doCommit = false;
+ LOG.warn("Self-test query [" + selfTestQuery + "] failed; direct SQL is disabled", t);
tx.rollback();
return false;
- }
- finally {
+ } finally {
+ if (doCommit) {
+ tx.commit();
+ }
if (query != null) {
query.closeAll();
}
@@ -524,7 +539,6 @@ class MetaStoreDirectSql {
+ "where \"PART_ID\" in (" + partIds + ") order by \"PART_NAME\" asc";
long start = doTrace ? System.nanoTime() : 0;
Query query = pm.newQuery("javax.jdo.query.SQL", queryText);
- @SuppressWarnings("unchecked")
List<Object[]> sqlResult = executeWithArray(query, null, queryText);
long queryTime = doTrace ? System.nanoTime() : 0;
Deadline.checkTimeout();
@@ -1095,6 +1109,7 @@ class MetaStoreDirectSql {
if (colNames.isEmpty()) {
return null;
}
+ doDbSpecificInitializationsBeforeQuery();
boolean doTrace = LOG.isDebugEnabled();
long start = doTrace ? System.nanoTime() : 0;
String queryText = "select " + STATS_COLLIST + " from \"TAB_COL_STATS\" "
@@ -1214,6 +1229,7 @@ class MetaStoreDirectSql {
private List<ColumnStatisticsObj> columnStatisticsObjForPartitions(String dbName,
String tableName, List<String> partNames, List<String> colNames, long partsFound,
boolean useDensityFunctionForNDVEstimation) throws MetaException {
+ doDbSpecificInitializationsBeforeQuery();
// TODO: all the extrapolation logic should be moved out of this class,
// only mechanical data retrieval should remain here.
String commonPrefix = "select \"COLUMN_NAME\", \"COLUMN_TYPE\", "
@@ -1530,6 +1546,7 @@ class MetaStoreDirectSql {
return Lists.newArrayList();
}
boolean doTrace = LOG.isDebugEnabled();
+ doDbSpecificInitializationsBeforeQuery();
long start = doTrace ? System.nanoTime() : 0;
String queryText = "select \"PARTITION_NAME\", " + STATS_COLLIST + " from \"PART_COL_STATS\""
+ " where \"DB_NAME\" = ? and \"TABLE_NAME\" = ? and \"COLUMN_NAME\" in ("