You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by da...@apache.org on 2019/04/05 22:07:25 UTC

[hive] branch master updated: HIVE-21583: KillTriggerActionHandler should use "hive" credential (Daniel Dai, reviewed by Prasanth Jayachandran)

This is an automated email from the ASF dual-hosted git repository.

daijy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new baae1aa  HIVE-21583: KillTriggerActionHandler should use "hive" credential (Daniel Dai, reviewed by Prasanth Jayachandran)
baae1aa is described below

commit baae1aa697f2425d6a7a60ff4a0ab0e6c0ea6e88
Author: Daniel Dai <da...@gmail.com>
AuthorDate: Fri Apr 5 15:06:49 2019 -0700

    HIVE-21583: KillTriggerActionHandler should use "hive" credential (Daniel Dai, reviewed by Prasanth Jayachandran)
    
    Signed-off-by: Prasanth Jayachandran <pr...@apache.org>
---
 .../org/apache/hive/jdbc/TestTriggersWorkloadManager.java     |  7 +++++++
 .../hadoop/hive/ql/exec/tez/KillTriggerActionHandler.java     |  7 +++++--
 .../org/apache/hadoop/hive/ql/exec/tez/WorkloadManager.java   | 11 +++++++----
 3 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestTriggersWorkloadManager.java b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestTriggersWorkloadManager.java
index 6a59ff1..06dd6d0 100644
--- a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestTriggersWorkloadManager.java
+++ b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestTriggersWorkloadManager.java
@@ -17,6 +17,7 @@
 package org.apache.hive.jdbc;
 
 import java.io.File;
+import java.io.FileWriter;
 import java.net.URL;
 import java.util.HashMap;
 import java.util.List;
@@ -57,6 +58,12 @@ public class TestTriggersWorkloadManager extends TestTriggersTezSessionPoolManag
 
     String confDir = "../../data/conf/llap/";
     HiveConf.setHiveSiteLocation(new URL("file://" + new File(confDir).toURI().getPath() + "/hive-site.xml"));
+    conf = new HiveConf();
+    conf.setVar(ConfVars.HIVE_AUTHENTICATOR_MANAGER, "org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator");
+    java.nio.file.Path confPath = File.createTempFile("hive", "test").toPath();
+    conf.writeXml(new FileWriter(confPath.toFile()));
+    HiveConf.setHiveSiteLocation(new URL("file://" + confPath.toString()));
+
     System.out.println("Setting hive-site: " + HiveConf.getHiveSiteLocation());
 
     conf = new HiveConf();
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/KillTriggerActionHandler.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/KillTriggerActionHandler.java
index 06e9ff6..cb27998 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/KillTriggerActionHandler.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/KillTriggerActionHandler.java
@@ -16,6 +16,7 @@
 
 package org.apache.hadoop.hive.ql.exec.tez;
 
+import java.io.IOException;
 import java.util.Map;
 
 import org.apache.hadoop.hive.conf.HiveConf;
@@ -24,6 +25,7 @@ import org.apache.hadoop.hive.ql.session.KillQuery;
 import org.apache.hadoop.hive.ql.session.SessionState;
 import org.apache.hadoop.hive.ql.wm.Trigger;
 import org.apache.hadoop.hive.ql.wm.TriggerActionHandler;
+import org.apache.hadoop.security.UserGroupInformation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -41,7 +43,8 @@ public class KillTriggerActionHandler implements TriggerActionHandler<TezSession
         TezSessionState sessionState = entry.getKey();
         String queryId = sessionState.getWmContext().getQueryId();
         try {
-          SessionState ss = new SessionState(new HiveConf());
+          UserGroupInformation ugi = UserGroupInformation.getCurrentUser();
+          SessionState ss = new SessionState(new HiveConf(), ugi.getShortUserName());
           ss.setIsHiveServerQuery(true);
           SessionState.start(ss);
           KillQuery killQuery = sessionState.getKillQuery();
@@ -50,7 +53,7 @@ public class KillTriggerActionHandler implements TriggerActionHandler<TezSession
             sessionState.getKillQuery().killQuery(queryId, entry.getValue().getViolationMsg(),
                       sessionState.getConf());
           }
-        } catch (HiveException e) {
+        } catch (HiveException|IOException e) {
           LOG.warn("Unable to kill query {} for trigger violation", queryId);
         }
         break;
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManager.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManager.java
index f8fa0cd..7ede4c8 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManager.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManager.java
@@ -30,6 +30,7 @@ import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.SettableFuture;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -76,6 +77,7 @@ import org.apache.hadoop.hive.ql.wm.TriggerActionHandler;
 import org.apache.hadoop.hive.ql.wm.WmContext;
 import org.apache.hadoop.metrics2.MetricsSystem;
 import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
+import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.hive.common.util.Ref;
 import org.apache.tez.dag.api.TezConfiguration;
 import org.codehaus.jackson.annotate.JsonAutoDetect;
@@ -427,9 +429,6 @@ public class WorkloadManager extends TezSessionPoolSession.AbstractTriggerValida
       final String reason = killCtx.reason;
       LOG.info("Killing query for {}", toKill);
       workPool.submit(() -> {
-        SessionState ss = new SessionState(new HiveConf());
-        ss.setIsHiveServerQuery(true);
-        SessionState.start(ss);
         // Note: we get query ID here, rather than in the caller, where it would be more correct
         //       because we know which exact query we intend to kill. This is valid because we
         //       are not expecting query ID to change - we never reuse the session for which a
@@ -441,13 +440,17 @@ public class WorkloadManager extends TezSessionPoolSession.AbstractTriggerValida
             WmEvent wmEvent = new WmEvent(WmEvent.EventType.KILL);
             LOG.info("Invoking KillQuery for " + queryId + ": " + reason);
             try {
+              UserGroupInformation ugi = UserGroupInformation.getCurrentUser();
+              SessionState ss = new SessionState(new HiveConf(), ugi.getShortUserName());
+              ss.setIsHiveServerQuery(true);
+              SessionState.start(ss);
               kq.killQuery(queryId, reason, toKill.getConf());
               addKillQueryResult(toKill, true);
               killCtx.killSessionFuture.set(true);
               wmEvent.endEvent(toKill);
               LOG.debug("Killed " + queryId);
               return;
-            } catch (HiveException ex) {
+            } catch (HiveException|IOException ex) {
               LOG.error("Failed to kill " + queryId + "; will try to restart AM instead" , ex);
             }
           } else {