diff --git a/itests/hive-minikdc/src/test/java/org/apache/hive/minikdc/TestHs2HooksWithMiniKdc.java b/itests/hive-minikdc/src/test/java/org/apache/hive/minikdc/TestHs2HooksWithMiniKdc.java index 4fabe47c68..1cd0ee8842 100644 --- a/itests/hive-minikdc/src/test/java/org/apache/hive/minikdc/TestHs2HooksWithMiniKdc.java +++ b/itests/hive-minikdc/src/test/java/org/apache/hive/minikdc/TestHs2HooksWithMiniKdc.java @@ -24,7 +24,7 @@ import java.util.HashMap; import java.util.Map; -import junit.framework.Assert; +import org.junit.Assert; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.conf.HiveConf.ConfVars; @@ -114,16 +114,16 @@ public void testHookContexts() throws Throwable { throw error; } - Assert.assertNotNull(PostExecHook.ipAddress, "ipaddress is null"); - Assert.assertNotNull(PostExecHook.userName, "userName is null"); - Assert.assertNotNull(PostExecHook.operation , "operation is null"); + Assert.assertNotNull("ipaddress is null", PostExecHook.ipAddress); + Assert.assertNotNull("userName is null", PostExecHook.userName); + Assert.assertNotNull("operation is null", PostExecHook.operation); Assert.assertEquals(MiniHiveKdc.HIVE_TEST_USER_1, PostExecHook.userName); Assert.assertTrue(PostExecHook.ipAddress, PostExecHook.ipAddress.contains("127.0.0.1")); Assert.assertEquals("SHOWTABLES", PostExecHook.operation); - Assert.assertNotNull(PreExecHook.ipAddress, "ipaddress is null"); - Assert.assertNotNull(PreExecHook.userName, "userName is null"); - Assert.assertNotNull(PreExecHook.operation , "operation is null"); + Assert.assertNotNull("ipaddress is null", PreExecHook.ipAddress); + Assert.assertNotNull("userName is null", PreExecHook.userName); + Assert.assertNotNull("operation is null", PreExecHook.operation); Assert.assertEquals(MiniHiveKdc.HIVE_TEST_USER_1, PreExecHook.userName); Assert.assertTrue(PreExecHook.ipAddress, PreExecHook.ipAddress.contains("127.0.0.1")); Assert.assertEquals("SHOWTABLES", PreExecHook.operation); @@ -137,12 +137,14 @@ public void testHookContexts() throws Throwable { throw error; } - Assert.assertNotNull(SemanticAnalysisHook.ipAddress, - "semantic hook context ipaddress is null"); - Assert.assertNotNull(SemanticAnalysisHook.userName, - "semantic hook context userName is null"); - Assert.assertNotNull(SemanticAnalysisHook.command , - "semantic hook context command is null"); + Assert.assertNotNull("semantic hook context ipaddress is null", + SemanticAnalysisHook.ipAddress); + Assert.assertNotNull("semantic hook context userName is null", + SemanticAnalysisHook.userName); + Assert.assertNotNull("semantic hook context command is null", + SemanticAnalysisHook.command); + Assert.assertNotNull("semantic hook context commandType is null", + SemanticAnalysisHook.commandType); Assert.assertTrue(SemanticAnalysisHook.ipAddress, SemanticAnalysisHook.ipAddress.contains("127.0.0.1")); Assert.assertEquals("show tables", SemanticAnalysisHook.command); diff --git a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/hooks/TestHs2Hooks.java b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/hooks/TestHs2Hooks.java index 6f3e7799a1..dad516cda2 100644 --- a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/hooks/TestHs2Hooks.java +++ b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/hooks/TestHs2Hooks.java @@ -25,7 +25,7 @@ import java.util.List; import java.util.Properties; -import junit.framework.Assert; +import org.junit.Assert; import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.conf.HiveConf.ConfVars; @@ -36,6 +36,7 @@ import org.apache.hadoop.hive.ql.parse.HiveSemanticAnalyzerHook; import org.apache.hadoop.hive.ql.parse.HiveSemanticAnalyzerHookContext; import org.apache.hadoop.hive.ql.parse.SemanticException; +import org.apache.hadoop.hive.ql.plan.HiveOperation; import org.apache.hadoop.hive.ql.exec.Task; import org.apache.hive.jdbc.HiveConnection; import org.apache.hive.service.server.HiveServer2; @@ -98,6 +99,7 @@ public void run(HookContext hookContext) { public static class SemanticAnalysisHook implements HiveSemanticAnalyzerHook { public static String userName; public static String command; + public static HiveOperation commandType; public static String ipAddress; public static Throwable preAnalyzeError; public static Throwable postAnalyzeError; @@ -109,6 +111,7 @@ public ASTNode preAnalyze(HiveSemanticAnalyzerHookContext context, userName = context.getUserName(); ipAddress = context.getIpAddress(); command = context.getCommand(); + commandType = context.getHiveOperation(); } catch (Throwable t) { LOG.error("Error in semantic analysis hook preAnalyze: " + t, t); preAnalyzeError = t; @@ -123,6 +126,7 @@ public void postAnalyze(HiveSemanticAnalyzerHookContext context, userName = context.getUserName(); ipAddress = context.getIpAddress(); command = context.getCommand(); + commandType = context.getHiveOperation(); } catch (Throwable t) { LOG.error("Error in semantic analysis hook postAnalyze: " + t, t); postAnalyzeError = t; @@ -170,6 +174,7 @@ public void setUpTest() throws Exception { SemanticAnalysisHook.userName = null; SemanticAnalysisHook.ipAddress = null; SemanticAnalysisHook.command = null; + SemanticAnalysisHook.commandType = null; SemanticAnalysisHook.preAnalyzeError = null; SemanticAnalysisHook.postAnalyzeError = null; } @@ -203,9 +208,9 @@ public void testHookContexts() throws Throwable { Assert.assertEquals("SHOWTABLES", PostExecHook.operation); Assert.assertEquals(System.getProperty("user.name"), PreExecHook.userName); - Assert.assertNotNull(PreExecHook.ipAddress, "ipaddress is null"); - Assert.assertNotNull(PreExecHook.userName, "userName is null"); - Assert.assertNotNull(PreExecHook.operation , "operation is null"); + Assert.assertNotNull("ipaddress is null", PreExecHook.ipAddress); + Assert.assertNotNull("userName is null", PreExecHook.userName); + Assert.assertNotNull("operation is null", PreExecHook.operation); Assert.assertTrue(PreExecHook.ipAddress, PreExecHook.ipAddress.contains("127.0.0.1")); Assert.assertEquals("SHOWTABLES", PreExecHook.operation); @@ -218,12 +223,14 @@ public void testHookContexts() throws Throwable { throw error; } - Assert.assertNotNull(SemanticAnalysisHook.ipAddress, - "semantic hook context ipaddress is null"); - Assert.assertNotNull(SemanticAnalysisHook.userName, - "semantic hook context userName is null"); - Assert.assertNotNull(SemanticAnalysisHook.command , - "semantic hook context command is null"); + Assert.assertNotNull("semantic hook context ipaddress is null", + SemanticAnalysisHook.ipAddress); + Assert.assertNotNull("semantic hook context userName is null", + SemanticAnalysisHook.userName); + Assert.assertNotNull("semantic hook context command is null", + SemanticAnalysisHook.command); + Assert.assertNotNull("semantic hook context commandType is null", + SemanticAnalysisHook.commandType); Assert.assertTrue(SemanticAnalysisHook.ipAddress, SemanticAnalysisHook.ipAddress.contains("127.0.0.1")); Assert.assertEquals("show tables", SemanticAnalysisHook.command); diff --git a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java index 9aced9fc02..5c3e676784 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java @@ -554,6 +554,7 @@ public void run() { hookCtx.setUserName(userName); hookCtx.setIpAddress(SessionState.get().getUserIpAddress()); hookCtx.setCommand(command); + hookCtx.setHiveOperation(queryState.getHiveOperation()); for (HiveSemanticAnalyzerHook hook : saHooks) { tree = hook.preAnalyze(hookCtx, tree); } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveSemanticAnalyzerHookContext.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveSemanticAnalyzerHookContext.java index b78ce909a2..166375cab7 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveSemanticAnalyzerHookContext.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveSemanticAnalyzerHookContext.java @@ -25,6 +25,7 @@ import org.apache.hadoop.hive.ql.hooks.WriteEntity; import org.apache.hadoop.hive.ql.metadata.Hive; import org.apache.hadoop.hive.ql.metadata.HiveException; +import org.apache.hadoop.hive.ql.plan.HiveOperation; /** * Context information provided by Hive to implementations of @@ -65,4 +66,8 @@ public String getCommand(); public void setCommand(String command); + + public HiveOperation getHiveOperation(); + + public void setHiveOperation(HiveOperation commandType); } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveSemanticAnalyzerHookContextImpl.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveSemanticAnalyzerHookContextImpl.java index 4ce705b2b2..1cc38a891e 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveSemanticAnalyzerHookContextImpl.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveSemanticAnalyzerHookContextImpl.java @@ -26,6 +26,7 @@ import org.apache.hadoop.hive.ql.hooks.WriteEntity; import org.apache.hadoop.hive.ql.metadata.Hive; import org.apache.hadoop.hive.ql.metadata.HiveException; +import org.apache.hadoop.hive.ql.plan.HiveOperation; public class HiveSemanticAnalyzerHookContextImpl implements HiveSemanticAnalyzerHookContext { @@ -35,6 +36,7 @@ private String userName; private String ipAddress; private String command; + private HiveOperation commandType; @Override public Hive getHive() throws HiveException { @@ -95,4 +97,14 @@ public String getCommand() { public void setCommand(String command) { this.command = command; } + + @Override + public HiveOperation getHiveOperation() { + return commandType; + } + + @Override + public void setHiveOperation(HiveOperation commandType) { + this.commandType = commandType; + } }