diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/HiveLexer.g ql/src/java/org/apache/hadoop/hive/ql/parse/HiveLexer.g index ef2aa3473b..78cbf25c43 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/HiveLexer.g +++ ql/src/java/org/apache/hadoop/hive/ql/parse/HiveLexer.g @@ -469,6 +469,21 @@ ByteLengthLiteral (Digit)+ ('b' | 'B' | 'k' | 'K' | 'm' | 'M' | 'g' | 'G') ; +TimeFullLiteral + : + (Digit)+ ('NS' | 'NSEC' | 'NSECS' | 'NANOSECOND' | 'NANOSECONDS' | + 'US' | 'USEC' | 'USECS' | 'MICROSECOND' | 'MICROSECONDS' | + 'MS' | 'MSEC' | 'MSECS' | 'MILLISECOND' | 'MILLISECONDS' | + 'SEC' | 'SECS' | 'SECOND' | 'SECONDS' | + 'MIN' | 'MINS' | 'MINUTE' | 'MINUTES' | + 'HOUR' | 'HOURS' | 'DAY' | 'DAYS') + ; + +ByteLengthFullLiteral + : + (Digit)+ ('KB' | 'MB' | 'GB' | 'TB' | 'PB') + ; + Number : (Digit)+ ( DOT (Digit)* (Exponent)? | Exponent)? diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/ParseDriver.java ql/src/java/org/apache/hadoop/hive/ql/parse/ParseDriver.java index 13b8d81057..a8671e4cb0 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/ParseDriver.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/ParseDriver.java @@ -32,8 +32,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.sun.tools.extcheck.Main; - import org.apache.hadoop.hive.ql.Context; /** @@ -294,7 +292,7 @@ public ASTNode parseSelect(String command, Context ctx) throws ParseException { throw new ParseException(parser.errors); } - return (ASTNode) r.getTree(); + return r.getTree(); } public ASTNode parseExpression(String command) throws ParseException { LOG.info("Parsing expression: " + command); @@ -321,4 +319,46 @@ public ASTNode parseExpression(String command) throws ParseException { return (ASTNode) r.getTree(); } + + public ASTNode parseTriggerExpression(String command) throws ParseException { + HiveLexerX lexer = new HiveLexerX(new ANTLRNoCaseStringStream(command)); + TokenRewriteStream tokens = new TokenRewriteStream(lexer); + HiveParser parser = new HiveParser(tokens); + parser.setTreeAdaptor(adaptor); + HiveParser_ResourcePlanParser.triggerExpressionStandalone_return r = null; + try { + r = parser.gResourcePlanParser.triggerExpressionStandalone(); + } catch (RecognitionException e) { + e.printStackTrace(); + throw new ParseException(parser.errors); + } + if (lexer.getErrors().size() != 0) { + throw new ParseException(lexer.getErrors()); + } else if (parser.errors.size() != 0) { + throw new ParseException(parser.errors); + } + + return r.getTree(); + } + + public ASTNode parseTriggerActionExpression(String command) throws ParseException { + HiveLexerX lexer = new HiveLexerX(new ANTLRNoCaseStringStream(command)); + TokenRewriteStream tokens = new TokenRewriteStream(lexer); + HiveParser parser = new HiveParser(tokens); + parser.setTreeAdaptor(adaptor); + HiveParser_ResourcePlanParser.triggerActionExpressionStandalone_return r = null; + try { + r = parser.gResourcePlanParser.triggerActionExpressionStandalone(); + } catch (RecognitionException e) { + e.printStackTrace(); + throw new ParseException(parser.errors); + } + if (lexer.getErrors().size() != 0) { + throw new ParseException(lexer.getErrors()); + } else if (parser.errors.size() != 0) { + throw new ParseException(parser.errors); + } + + return r.getTree(); + } } diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/ResourcePlanParser.g ql/src/java/org/apache/hadoop/hive/ql/parse/ResourcePlanParser.g index b47f7b39ed..192f62a152 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/ResourcePlanParser.g +++ ql/src/java/org/apache/hadoop/hive/ql/parse/ResourcePlanParser.g @@ -16,14 +16,33 @@ */ parser grammar ResourcePlanParser; -options -{ +options { output=AST; ASTLabelType=ASTNode; backtrack=false; k=3; } +@members { + @Override + public Object recoverFromMismatchedSet(IntStream input, + RecognitionException re, BitSet follow) throws RecognitionException { + return gParent.recoverFromMismatchedSet(input, re, follow); + } + + @Override + public void displayRecognitionError(String[] tokenNames, + RecognitionException e) { + gParent.displayRecognitionError(tokenNames, e); + } +} + +@rulecatch { + catch (RecognitionException e) { + throw e; + } +} + resourcePlanDdlStatements : createResourcePlanStatement | alterResourcePlanStatement @@ -117,9 +136,15 @@ poolPath triggerExpression @init { gParent.pushMsg("triggerExpression", state); } @after { gParent.popMsg(state); } - : triggerOrExpression -> ^(TOK_TRIGGER_EXPRESSION triggerOrExpression) + : triggerAtomExpression -> ^(TOK_TRIGGER_EXPRESSION triggerAtomExpression) ; +triggerExpressionStandalone : triggerExpression EOF ; + +/* + The rules triggerOrExpression and triggerAndExpression are not being used right now. + Only > operator is supported, this should be changed if logic in ExpressionFactory changes. +*/ triggerOrExpression @init { gParent.pushMsg("triggerOrExpression", state); } @after { gParent.popMsg(state); } @@ -135,22 +160,21 @@ triggerAndExpression triggerAtomExpression @init { gParent.pushMsg("triggerAtomExpression", state); } @after { gParent.popMsg(state); } - : (identifier comparisionOperator triggerLiteral) - | (LPAREN triggerOrExpression RPAREN) + : identifier comparisionOperator triggerLiteral ; triggerLiteral @init { gParent.pushMsg("triggerLiteral", state); } @after { gParent.popMsg(state); } - : (Number (KW_HOUR|KW_MINUTE|KW_SECOND)?) - | ByteLengthLiteral - | StringLiteral + : Number + | TimeFullLiteral + | ByteLengthFullLiteral ; comparisionOperator @init { gParent.pushMsg("comparisionOperator", state); } @after { gParent.popMsg(state); } - : EQUAL | LESSTHAN | LESSTHANOREQUALTO | GREATERTHAN | GREATERTHANOREQUALTO + : GREATERTHAN ; triggerActionExpression @@ -160,6 +184,8 @@ triggerActionExpression | (KW_MOVE^ KW_TO! poolPath) ; +triggerActionExpressionStandalone : triggerActionExpression EOF ; + createTriggerStatement @init { gParent.pushMsg("create trigger statement", state); } @after { gParent.popMsg(state); } @@ -246,7 +272,7 @@ createMappingStatement alterMappingStatement @init { gParent.pushMsg("alter mapping statement", state); } @after { gParent.popMsg(state); } - : (KW_ALTER mappingType=(KW_USER | KW_GROUP | KW_APPLICATION) KW_MAPPING + : (KW_ALTER mappingType=(KW_USER | KW_GROUP | KW_APPLICATION) KW_MAPPING name=StringLiteral KW_IN rpName=identifier ((KW_TO path=poolPath) | unmanaged) (KW_WITH KW_ORDER order=Number)?) diff --git ql/src/java/org/apache/hadoop/hive/ql/wm/ExpressionFactory.java ql/src/java/org/apache/hadoop/hive/ql/wm/ExpressionFactory.java index 953faa80e3..6c18b9fbc3 100644 --- ql/src/java/org/apache/hadoop/hive/ql/wm/ExpressionFactory.java +++ ql/src/java/org/apache/hadoop/hive/ql/wm/ExpressionFactory.java @@ -19,6 +19,10 @@ import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.conf.Validator; +import org.apache.hadoop.hive.ql.parse.ASTNode; +import org.apache.hadoop.hive.ql.parse.HiveParser; +import org.apache.hadoop.hive.ql.parse.ParseDriver; +import org.apache.hadoop.hive.ql.parse.ParseException; /** * Factory to create expressions @@ -30,16 +34,32 @@ public static Expression fromString(final String expression) { return null; } - // TODO: Only ">" predicate is supported right now, this has to be extended to support expression tree when - // multiple conditions are required. HIVE-17622 + ParseDriver driver = new ParseDriver(); + ASTNode node = null; + try { + node = driver.parseTriggerExpression(expression); + } catch (ParseException e) { + throw new IllegalArgumentException("Invalid expression: " + expression, e); + } + if (node.getChildCount() == 2 && node.getChild(1).getType() == HiveParser.EOF) { + node = (ASTNode) node.getChild(0); + } + if (node.getType() != HiveParser.TOK_TRIGGER_EXPRESSION) { + throw new IllegalArgumentException("Expected trigger expression, got: " + node.getType()); + } + + if (node.getChildCount() != 3) { + throw new IllegalArgumentException("Only single > condition supported: " + expression); + } - String[] tokens = expression.split(Expression.Predicate.GREATER_THAN.getSymbol()); - if (tokens.length != 2) { + // TODO: Only ">" predicate is supported right now, this has to be extended to support + // expression tree when multiple conditions are required. HIVE-17622 + if (node.getChild(1).getType() != HiveParser.GREATERTHAN) { throw new IllegalArgumentException("Invalid predicate in expression"); } - final String counterName = tokens[0].trim(); - final String counterValueStr = tokens[1].trim(); + final String counterName = node.getChild(0).getText(); + final String counterValueStr = node.getChild(2).getText().toLowerCase(); if (counterName.isEmpty()) { throw new IllegalArgumentException("Counter name cannot be empty!"); } diff --git ql/src/test/org/apache/hadoop/hive/ql/wm/TestExpressionFactory.java ql/src/test/org/apache/hadoop/hive/ql/wm/TestExpressionFactory.java new file mode 100644 index 0000000000..cc341b0b53 --- /dev/null +++ ql/src/test/org/apache/hadoop/hive/ql/wm/TestExpressionFactory.java @@ -0,0 +1,97 @@ +package org.apache.hadoop.hive.ql.wm; + +import static org.junit.Assert.*; + +import org.apache.hadoop.hive.ql.wm.Expression.Predicate; +import org.junit.Test; + +public class TestExpressionFactory { + @Test + public void testSize() { + Expression expr = null; + + expr = ExpressionFactory.fromString("BYTES_READ > 5"); + assertNotNull(expr); + assertEquals(Predicate.GREATER_THAN, expr.getPredicate()); + assertEquals("BYTES_READ", expr.getCounterLimit().getName()); + assertEquals(5, expr.getCounterLimit().getLimit()); + + expr = ExpressionFactory.fromString("BYTES_READ > 5kb"); + assertNotNull(expr); + assertEquals(Predicate.GREATER_THAN, expr.getPredicate()); + assertEquals("BYTES_READ", expr.getCounterLimit().getName()); + assertEquals(5 * (1 << 10), expr.getCounterLimit().getLimit()); + + expr = ExpressionFactory.fromString("BYTES_READ > 2mb"); + assertNotNull(expr); + assertEquals(Predicate.GREATER_THAN, expr.getPredicate()); + assertEquals("BYTES_READ", expr.getCounterLimit().getName()); + assertEquals(2 * (1 << 20), expr.getCounterLimit().getLimit()); + + expr = ExpressionFactory.fromString("BYTES_READ > 3gb"); + assertNotNull(expr); + assertEquals(Predicate.GREATER_THAN, expr.getPredicate()); + assertEquals("BYTES_READ", expr.getCounterLimit().getName()); + assertEquals(3L * (1 << 30), expr.getCounterLimit().getLimit()); + + expr = ExpressionFactory.fromString("SHUFFLE_BYTES > 7tb"); + assertNotNull(expr); + assertEquals(Predicate.GREATER_THAN, expr.getPredicate()); + assertEquals("SHUFFLE_BYTES", expr.getCounterLimit().getName()); + assertEquals(7L * (1L << 40), expr.getCounterLimit().getLimit()); + + expr = ExpressionFactory.fromString("SHUFFLE_BYTES > 6pb"); + assertNotNull(expr); + assertEquals(Predicate.GREATER_THAN, expr.getPredicate()); + assertEquals("SHUFFLE_BYTES", expr.getCounterLimit().getName()); + assertEquals(6L * (1L << 50), expr.getCounterLimit().getLimit()); + + + expr = ExpressionFactory.fromString("BYTES_WRITTEN > 27"); + assertNotNull(expr); + assertEquals(Predicate.GREATER_THAN, expr.getPredicate()); + assertEquals("BYTES_WRITTEN", expr.getCounterLimit().getName()); + assertEquals(27, expr.getCounterLimit().getLimit()); + } + + @Test + public void testTime() { + Expression expr = null; + + expr = ExpressionFactory.fromString("ELAPSED_TIME > 1"); + assertNotNull(expr); + assertEquals(Predicate.GREATER_THAN, expr.getPredicate()); + assertEquals("ELAPSED_TIME", expr.getCounterLimit().getName()); + assertEquals(1, expr.getCounterLimit().getLimit()); + + expr = ExpressionFactory.fromString("ELAPSED_TIME > 1ms"); + assertNotNull(expr); + assertEquals(Predicate.GREATER_THAN, expr.getPredicate()); + assertEquals("ELAPSED_TIME", expr.getCounterLimit().getName()); + assertEquals(1, expr.getCounterLimit().getLimit()); + + expr = ExpressionFactory.fromString("ELAPSED_TIME > 1sec"); + assertNotNull(expr); + assertEquals(Predicate.GREATER_THAN, expr.getPredicate()); + assertEquals("ELAPSED_TIME", expr.getCounterLimit().getName()); + assertEquals(1000, expr.getCounterLimit().getLimit()); + + expr = ExpressionFactory.fromString("ELAPSED_TIME > 1min"); + assertNotNull(expr); + assertEquals(Predicate.GREATER_THAN, expr.getPredicate()); + assertEquals("ELAPSED_TIME", expr.getCounterLimit().getName()); + assertEquals(60 * 1000, expr.getCounterLimit().getLimit()); + + expr = ExpressionFactory.fromString("ELAPSED_TIME > 1hour"); + assertNotNull(expr); + assertEquals(Predicate.GREATER_THAN, expr.getPredicate()); + assertEquals("ELAPSED_TIME", expr.getCounterLimit().getName()); + assertEquals(3600 * 1000, expr.getCounterLimit().getLimit()); + + expr = ExpressionFactory.fromString("ELAPSED_TIME > 1day"); + assertNotNull(expr); + assertEquals(Predicate.GREATER_THAN, expr.getPredicate()); + assertEquals("ELAPSED_TIME", expr.getCounterLimit().getName()); + assertEquals(24 * 3600 * 1000, expr.getCounterLimit().getLimit()); + } +} diff --git ql/src/test/queries/clientpositive/resourceplan.q ql/src/test/queries/clientpositive/resourceplan.q index b46c1ee2d6..46961ccb0c 100644 --- ql/src/test/queries/clientpositive/resourceplan.q +++ ql/src/test/queries/clientpositive/resourceplan.q @@ -142,30 +142,38 @@ SELECT * FROM SYS.WM_RESOURCEPLANS; CREATE RESOURCE PLAN plan_1; -CREATE TRIGGER plan_1.trigger_1 WHEN BYTES_READ > 10k AND BYTES_READ <= 1M OR ELAPSED_TIME > 30 SECOND AND ELAPSED_TIME < 1 MINUTE DO KILL; +CREATE TRIGGER plan_1.trigger_1 WHEN BYTES_READ > 10kb DO KILL; SELECT * FROM SYS.WM_TRIGGERS; -- Duplicate should fail. -CREATE TRIGGER plan_1.trigger_1 WHEN BYTES_READ = 10G DO KILL; +CREATE TRIGGER plan_1.trigger_1 WHEN ELAPSED_TIME > 300 DO KILL; -CREATE TRIGGER plan_1.trigger_2 WHEN BYTES_READ > 100 DO MOVE TO slow_pool; +-- Invalid triggers should fail. +CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME > 30sec AND BYTES_READ > 10 DO MOVE TO slow_pool; +CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME > 30second OR BYTES_READ > 10 DO MOVE TO slow_pool; +CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME >= 30seconds DO MOVE TO slow_pool; +CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME < 30hour DO MOVE TO slow_pool; +CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME <= 30min DO MOVE TO slow_pool; +CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME = 0day DO MOVE TO slow_pool; + +CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME > 30hour DO MOVE TO slow_pool; SELECT * FROM SYS.WM_TRIGGERS; -ALTER TRIGGER plan_1.trigger_1 WHEN BYTES_READ = 1000 DO KILL; +ALTER TRIGGER plan_1.trigger_1 WHEN BYTES_READ > 1min DO KILL; SELECT * FROM SYS.WM_TRIGGERS; DROP TRIGGER plan_1.trigger_1; SELECT * FROM SYS.WM_TRIGGERS; -- No edit on active resource plan. -CREATE TRIGGER plan_2.trigger_1 WHEN BYTES_READ = 0m DO MOVE TO null_pool; +CREATE TRIGGER plan_2.trigger_1 WHEN BYTES_READ > 100mb DO MOVE TO null_pool; -- Add trigger with reserved keywords. -CREATE TRIGGER `table`.`table` WHEN BYTES_WRITTEN > 100K DO MOVE TO `table`; -CREATE TRIGGER `table`.`trigger` WHEN BYTES_WRITTEN > 100K DO MOVE TO `default`; -CREATE TRIGGER `table`.`database` WHEN BYTES_WRITTEN > 1M DO MOVE TO `default`; +CREATE TRIGGER `table`.`table` WHEN BYTES_WRITTEN > 100KB DO MOVE TO `table`; +CREATE TRIGGER `table`.`trigger` WHEN BYTES_WRITTEN > 100MB DO MOVE TO `default`; +CREATE TRIGGER `table`.`database` WHEN BYTES_WRITTEN > 1GB DO MOVE TO `default`; CREATE TRIGGER `table`.`trigger1` WHEN ELAPSED_TIME > 10 DO KILL; -CREATE TRIGGER `table`.`trigger2` WHEN BYTES_READ > 100 DO KILL; +CREATE TRIGGER `table`.`trigger2` WHEN ELAPSED_TIME > 1hour DO KILL; SELECT * FROM SYS.WM_TRIGGERS; DROP TRIGGER `table`.`database`; SELECT * FROM SYS.WM_TRIGGERS; @@ -174,17 +182,17 @@ SELECT * FROM SYS.WM_TRIGGERS; ALTER RESOURCE PLAN plan_1 ENABLE; SELECT * FROM SYS.WM_RESOURCEPLANS; DROP TRIGGER plan_1.trigger_2; -ALTER TRIGGER plan_1.trigger_2 WHEN BYTES_READ = 1000g DO KILL; +ALTER TRIGGER plan_1.trigger_2 WHEN BYTES_READ > 1000gb DO KILL; -- Cannot drop/change trigger from active plan. ALTER RESOURCE PLAN plan_1 ACTIVATE; SELECT * FROM SYS.WM_RESOURCEPLANS; DROP TRIGGER plan_1.trigger_2; -ALTER TRIGGER plan_1.trigger_2 WHEN BYTES_READ = 1000K DO KILL; +ALTER TRIGGER plan_1.trigger_2 WHEN BYTES_READ > 1000KB DO KILL; -- Once disabled we should be able to change it. ALTER RESOURCE PLAN plan_2 DISABLE; -CREATE TRIGGER plan_2.trigger_1 WHEN BYTES_READ = 0 DO MOVE TO null_pool; +CREATE TRIGGER plan_2.trigger_1 WHEN BYTES_READ > 0 DO MOVE TO null_pool; SELECT * FROM SYS.WM_TRIGGERS; @@ -207,13 +215,13 @@ CREATE POOL plan_2.default.c1 WITH ALLOC_FRACTION=0.3, QUERY_PARALLELISM=3, SCHEDULING_POLICY='fair'; CREATE POOL plan_2.default.c2 WITH - QUERY_PARALLELISM=2, SCHEDULING_POLICY='fair', ALLOC_FRACTION=0.2; + QUERY_PARALLELISM=2, SCHEDULING_POLICY='fair', ALLOC_FRACTION=0.7; --- Cannot activate c1 + c2 = 0.5 +-- Cannot activate c1 + c2 = 1.0 ALTER RESOURCE PLAN plan_2 VALIDATE; ALTER RESOURCE PLAN plan_2 ENABLE ACTIVATE; -ALTER POOL plan_2.default.c2 SET ALLOC_FRACTION = 0.7, QUERY_PARALLELISM = 1; +ALTER POOL plan_2.default.c2 SET ALLOC_FRACTION = 0.5, QUERY_PARALLELISM = 1; -- Now we can activate. ALTER RESOURCE PLAN plan_2 VALIDATE; @@ -355,8 +363,8 @@ SELECT * FROM SYS.WM_MAPPINGS; CREATE RESOURCE PLAN plan_4a LIKE plan_4; CREATE POOL plan_4a.pool1 WITH SCHEDULING_POLICY='fair', QUERY_PARALLELISM=2, ALLOC_FRACTION=0.0; CREATE USER MAPPING "user1" IN plan_4a TO pool1; -CREATE TRIGGER plan_4a.trigger_1 WHEN BYTES_READ = 10G DO KILL; -CREATE TRIGGER plan_4a.trigger_2 WHEN BYTES_READ = 11G DO KILL; +CREATE TRIGGER plan_4a.trigger_1 WHEN BYTES_READ > 10GB DO KILL; +CREATE TRIGGER plan_4a.trigger_2 WHEN BYTES_READ > 11GB DO KILL; ALTER POOL plan_4a.pool1 ADD TRIGGER trigger_2; CREATE RESOURCE PLAN plan_4b LIKE plan_4a; diff --git ql/src/test/results/clientpositive/llap/resourceplan.q.out ql/src/test/results/clientpositive/llap/resourceplan.q.out index 72a78b1b4a..a5fccacf30 100644 --- ql/src/test/results/clientpositive/llap/resourceplan.q.out +++ ql/src/test/results/clientpositive/llap/resourceplan.q.out @@ -3535,9 +3535,9 @@ PREHOOK: query: CREATE RESOURCE PLAN plan_1 PREHOOK: type: CREATE RESOURCEPLAN POSTHOOK: query: CREATE RESOURCE PLAN plan_1 POSTHOOK: type: CREATE RESOURCEPLAN -PREHOOK: query: CREATE TRIGGER plan_1.trigger_1 WHEN BYTES_READ > 10k AND BYTES_READ <= 1M OR ELAPSED_TIME > 30 SECOND AND ELAPSED_TIME < 1 MINUTE DO KILL +PREHOOK: query: CREATE TRIGGER plan_1.trigger_1 WHEN BYTES_READ > 10kb DO KILL PREHOOK: type: CREATE TRIGGER -POSTHOOK: query: CREATE TRIGGER plan_1.trigger_1 WHEN BYTES_READ > 10k AND BYTES_READ <= 1M OR ELAPSED_TIME > 30 SECOND AND ELAPSED_TIME < 1 MINUTE DO KILL +POSTHOOK: query: CREATE TRIGGER plan_1.trigger_1 WHEN BYTES_READ > 10kb DO KILL POSTHOOK: type: CREATE TRIGGER PREHOOK: query: SELECT * FROM SYS.WM_TRIGGERS PREHOOK: type: QUERY @@ -3547,13 +3547,19 @@ POSTHOOK: query: SELECT * FROM SYS.WM_TRIGGERS POSTHOOK: type: QUERY POSTHOOK: Input: sys@wm_triggers #### A masked pattern was here #### -plan_1 trigger_1 BYTES_READ > 10k AND BYTES_READ <= 1M OR ELAPSED_TIME > 30 SECOND AND ELAPSED_TIME < 1 MINUTE KILL -PREHOOK: query: CREATE TRIGGER plan_1.trigger_1 WHEN BYTES_READ = 10G DO KILL +plan_1 trigger_1 BYTES_READ > 10kb KILL +PREHOOK: query: CREATE TRIGGER plan_1.trigger_1 WHEN ELAPSED_TIME > 300 DO KILL PREHOOK: type: CREATE TRIGGER FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. AlreadyExistsException(message:Trigger already exists, use alter: ) -PREHOOK: query: CREATE TRIGGER plan_1.trigger_2 WHEN BYTES_READ > 100 DO MOVE TO slow_pool +FAILED: ParseException line 4:58 mismatched input 'AND' expecting DO near '30sec' in create trigger statement +FAILED: ParseException line 2:61 mismatched input 'OR' expecting DO near '30second' in create trigger statement +FAILED: ParseException line 2:50 mismatched input '>=' expecting > near 'ELAPSED_TIME' in comparisionOperator +FAILED: ParseException line 2:50 mismatched input '<' expecting > near 'ELAPSED_TIME' in comparisionOperator +FAILED: ParseException line 2:50 mismatched input '<=' expecting > near 'ELAPSED_TIME' in comparisionOperator +FAILED: ParseException line 2:50 mismatched input '=' expecting > near 'ELAPSED_TIME' in comparisionOperator +PREHOOK: query: CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME > 30hour DO MOVE TO slow_pool PREHOOK: type: CREATE TRIGGER -POSTHOOK: query: CREATE TRIGGER plan_1.trigger_2 WHEN BYTES_READ > 100 DO MOVE TO slow_pool +POSTHOOK: query: CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME > 30hour DO MOVE TO slow_pool POSTHOOK: type: CREATE TRIGGER PREHOOK: query: SELECT * FROM SYS.WM_TRIGGERS PREHOOK: type: QUERY @@ -3563,11 +3569,11 @@ POSTHOOK: query: SELECT * FROM SYS.WM_TRIGGERS POSTHOOK: type: QUERY POSTHOOK: Input: sys@wm_triggers #### A masked pattern was here #### -plan_1 trigger_1 BYTES_READ > 10k AND BYTES_READ <= 1M OR ELAPSED_TIME > 30 SECOND AND ELAPSED_TIME < 1 MINUTE KILL -plan_1 trigger_2 BYTES_READ > 100 MOVE TO slow_pool -PREHOOK: query: ALTER TRIGGER plan_1.trigger_1 WHEN BYTES_READ = 1000 DO KILL +plan_1 trigger_1 BYTES_READ > 10kb KILL +plan_1 trigger_2 ELAPSED_TIME > 30hour MOVE TO slow_pool +PREHOOK: query: ALTER TRIGGER plan_1.trigger_1 WHEN BYTES_READ > 1min DO KILL PREHOOK: type: ALTER TRIGGER -POSTHOOK: query: ALTER TRIGGER plan_1.trigger_1 WHEN BYTES_READ = 1000 DO KILL +POSTHOOK: query: ALTER TRIGGER plan_1.trigger_1 WHEN BYTES_READ > 1min DO KILL POSTHOOK: type: ALTER TRIGGER PREHOOK: query: SELECT * FROM SYS.WM_TRIGGERS PREHOOK: type: QUERY @@ -3577,8 +3583,8 @@ POSTHOOK: query: SELECT * FROM SYS.WM_TRIGGERS POSTHOOK: type: QUERY POSTHOOK: Input: sys@wm_triggers #### A masked pattern was here #### -plan_1 trigger_1 BYTES_READ = 1000 KILL -plan_1 trigger_2 BYTES_READ > 100 MOVE TO slow_pool +plan_1 trigger_1 BYTES_READ > 1min KILL +plan_1 trigger_2 ELAPSED_TIME > 30hour MOVE TO slow_pool PREHOOK: query: DROP TRIGGER plan_1.trigger_1 PREHOOK: type: DROP TRIGGER POSTHOOK: query: DROP TRIGGER plan_1.trigger_1 @@ -3591,29 +3597,29 @@ POSTHOOK: query: SELECT * FROM SYS.WM_TRIGGERS POSTHOOK: type: QUERY POSTHOOK: Input: sys@wm_triggers #### A masked pattern was here #### -plan_1 trigger_2 BYTES_READ > 100 MOVE TO slow_pool -PREHOOK: query: CREATE TRIGGER plan_2.trigger_1 WHEN BYTES_READ = 0m DO MOVE TO null_pool +plan_1 trigger_2 ELAPSED_TIME > 30hour MOVE TO slow_pool +PREHOOK: query: CREATE TRIGGER plan_2.trigger_1 WHEN BYTES_READ > 100mb DO MOVE TO null_pool PREHOOK: type: CREATE TRIGGER FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Resource plan must be disabled to edit it.) -PREHOOK: query: CREATE TRIGGER `table`.`table` WHEN BYTES_WRITTEN > 100K DO MOVE TO `table` +PREHOOK: query: CREATE TRIGGER `table`.`table` WHEN BYTES_WRITTEN > 100KB DO MOVE TO `table` PREHOOK: type: CREATE TRIGGER -POSTHOOK: query: CREATE TRIGGER `table`.`table` WHEN BYTES_WRITTEN > 100K DO MOVE TO `table` +POSTHOOK: query: CREATE TRIGGER `table`.`table` WHEN BYTES_WRITTEN > 100KB DO MOVE TO `table` POSTHOOK: type: CREATE TRIGGER -PREHOOK: query: CREATE TRIGGER `table`.`trigger` WHEN BYTES_WRITTEN > 100K DO MOVE TO `default` +PREHOOK: query: CREATE TRIGGER `table`.`trigger` WHEN BYTES_WRITTEN > 100MB DO MOVE TO `default` PREHOOK: type: CREATE TRIGGER -POSTHOOK: query: CREATE TRIGGER `table`.`trigger` WHEN BYTES_WRITTEN > 100K DO MOVE TO `default` +POSTHOOK: query: CREATE TRIGGER `table`.`trigger` WHEN BYTES_WRITTEN > 100MB DO MOVE TO `default` POSTHOOK: type: CREATE TRIGGER -PREHOOK: query: CREATE TRIGGER `table`.`database` WHEN BYTES_WRITTEN > 1M DO MOVE TO `default` +PREHOOK: query: CREATE TRIGGER `table`.`database` WHEN BYTES_WRITTEN > 1GB DO MOVE TO `default` PREHOOK: type: CREATE TRIGGER -POSTHOOK: query: CREATE TRIGGER `table`.`database` WHEN BYTES_WRITTEN > 1M DO MOVE TO `default` +POSTHOOK: query: CREATE TRIGGER `table`.`database` WHEN BYTES_WRITTEN > 1GB DO MOVE TO `default` POSTHOOK: type: CREATE TRIGGER PREHOOK: query: CREATE TRIGGER `table`.`trigger1` WHEN ELAPSED_TIME > 10 DO KILL PREHOOK: type: CREATE TRIGGER POSTHOOK: query: CREATE TRIGGER `table`.`trigger1` WHEN ELAPSED_TIME > 10 DO KILL POSTHOOK: type: CREATE TRIGGER -PREHOOK: query: CREATE TRIGGER `table`.`trigger2` WHEN BYTES_READ > 100 DO KILL +PREHOOK: query: CREATE TRIGGER `table`.`trigger2` WHEN ELAPSED_TIME > 1hour DO KILL PREHOOK: type: CREATE TRIGGER -POSTHOOK: query: CREATE TRIGGER `table`.`trigger2` WHEN BYTES_READ > 100 DO KILL +POSTHOOK: query: CREATE TRIGGER `table`.`trigger2` WHEN ELAPSED_TIME > 1hour DO KILL POSTHOOK: type: CREATE TRIGGER PREHOOK: query: SELECT * FROM SYS.WM_TRIGGERS PREHOOK: type: QUERY @@ -3623,12 +3629,12 @@ POSTHOOK: query: SELECT * FROM SYS.WM_TRIGGERS POSTHOOK: type: QUERY POSTHOOK: Input: sys@wm_triggers #### A masked pattern was here #### -plan_1 trigger_2 BYTES_READ > 100 MOVE TO slow_pool -table database BYTES_WRITTEN > 1M MOVE TO default -table table BYTES_WRITTEN > 100K MOVE TO table -table trigger BYTES_WRITTEN > 100K MOVE TO default +plan_1 trigger_2 ELAPSED_TIME > 30hour MOVE TO slow_pool +table database BYTES_WRITTEN > 1GB MOVE TO default +table table BYTES_WRITTEN > 100KB MOVE TO table +table trigger BYTES_WRITTEN > 100MB MOVE TO default table trigger1 ELAPSED_TIME > 10 KILL -table trigger2 BYTES_READ > 100 KILL +table trigger2 ELAPSED_TIME > 1hour KILL PREHOOK: query: DROP TRIGGER `table`.`database` PREHOOK: type: DROP TRIGGER POSTHOOK: query: DROP TRIGGER `table`.`database` @@ -3641,11 +3647,11 @@ POSTHOOK: query: SELECT * FROM SYS.WM_TRIGGERS POSTHOOK: type: QUERY POSTHOOK: Input: sys@wm_triggers #### A masked pattern was here #### -plan_1 trigger_2 BYTES_READ > 100 MOVE TO slow_pool -table table BYTES_WRITTEN > 100K MOVE TO table -table trigger BYTES_WRITTEN > 100K MOVE TO default +plan_1 trigger_2 ELAPSED_TIME > 30hour MOVE TO slow_pool +table table BYTES_WRITTEN > 100KB MOVE TO table +table trigger BYTES_WRITTEN > 100MB MOVE TO default table trigger1 ELAPSED_TIME > 10 KILL -table trigger2 BYTES_READ > 100 KILL +table trigger2 ELAPSED_TIME > 1hour KILL PREHOOK: query: ALTER RESOURCE PLAN plan_1 ENABLE PREHOOK: type: ALTER RESOURCEPLAN POSTHOOK: query: ALTER RESOURCE PLAN plan_1 ENABLE @@ -3664,7 +3670,7 @@ table DISABLED 1 default PREHOOK: query: DROP TRIGGER plan_1.trigger_2 PREHOOK: type: DROP TRIGGER FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Resource plan must be disabled to edit it.) -PREHOOK: query: ALTER TRIGGER plan_1.trigger_2 WHEN BYTES_READ = 1000g DO KILL +PREHOOK: query: ALTER TRIGGER plan_1.trigger_2 WHEN BYTES_READ > 1000gb DO KILL PREHOOK: type: ALTER TRIGGER FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Resource plan must be disabled to edit it.) PREHOOK: query: ALTER RESOURCE PLAN plan_1 ACTIVATE @@ -3685,16 +3691,16 @@ table DISABLED 1 default PREHOOK: query: DROP TRIGGER plan_1.trigger_2 PREHOOK: type: DROP TRIGGER FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Resource plan must be disabled to edit it.) -PREHOOK: query: ALTER TRIGGER plan_1.trigger_2 WHEN BYTES_READ = 1000K DO KILL +PREHOOK: query: ALTER TRIGGER plan_1.trigger_2 WHEN BYTES_READ > 1000KB DO KILL PREHOOK: type: ALTER TRIGGER FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Resource plan must be disabled to edit it.) PREHOOK: query: ALTER RESOURCE PLAN plan_2 DISABLE PREHOOK: type: ALTER RESOURCEPLAN POSTHOOK: query: ALTER RESOURCE PLAN plan_2 DISABLE POSTHOOK: type: ALTER RESOURCEPLAN -PREHOOK: query: CREATE TRIGGER plan_2.trigger_1 WHEN BYTES_READ = 0 DO MOVE TO null_pool +PREHOOK: query: CREATE TRIGGER plan_2.trigger_1 WHEN BYTES_READ > 0 DO MOVE TO null_pool PREHOOK: type: CREATE TRIGGER -POSTHOOK: query: CREATE TRIGGER plan_2.trigger_1 WHEN BYTES_READ = 0 DO MOVE TO null_pool +POSTHOOK: query: CREATE TRIGGER plan_2.trigger_1 WHEN BYTES_READ > 0 DO MOVE TO null_pool POSTHOOK: type: CREATE TRIGGER PREHOOK: query: SELECT * FROM SYS.WM_TRIGGERS PREHOOK: type: QUERY @@ -3704,12 +3710,12 @@ POSTHOOK: query: SELECT * FROM SYS.WM_TRIGGERS POSTHOOK: type: QUERY POSTHOOK: Input: sys@wm_triggers #### A masked pattern was here #### -plan_1 trigger_2 BYTES_READ > 100 MOVE TO slow_pool -plan_2 trigger_1 BYTES_READ = 0 MOVE TO null_pool -table table BYTES_WRITTEN > 100K MOVE TO table -table trigger BYTES_WRITTEN > 100K MOVE TO default +plan_1 trigger_2 ELAPSED_TIME > 30hour MOVE TO slow_pool +plan_2 trigger_1 BYTES_READ > 0 MOVE TO null_pool +table table BYTES_WRITTEN > 100KB MOVE TO table +table trigger BYTES_WRITTEN > 100MB MOVE TO default table trigger1 ELAPSED_TIME > 10 KILL -table trigger2 BYTES_READ > 100 KILL +table trigger2 ELAPSED_TIME > 1hour KILL PREHOOK: query: CREATE POOL plan_1.default WITH ALLOC_FRACTION=1.0, QUERY_PARALLELISM=5, SCHEDULING_POLICY='default' PREHOOK: type: CREATE POOL @@ -3737,23 +3743,22 @@ POSTHOOK: query: CREATE POOL plan_2.default.c1 WITH ALLOC_FRACTION=0.3, QUERY_PARALLELISM=3, SCHEDULING_POLICY='fair' POSTHOOK: type: CREATE POOL PREHOOK: query: CREATE POOL plan_2.default.c2 WITH - QUERY_PARALLELISM=2, SCHEDULING_POLICY='fair', ALLOC_FRACTION=0.2 + QUERY_PARALLELISM=2, SCHEDULING_POLICY='fair', ALLOC_FRACTION=0.7 PREHOOK: type: CREATE POOL POSTHOOK: query: CREATE POOL plan_2.default.c2 WITH - QUERY_PARALLELISM=2, SCHEDULING_POLICY='fair', ALLOC_FRACTION=0.2 + QUERY_PARALLELISM=2, SCHEDULING_POLICY='fair', ALLOC_FRACTION=0.7 POSTHOOK: type: CREATE POOL PREHOOK: query: ALTER RESOURCE PLAN plan_2 VALIDATE PREHOOK: type: ALTER RESOURCEPLAN POSTHOOK: query: ALTER RESOURCE PLAN plan_2 VALIDATE POSTHOOK: type: ALTER RESOURCEPLAN -Sum of children pools' alloc fraction should be equal 1.0 got: 0.5 for pool: default -Sum of children pools' query parallelism: 5 is not equal to pool parallelism: 4 for pool: default +Sum of children pools' alloc fraction should be less than 1.0 got: 1.0 for pool: default PREHOOK: query: ALTER RESOURCE PLAN plan_2 ENABLE ACTIVATE PREHOOK: type: ALTER RESOURCEPLAN -FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:ResourcePlan: plan_2 is invalid: [Sum of children pools' alloc fraction should be equal 1.0 got: 0.5 for pool: default, Sum of children pools' query parallelism: 5 is not equal to pool parallelism: 4 for pool: default]) -PREHOOK: query: ALTER POOL plan_2.default.c2 SET ALLOC_FRACTION = 0.7, QUERY_PARALLELISM = 1 +FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:ResourcePlan: plan_2 is invalid: [Sum of children pools' alloc fraction should be less than 1.0 got: 1.0 for pool: default]) +PREHOOK: query: ALTER POOL plan_2.default.c2 SET ALLOC_FRACTION = 0.5, QUERY_PARALLELISM = 1 PREHOOK: type: ALTER POOL -POSTHOOK: query: ALTER POOL plan_2.default.c2 SET ALLOC_FRACTION = 0.7, QUERY_PARALLELISM = 1 +POSTHOOK: query: ALTER POOL plan_2.default.c2 SET ALLOC_FRACTION = 0.5, QUERY_PARALLELISM = 1 POSTHOOK: type: ALTER POOL PREHOOK: query: ALTER RESOURCE PLAN plan_2 VALIDATE PREHOOK: type: ALTER RESOURCEPLAN @@ -3786,7 +3791,7 @@ POSTHOOK: Input: sys@wm_pools plan_1 default 1.0 4 NULL plan_2 def 1.0 4 NULL plan_2 def.c1 0.3 3 fair -plan_2 def.c2 0.7 1 fair +plan_2 def.c2 0.5 1 fair table default 1.0 4 NULL PREHOOK: query: DROP POOL plan_2.default PREHOOK: type: DROP POOL @@ -3802,7 +3807,7 @@ POSTHOOK: Input: sys@wm_pools plan_1 default 1.0 4 NULL plan_2 def 1.0 4 NULL plan_2 def.c1 0.3 3 fair -plan_2 def.c2 0.7 1 fair +plan_2 def.c2 0.5 1 fair table default 1.0 4 NULL PREHOOK: query: CREATE POOL plan_2.child1.child2 WITH QUERY_PARALLELISM=2, SCHEDULING_POLICY='fifo', ALLOC_FRACTION=0.8 @@ -3847,7 +3852,7 @@ POSTHOOK: Input: sys@wm_pools plan_1 default 1.0 4 NULL plan_2 def 1.0 4 NULL plan_2 def.c1 0.3 3 fair -plan_2 def.c2 0.7 1 fair +plan_2 def.c2 0.5 1 fair table default 1.0 4 NULL table table 0.0 1 fifo table table.pool1 0.9 3 fair @@ -3868,7 +3873,7 @@ POSTHOOK: Input: sys@wm_pools plan_1 default 1.0 4 NULL plan_2 def 1.0 4 NULL plan_2 def.c1 0.3 3 fair -plan_2 def.c2 0.7 1 fair +plan_2 def.c2 0.5 1 fair table default 1.0 4 NULL table table 0.0 1 fifo table table.pool 0.9 3 fair @@ -3888,7 +3893,7 @@ POSTHOOK: Input: sys@wm_pools plan_1 default 1.0 4 NULL plan_2 def 1.0 4 NULL plan_2 def.c1 0.3 3 fair -plan_2 def.c2 0.7 1 fair +plan_2 def.c2 0.5 1 fair table default 1.0 4 NULL table table 0.0 1 fifo table table.pool 0.9 3 fair @@ -3908,7 +3913,7 @@ POSTHOOK: Input: sys@wm_pools plan_1 default 1.0 4 NULL plan_2 def 1.0 4 NULL plan_2 def.c1 0.3 3 fair -plan_2 def.c2 0.7 1 fair +plan_2 def.c2 0.5 1 fair table default 1.0 4 NULL table table 0.0 1 fifo table table.pool 0.9 3 fair @@ -3944,7 +3949,7 @@ POSTHOOK: Input: sys@wm_pools plan_1 default 1.0 4 NULL plan_2 def 1.0 4 NULL plan_2 def.c1 0.3 3 fair -plan_2 def.c2 0.7 1 fair +plan_2 def.c2 0.5 1 fair table table 0.0 1 fifo table table.pool 0.9 3 fair table table.pool.child1 0.3 1 fair @@ -4149,8 +4154,8 @@ POSTHOOK: query: SHOW RESOURCE PLAN plan_2 POSTHOOK: type: SHOW RESOURCEPLAN plan_2[status=DISABLED,parallelism=4,defaultPool=def] def[allocFraction=1.0,schedulingPolicy=null,parallelism=4] - c2[allocFraction=0.7,schedulingPolicy=fair,parallelism=1] - > trigger_1: if(BYTES_READ = 0){MOVE TO null_pool} + c2[allocFraction=0.5,schedulingPolicy=fair,parallelism=1] + > trigger_1: if(BYTES_READ > 0){MOVE TO null_pool} c1[allocFraction=0.3,schedulingPolicy=fair,parallelism=3] PREHOOK: query: DROP RESOURCE PLAN plan_2 PREHOOK: type: DROP RESOURCEPLAN @@ -4193,11 +4198,11 @@ POSTHOOK: query: SELECT * FROM SYS.WM_TRIGGERS POSTHOOK: type: QUERY POSTHOOK: Input: sys@wm_triggers #### A masked pattern was here #### -plan_1 trigger_2 BYTES_READ > 100 MOVE TO slow_pool -table table BYTES_WRITTEN > 100K MOVE TO table -table trigger BYTES_WRITTEN > 100K MOVE TO default +plan_1 trigger_2 ELAPSED_TIME > 30hour MOVE TO slow_pool +table table BYTES_WRITTEN > 100KB MOVE TO table +table trigger BYTES_WRITTEN > 100MB MOVE TO default table trigger1 ELAPSED_TIME > 10 KILL -table trigger2 BYTES_READ > 100 KILL +table trigger2 ELAPSED_TIME > 1hour KILL PREHOOK: query: SELECT * FROM SYS.WM_POOLS_TO_TRIGGERS PREHOOK: type: QUERY PREHOOK: Input: sys@wm_pools_to_triggers @@ -4227,13 +4232,13 @@ PREHOOK: query: CREATE USER MAPPING "user1" IN plan_4a TO pool1 PREHOOK: type: CREATE MAPPING POSTHOOK: query: CREATE USER MAPPING "user1" IN plan_4a TO pool1 POSTHOOK: type: CREATE MAPPING -PREHOOK: query: CREATE TRIGGER plan_4a.trigger_1 WHEN BYTES_READ = 10G DO KILL +PREHOOK: query: CREATE TRIGGER plan_4a.trigger_1 WHEN BYTES_READ > 10GB DO KILL PREHOOK: type: CREATE TRIGGER -POSTHOOK: query: CREATE TRIGGER plan_4a.trigger_1 WHEN BYTES_READ = 10G DO KILL +POSTHOOK: query: CREATE TRIGGER plan_4a.trigger_1 WHEN BYTES_READ > 10GB DO KILL POSTHOOK: type: CREATE TRIGGER -PREHOOK: query: CREATE TRIGGER plan_4a.trigger_2 WHEN BYTES_READ = 11G DO KILL +PREHOOK: query: CREATE TRIGGER plan_4a.trigger_2 WHEN BYTES_READ > 11GB DO KILL PREHOOK: type: CREATE TRIGGER -POSTHOOK: query: CREATE TRIGGER plan_4a.trigger_2 WHEN BYTES_READ = 11G DO KILL +POSTHOOK: query: CREATE TRIGGER plan_4a.trigger_2 WHEN BYTES_READ > 11GB DO KILL POSTHOOK: type: CREATE TRIGGER PREHOOK: query: ALTER POOL plan_4a.pool1 ADD TRIGGER trigger_2 PREHOOK: type: ALTER POOL @@ -4287,15 +4292,15 @@ POSTHOOK: query: SELECT * FROM SYS.WM_TRIGGERS POSTHOOK: type: QUERY POSTHOOK: Input: sys@wm_triggers #### A masked pattern was here #### -plan_1 trigger_2 BYTES_READ > 100 MOVE TO slow_pool -plan_4a trigger_1 BYTES_READ = 10G KILL -plan_4a trigger_2 BYTES_READ = 11G KILL -plan_4b trigger_1 BYTES_READ = 10G KILL -plan_4b trigger_2 BYTES_READ = 11G KILL -table table BYTES_WRITTEN > 100K MOVE TO table -table trigger BYTES_WRITTEN > 100K MOVE TO default +plan_1 trigger_2 ELAPSED_TIME > 30hour MOVE TO slow_pool +plan_4a trigger_1 BYTES_READ > 10GB KILL +plan_4a trigger_2 BYTES_READ > 11GB KILL +plan_4b trigger_1 BYTES_READ > 10GB KILL +plan_4b trigger_2 BYTES_READ > 11GB KILL +table table BYTES_WRITTEN > 100KB MOVE TO table +table trigger BYTES_WRITTEN > 100MB MOVE TO default table trigger1 ELAPSED_TIME > 10 KILL -table trigger2 BYTES_READ > 100 KILL +table trigger2 ELAPSED_TIME > 1hour KILL PREHOOK: query: SELECT * FROM SYS.WM_POOLS_TO_TRIGGERS PREHOOK: type: QUERY PREHOOK: Input: sys@wm_pools_to_triggers diff --git standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java index b9fecc7044..5a0479bd82 100644 --- standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java +++ standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java @@ -10195,26 +10195,29 @@ private PoolData getPoolData(Map poolInfo, String poolPath) { } } for (Entry entry : poolInfo.entrySet()) { - PoolData poolData = entry.getValue(); + final PoolData poolData = entry.getValue(); + final boolean isRoot = entry.getKey().equals(""); // Special case for root parent - if (entry.getKey().equals("")) { + if (isRoot) { poolData.found = true; poolData.queryParallelism = mResourcePlan.getQueryParallelism() == null ? poolData.totalChildrenQueryParallelism : mResourcePlan.getQueryParallelism(); + if (!poolData.hasChildren) { + errors.add("Root has no children"); + } else if (Math.abs(1.0 - poolData.totalChildrenAllocFraction) > 0.001) { + errors.add("Sum of root children pools' alloc fraction should be 1.0 got: " + + poolData.totalChildrenAllocFraction + " for pool: " + entry.getKey()); + } } if (!poolData.found) { errors.add("Pool does not exists but has children: " + entry.getKey()); } if (poolData.hasChildren) { - if (Math.abs(1.0 - poolData.totalChildrenAllocFraction) > 0.001) { - errors.add("Sum of children pools' alloc fraction should be equal 1.0 got: " + + if (!isRoot && 1.0 <= poolData.totalChildrenAllocFraction) { + errors.add("Sum of children pools' alloc fraction should be less than 1.0 got: " + poolData.totalChildrenAllocFraction + " for pool: " + entry.getKey()); } - if (poolData.queryParallelism != poolData.totalChildrenQueryParallelism) { - errors.add("Sum of children pools' query parallelism: " + - poolData.totalChildrenQueryParallelism + " is not equal to pool parallelism: " + - poolData.queryParallelism + " for pool: " + entry.getKey()); - } + // No check for queryParallelism. } } // TODO: validate trigger and action expressions. mResourcePlan.getTriggers()