You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2013/10/05 18:38:21 UTC
svn commit: r1529479 - in
/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore:
MetaStoreDirectSql.java ObjectStore.java
Author: hashutosh
Date: Sat Oct 5 16:38:20 2013
New Revision: 1529479
URL: http://svn.apache.org/r1529479
Log:
HIVE-5428 : Direct SQL check fails during tests (Sergey Shelukhin via Ashutosh Chauhan)
Modified:
hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java?rev=1529479&r1=1529478&r2=1529479&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java Sat Oct 5 16:38:20 2013
@@ -46,6 +46,7 @@ import org.apache.hadoop.hive.metastore.
import org.apache.hadoop.hive.metastore.api.SkewedInfo;
import org.apache.hadoop.hive.metastore.api.StorageDescriptor;
import org.apache.hadoop.hive.metastore.api.Table;
+import org.apache.hadoop.hive.metastore.model.MDatabase;
import org.apache.hadoop.hive.metastore.parser.ExpressionTree;
import org.apache.hadoop.hive.metastore.parser.ExpressionTree.FilterBuilder;
import org.apache.hadoop.hive.metastore.parser.ExpressionTree.LeafNode;
@@ -102,7 +103,9 @@ class MetaStoreDirectSql {
tx = pm.currentTransaction();
tx.begin();
}
- // This should work. If it doesn't, we will self-disable. What a PITA...
+ // Force the underlying db to initialize.
+ pm.newQuery(MDatabase.class, "name == ''").execute();
+ // Self-test query. If it doesn't work, we will self-disable. What a PITA...
boolean isCompatibleDatastore = false;
String selfTestQuery = "select \"DB_ID\" from \"DBS\"";
try {
Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java?rev=1529479&r1=1529478&r2=1529479&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java Sat Oct 5 16:38:20 2013
@@ -1424,7 +1424,7 @@ public class ObjectStore implements RawS
int maxParts, boolean allowSql, boolean allowJdo) throws MetaException {
assert allowSql || allowJdo;
boolean doTrace = LOG.isDebugEnabled();
- boolean doUseDirectSql = canUseDirectSql(allowSql);
+ boolean doUseDirectSql = canUseDirectSql(allowSql, allowJdo);
boolean success = false;
List<Partition> parts = null;
@@ -1754,7 +1754,7 @@ public class ObjectStore implements RawS
dbName = dbName.toLowerCase();
tblName = tblName.toLowerCase();
boolean doTrace = LOG.isDebugEnabled();
- boolean doUseDirectSql = canUseDirectSql(allowSql);
+ boolean doUseDirectSql = canUseDirectSql(allowSql, allowJdo);
boolean success = false;
List<Partition> results = null;
@@ -1819,7 +1819,7 @@ public class ObjectStore implements RawS
// Filter.g stuff. That way this method and ...ByFilter would just be merged.
ExpressionTree exprTree = makeExpressionTree(filter);
- boolean doUseDirectSql = allowSql && isDirectSqlEnabled(maxParts);
+ boolean doUseDirectSql = canUseDirectSql(allowSql, allowJdo);
boolean doTrace = LOG.isDebugEnabled();
List<Partition> partitions = null;
boolean hasUnknownPartitions = false;
@@ -1877,12 +1877,6 @@ public class ObjectStore implements RawS
return hasUnknownPartitions;
}
- private boolean isDirectSqlEnabled(short maxParts) {
- // There's no portable SQL limit. It doesn't make a lot of sense w/o offset anyway.
- return (maxParts < 0)
- && HiveConf.getBoolVar(getConf(), ConfVars.METASTORE_TRY_DIRECT_SQL);
- }
-
private class LikeChecker extends ExpressionTree.TreeVisitor {
private boolean hasLike;
@@ -2062,7 +2056,7 @@ public class ObjectStore implements RawS
throws MetaException, NoSuchObjectException {
assert allowSql || allowJdo;
boolean doTrace = LOG.isDebugEnabled();
- boolean doUseDirectSql = canUseDirectSql(allowSql);
+ boolean doUseDirectSql = canUseDirectSql(allowSql, allowJdo);
dbName = dbName.toLowerCase();
tblName = tblName.toLowerCase();
@@ -2108,15 +2102,22 @@ public class ObjectStore implements RawS
}
}
- private boolean canUseDirectSql(boolean allowSql) {
+ /**
+ * @param allowSql Whether SQL usage is allowed (always true outside test).
+ * @param allowJdo Whether JDO usage is allowed (always true outside test).
+ * @return Whether we can use direct SQL.
+ */
+ private boolean canUseDirectSql(boolean allowSql, boolean allowJdo) throws MetaException {
// We don't allow direct SQL usage if we are inside a larger transaction (e.g. droptable).
// That is because some databases (e.g. Postgres) abort the entire transaction when
// any query fails, so the fallback from failed SQL to JDO is not possible.
// TODO: Drop table can be very slow on large tables, we might want to address this.
- return allowSql
- && HiveConf.getBoolVar(getConf(), ConfVars.METASTORE_TRY_DIRECT_SQL)
- && directSql.isCompatibleDatastore()
- && !isActiveTransaction();
+ boolean isEnabled = !isActiveTransaction()
+ && HiveConf.getBoolVar(getConf(), ConfVars.METASTORE_TRY_DIRECT_SQL);
+ if (!allowJdo && isEnabled && !directSql.isCompatibleDatastore()) {
+ throw new MetaException("SQL is not operational"); // test path; SQL is enabled and broken.
+ }
+ return allowSql && isEnabled && directSql.isCompatibleDatastore();
}
/**