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 <dai...@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 <prasan...@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 {