diff --git ql/src/test/queries/clientpositive/resourceplan.q ql/src/test/queries/clientpositive/resourceplan.q index 002b21c1b9..fc924a2f95 100644 --- ql/src/test/queries/clientpositive/resourceplan.q +++ ql/src/test/queries/clientpositive/resourceplan.q @@ -312,8 +312,12 @@ CREATE RESOURCE PLAN plan_4; ALTER RESOURCE PLAN plan_4 ENABLE ACTIVATE; +-- This should remove all pools, triggers & mappings. DROP RESOURCE PLAN plan_2; +-- This should create plan_2 with default pool and null query parallelism. +CREATE RESOURCE PLAN plan_2; + SELECT * FROM SYS.WM_RESOURCEPLANS; SELECT * FROM SYS.WM_POOLS; SELECT * FROM SYS.WM_TRIGGERS; diff --git ql/src/test/results/clientpositive/llap/resourceplan.q.out ql/src/test/results/clientpositive/llap/resourceplan.q.out index 093e5d58b6..7f3e784457 100644 --- ql/src/test/results/clientpositive/llap/resourceplan.q.out +++ ql/src/test/results/clientpositive/llap/resourceplan.q.out @@ -3977,7 +3977,7 @@ plan_2 USER user1 def 0 plan_2 USER user2 def 1 PREHOOK: query: DROP POOL plan_2.def.c1 PREHOOK: type: DROP POOL -FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Exception thrown flushing changes to datastore) +FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Please remove all mappings for this pool.) PREHOOK: query: DROP USER MAPPING "user2" in plan_2 PREHOOK: type: DROP MAPPING POSTHOOK: query: DROP USER MAPPING "user2" in plan_2 @@ -4008,6 +4008,10 @@ PREHOOK: query: DROP RESOURCE PLAN plan_2 PREHOOK: type: DROP RESOURCEPLAN POSTHOOK: query: DROP RESOURCE PLAN plan_2 POSTHOOK: type: DROP RESOURCEPLAN +PREHOOK: query: CREATE RESOURCE PLAN plan_2 +PREHOOK: type: CREATE RESOURCEPLAN +POSTHOOK: query: CREATE RESOURCE PLAN plan_2 +POSTHOOK: type: CREATE RESOURCEPLAN PREHOOK: query: SELECT * FROM SYS.WM_RESOURCEPLANS PREHOOK: type: QUERY PREHOOK: Input: sys@wm_resourceplans @@ -4017,6 +4021,7 @@ POSTHOOK: type: QUERY POSTHOOK: Input: sys@wm_resourceplans #### A masked pattern was here #### plan_1 ENABLED NULL default +plan_2 DISABLED NULL default plan_4 ACTIVE NULL default table DISABLED 1 table.pool PREHOOK: query: SELECT * FROM SYS.WM_POOLS @@ -4028,6 +4033,7 @@ POSTHOOK: type: QUERY POSTHOOK: Input: sys@wm_pools #### A masked pattern was here #### plan_1 default 1.0 4 NULL +plan_2 default 1.0 4 NULL plan_4 default 1.0 4 NULL table table 0.0 1 random table table.pool 0.9 3 priority 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 2e80c9d3b1..2c92bb2056 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 @@ -9519,14 +9519,20 @@ Properties getProp() { } private void checkForConstraintException(Exception e, String msg) throws AlreadyExistsException { - Throwable ex = e; - while (ex != null) { - if (ex instanceof SQLIntegrityConstraintViolationException) { - LOG.error(msg, e); - throw new AlreadyExistsException(msg); + if (getConstraintException(e) != null) { + LOG.error(msg, e); + throw new AlreadyExistsException(msg); + } + } + + private Throwable getConstraintException(Throwable t) { + while (t != null) { + if (t instanceof SQLIntegrityConstraintViolationException) { + return t; } - ex = ex.getCause(); + t = t.getCause(); } + return null; } @Override @@ -10214,6 +10220,11 @@ public void dropWMPool(String resourcePlanName, String poolPath) throw new NoSuchObjectException("Cannot delete pool: " + poolPath); } commited = commitTransaction(); + } catch(Exception e) { + if (getConstraintException(e) != null) { + throw new InvalidOperationException("Please remove all mappings for this pool."); + } + throw e; } finally { rollbackAndCleanup(commited, query); }