diff --git a/ql/src/java/org/apache/hadoop/hive/metastore/SynchronizedMetaStoreClient.java b/ql/src/java/org/apache/hadoop/hive/metastore/SynchronizedMetaStoreClient.java index 8826724..f87a6aa 100644 --- a/ql/src/java/org/apache/hadoop/hive/metastore/SynchronizedMetaStoreClient.java +++ b/ql/src/java/org/apache/hadoop/hive/metastore/SynchronizedMetaStoreClient.java @@ -20,6 +20,7 @@ import java.util.List; +import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hive.common.ValidTxnList; import org.apache.hadoop.hive.metastore.api.AlreadyExistsException; import org.apache.hadoop.hive.metastore.api.EnvironmentContext; @@ -111,4 +112,12 @@ public synchronized FireEventResponse fireListenerEvent(FireEventRequest rqst) t public synchronized void close() { client.close(); } + + public boolean isSameConfObj(Configuration c) { + return client.isSameConfObj(c); + } + + public boolean isCompatibleWith(Configuration c) { + return client.isCompatibleWith(c); + } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java index da690b4..c3240a9 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java @@ -327,7 +327,7 @@ private static Hive getInternal(HiveConf c, boolean needsRefresh, boolean isFast boolean doRegisterAllFns) throws HiveException { Hive db = hiveDB.get(); if (db == null || !db.isCurrentUserOwner() || needsRefresh - || (c != null && db.metaStoreClient != null && !isCompatible(db, c, isFastCheck))) { + || (c != null && !isCompatible(db, c, isFastCheck))) { db = create(c, false, db, doRegisterAllFns); } if (c != null) { @@ -360,11 +360,15 @@ private static HiveConf createHiveConf() { } private static boolean isCompatible(Hive db, HiveConf c, boolean isFastCheck) { - return isFastCheck - ? db.metaStoreClient.isSameConfObj(c) : db.metaStoreClient.isCompatibleWith(c); + if (isFastCheck) { + return (db.metaStoreClient == null || db.metaStoreClient.isSameConfObj(c)) + && (db.syncMetaStoreClient == null || db.syncMetaStoreClient.isSameConfObj(c)); + } else { + return (db.metaStoreClient == null || db.metaStoreClient.isCompatibleWith(c)) + && (db.syncMetaStoreClient == null || db.syncMetaStoreClient.isCompatibleWith(c)); + } } - public static Hive get() throws HiveException { return get(true); }