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..1be67d869f 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/ResourcePlanParser.g +++ ql/src/java/org/apache/hadoop/hive/ql/parse/ResourcePlanParser.g @@ -117,9 +117,13 @@ poolPath triggerExpression @init { gParent.pushMsg("triggerExpression", state); } @after { gParent.popMsg(state); } - : triggerOrExpression -> ^(TOK_TRIGGER_EXPRESSION triggerOrExpression) + : triggerAtomExpression -> ^(TOK_TRIGGER_EXPRESSION triggerAtomExpression) ; +/* + 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,8 +139,7 @@ triggerAndExpression triggerAtomExpression @init { gParent.pushMsg("triggerAtomExpression", state); } @after { gParent.popMsg(state); } - : (identifier comparisionOperator triggerLiteral) - | (LPAREN triggerOrExpression RPAREN) + : identifier comparisionOperator triggerLiteral ; triggerLiteral @@ -150,7 +153,7 @@ triggerLiteral comparisionOperator @init { gParent.pushMsg("comparisionOperator", state); } @after { gParent.popMsg(state); } - : EQUAL | LESSTHAN | LESSTHANOREQUALTO | GREATERTHAN | GREATERTHANOREQUALTO + : GREATERTHAN ; triggerActionExpression diff --git ql/src/test/queries/clientpositive/resourceplan.q ql/src/test/queries/clientpositive/resourceplan.q index b46c1ee2d6..b70f14d917 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 > 10k MINUTE 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 > 30 SECOND AND BYTES_READ > 10 DO MOVE TO slow_pool; +CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME > 30 SECOND OR BYTES_READ > 10 DO MOVE TO slow_pool; +CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME >= 30 SECOND DO MOVE TO slow_pool; +CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME < 30 SECOND DO MOVE TO slow_pool; +CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME <= 30 SECOND DO MOVE TO slow_pool; +CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME = 0 SECOND DO MOVE TO slow_pool; + +CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME > 30 SECOND 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 > 1 MINUTE 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 > 100m 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`.`trigger` WHEN BYTES_WRITTEN > 100M DO MOVE TO `default`; +CREATE TRIGGER `table`.`database` WHEN BYTES_WRITTEN > 1G 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 > 1 hour 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 > 1000g 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 > 1000K 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 > 10G DO KILL; +CREATE TRIGGER plan_4a.trigger_2 WHEN BYTES_READ > 11G 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..5c9a57239e 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 > 10k MINUTE 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 > 10k MINUTE 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 > 10k 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: RuntimeException Empty Syntax Tree +FAILED: RuntimeException Empty Syntax Tree +FAILED: NullPointerException null +FAILED: NullPointerException null +FAILED: NullPointerException null +FAILED: NullPointerException null +PREHOOK: query: CREATE TRIGGER plan_1.trigger_2 WHEN ELAPSED_TIME > 30 SECOND 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 > 30 SECOND 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 > 10k KILL +plan_1 trigger_2 ELAPSED_TIME > 30 SECOND MOVE TO slow_pool +PREHOOK: query: ALTER TRIGGER plan_1.trigger_1 WHEN BYTES_READ > 1 MINUTE 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 > 1 MINUTE 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 > 1 MINUTE KILL +plan_1 trigger_2 ELAPSED_TIME > 30 SECOND 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 > 30 SECOND MOVE TO slow_pool +PREHOOK: query: CREATE TRIGGER plan_2.trigger_1 WHEN BYTES_READ > 100m 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: type: CREATE TRIGGER POSTHOOK: query: CREATE TRIGGER `table`.`table` WHEN BYTES_WRITTEN > 100K 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 > 100M 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 > 100M 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 > 1G 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 > 1G 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 > 1 hour 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 > 1 hour 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 +plan_1 trigger_2 ELAPSED_TIME > 30 SECOND MOVE TO slow_pool +table database BYTES_WRITTEN > 1G MOVE TO default table table BYTES_WRITTEN > 100K MOVE TO table -table trigger BYTES_WRITTEN > 100K MOVE TO default +table trigger BYTES_WRITTEN > 100M MOVE TO default table trigger1 ELAPSED_TIME > 10 KILL -table trigger2 BYTES_READ > 100 KILL +table trigger2 ELAPSED_TIME > 1 hour 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 +plan_1 trigger_2 ELAPSED_TIME > 30 SECOND MOVE TO slow_pool table table BYTES_WRITTEN > 100K MOVE TO table -table trigger BYTES_WRITTEN > 100K MOVE TO default +table trigger BYTES_WRITTEN > 100M MOVE TO default table trigger1 ELAPSED_TIME > 10 KILL -table trigger2 BYTES_READ > 100 KILL +table trigger2 ELAPSED_TIME > 1 hour 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 > 1000g 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 > 1000K 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 +plan_1 trigger_2 ELAPSED_TIME > 30 SECOND 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 +table trigger BYTES_WRITTEN > 100M MOVE TO default table trigger1 ELAPSED_TIME > 10 KILL -table trigger2 BYTES_READ > 100 KILL +table trigger2 ELAPSED_TIME > 1 hour 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 +plan_1 trigger_2 ELAPSED_TIME > 30 SECOND MOVE TO slow_pool table table BYTES_WRITTEN > 100K MOVE TO table -table trigger BYTES_WRITTEN > 100K MOVE TO default +table trigger BYTES_WRITTEN > 100M MOVE TO default table trigger1 ELAPSED_TIME > 10 KILL -table trigger2 BYTES_READ > 100 KILL +table trigger2 ELAPSED_TIME > 1 hour 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 > 10G 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 > 10G 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 > 11G 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 > 11G 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 +plan_1 trigger_2 ELAPSED_TIME > 30 SECOND 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 +table trigger BYTES_WRITTEN > 100M MOVE TO default table trigger1 ELAPSED_TIME > 10 KILL -table trigger2 BYTES_READ > 100 KILL +table trigger2 ELAPSED_TIME > 1 hour 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 3a1bc13de2..d9b81809f6 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 @@ -10193,26 +10193,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()