You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by br...@apache.org on 2014/09/03 17:54:06 UTC
svn commit: r1622288 -
/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
Author: brock
Date: Wed Sep 3 15:54:06 2014
New Revision: 1622288
URL: http://svn.apache.org/r1622288
Log:
HIVE-7890 - SessionState creates HMS Client while not impersonating (Brock reviewed by Prasad)
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java?rev=1622288&r1=1622287&r2=1622288&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java Wed Sep 3 15:54:06 2014
@@ -109,6 +109,7 @@ import org.apache.hadoop.hive.shims.Hado
import org.apache.hadoop.hive.shims.ShimLoader;
import org.apache.hadoop.mapred.InputFormat;
import org.apache.hadoop.util.StringUtils;
+import org.apache.hadoop.security.UserGroupInformation;
import org.apache.thrift.TException;
import com.google.common.collect.Sets;
@@ -128,6 +129,7 @@ public class Hive {
private HiveConf conf = null;
private IMetaStoreClient metaStoreClient;
+ private UserGroupInformation owner;
private static ThreadLocal<Hive> hiveDB = new ThreadLocal<Hive>() {
@Override
@@ -181,7 +183,11 @@ public class Hive {
*/
public static Hive get(HiveConf c, boolean needsRefresh) throws HiveException {
Hive db = hiveDB.get();
- if (db == null || needsRefresh) {
+ if (db == null || needsRefresh || !db.isCurrentUserOwner()) {
+ if (db != null) {
+ LOG.debug("Creating new db. db = " + db + ", needsRefresh = " + needsRefresh +
+ ", db.isCurrentUserOwner = " + db.isCurrentUserOwner());
+ }
closeCurrent();
c.set("fs.scheme.class", "dfs");
Hive newdb = new Hive(c);
@@ -194,6 +200,11 @@ public class Hive {
public static Hive get() throws HiveException {
Hive db = hiveDB.get();
+ if (db != null && !db.isCurrentUserOwner()) {
+ LOG.debug("Creating new db. db.isCurrentUserOwner = " + db.isCurrentUserOwner());
+ db.close();
+ db = null;
+ }
if (db == null) {
SessionState session = SessionState.get();
db = new Hive(session == null ? new HiveConf(Hive.class) : session.getConf());
@@ -220,6 +231,17 @@ public class Hive {
conf = c;
}
+
+ private boolean isCurrentUserOwner() throws HiveException {
+ try {
+ return owner == null || owner.equals(UserGroupInformation.getCurrentUser());
+ } catch(IOException e) {
+ throw new HiveException("Error getting current user: " + e.getMessage(), e);
+ }
+ }
+
+
+
/**
* closes the connection to metastore for the calling thread
*/
@@ -2496,6 +2518,13 @@ private void constructOneLBLocationMap(F
@Unstable
public IMetaStoreClient getMSC() throws MetaException {
if (metaStoreClient == null) {
+ try {
+ owner = UserGroupInformation.getCurrentUser();
+ } catch(IOException e) {
+ String msg = "Error getting current user: " + e.getMessage();
+ LOG.error(msg, e);
+ throw new MetaException(msg + "\n" + StringUtils.stringifyException(e));
+ }
metaStoreClient = createMetaStoreClient();
}
return metaStoreClient;