diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java index 0d735b9..154e280 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java @@ -2417,6 +2417,12 @@ private void analyzeLockTable(ASTNode ast) partSpec = partSpecs.get(0); } + inputs.add(new ReadEntity(getTable(tableName))); + // Lock table operation is to acquire the lock explicitly, the operation + // itself doesn't need to be locked. Set the WriteEntity as WriteType: + // DDL_NO_LOCK here, otherwise it will conflict with Hive's transaction. + outputs.add(new WriteEntity(getTable(tableName), WriteType.DDL_NO_LOCK)); + LockTableDesc lockTblDesc = new LockTableDesc(tableName, mode, partSpec, HiveConf.getVar(conf, ConfVars.HIVEQUERYID)); lockTblDesc.setQueryStr(this.ctx.getCmd()); @@ -2485,6 +2491,13 @@ private void analyzeUnlockTable(ASTNode ast) partSpec = partSpecs.get(0); } + inputs.add(new ReadEntity(getTable(tableName))); + // Unlock table operation is to release the lock explicitly, the + // operation itself don't need to be locked. Set the WriteEntity as + // WriteType: DDL_NO_LOCK here, otherwise it will conflict with + // Hive's transaction. + outputs.add(new WriteEntity(getTable(tableName), WriteType.DDL_NO_LOCK)); + UnlockTableDesc unlockTblDesc = new UnlockTableDesc(tableName, partSpec); rootTasks.add(TaskFactory.get(new DDLWork(getInputs(), getOutputs(), unlockTblDesc), conf)); diff --git a/ql/src/test/results/clientnegative/dbtxnmgr_notablelock.q.out b/ql/src/test/results/clientnegative/dbtxnmgr_notablelock.q.out index 3fad08c..0ea2e41 100644 --- a/ql/src/test/results/clientnegative/dbtxnmgr_notablelock.q.out +++ b/ql/src/test/results/clientnegative/dbtxnmgr_notablelock.q.out @@ -12,4 +12,6 @@ POSTHOOK: Output: database:default POSTHOOK: Output: default@drop_notablelock PREHOOK: query: lock table drop_notablelock shared PREHOOK: type: LOCKTABLE +PREHOOK: Input: default@drop_notablelock +PREHOOK: Output: default@drop_notablelock FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Current transaction manager does not support explicit lock requests. Transaction manager: org.apache.hadoop.hive.ql.lockmgr.DbTxnManager diff --git a/ql/src/test/results/clientnegative/dbtxnmgr_notableunlock.q.out b/ql/src/test/results/clientnegative/dbtxnmgr_notableunlock.q.out index 2d9a20f..52215bf 100644 --- a/ql/src/test/results/clientnegative/dbtxnmgr_notableunlock.q.out +++ b/ql/src/test/results/clientnegative/dbtxnmgr_notableunlock.q.out @@ -12,4 +12,6 @@ POSTHOOK: Output: database:default POSTHOOK: Output: default@drop_notableunlock PREHOOK: query: unlock table drop_notableunlock PREHOOK: type: UNLOCKTABLE +PREHOOK: Input: default@drop_notableunlock +PREHOOK: Output: default@drop_notableunlock FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Current transaction manager does not support explicit lock requests. Transaction manager: org.apache.hadoop.hive.ql.lockmgr.DbTxnManager diff --git a/ql/src/test/results/clientnegative/insert_into1.q.out b/ql/src/test/results/clientnegative/insert_into1.q.out index 066f04d..7ef4268 100644 --- a/ql/src/test/results/clientnegative/insert_into1.q.out +++ b/ql/src/test/results/clientnegative/insert_into1.q.out @@ -12,7 +12,11 @@ POSTHOOK: Output: database:default POSTHOOK: Output: default@insert_into1_neg PREHOOK: query: LOCK TABLE insert_into1_neg SHARED PREHOOK: type: LOCKTABLE +PREHOOK: Input: default@insert_into1_neg +PREHOOK: Output: default@insert_into1_neg POSTHOOK: query: LOCK TABLE insert_into1_neg SHARED POSTHOOK: type: LOCKTABLE +POSTHOOK: Input: default@insert_into1_neg +POSTHOOK: Output: default@insert_into1_neg Unable to acquire IMPLICIT, EXCLUSIVE lock default@insert_into1_neg after 5 attempts. FAILED: Error in acquiring locks: Locks on the underlying objects cannot be acquired. retry after some time diff --git a/ql/src/test/results/clientnegative/insert_into2.q.out b/ql/src/test/results/clientnegative/insert_into2.q.out index b839efe..27e08da 100644 --- a/ql/src/test/results/clientnegative/insert_into2.q.out +++ b/ql/src/test/results/clientnegative/insert_into2.q.out @@ -12,7 +12,11 @@ POSTHOOK: Output: database:default POSTHOOK: Output: default@insert_into1_neg PREHOOK: query: LOCK TABLE insert_into1_neg EXCLUSIVE PREHOOK: type: LOCKTABLE +PREHOOK: Input: default@insert_into1_neg +PREHOOK: Output: default@insert_into1_neg POSTHOOK: query: LOCK TABLE insert_into1_neg EXCLUSIVE POSTHOOK: type: LOCKTABLE +POSTHOOK: Input: default@insert_into1_neg +POSTHOOK: Output: default@insert_into1_neg Unable to acquire IMPLICIT, EXCLUSIVE lock default@insert_into1_neg after 5 attempts. FAILED: Error in acquiring locks: Locks on the underlying objects cannot be acquired. retry after some time diff --git a/ql/src/test/results/clientnegative/insert_into3.q.out b/ql/src/test/results/clientnegative/insert_into3.q.out index 91aeb5b..6b85c31 100644 --- a/ql/src/test/results/clientnegative/insert_into3.q.out +++ b/ql/src/test/results/clientnegative/insert_into3.q.out @@ -26,7 +26,11 @@ POSTHOOK: Lineage: insert_into3_neg PARTITION(ds=1).key EXPRESSION [(src)src.Fie POSTHOOK: Lineage: insert_into3_neg PARTITION(ds=1).value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] PREHOOK: query: LOCK TABLE insert_into3_neg PARTITION (ds='1') SHARED PREHOOK: type: LOCKTABLE +PREHOOK: Input: default@insert_into3_neg +PREHOOK: Output: default@insert_into3_neg POSTHOOK: query: LOCK TABLE insert_into3_neg PARTITION (ds='1') SHARED POSTHOOK: type: LOCKTABLE +POSTHOOK: Input: default@insert_into3_neg +POSTHOOK: Output: default@insert_into3_neg Unable to acquire IMPLICIT, EXCLUSIVE lock default@insert_into3_neg@ds=1 after 5 attempts. FAILED: Error in acquiring locks: Locks on the underlying objects cannot be acquired. retry after some time diff --git a/ql/src/test/results/clientnegative/insert_into4.q.out b/ql/src/test/results/clientnegative/insert_into4.q.out index 303fb6a..7a37de2 100644 --- a/ql/src/test/results/clientnegative/insert_into4.q.out +++ b/ql/src/test/results/clientnegative/insert_into4.q.out @@ -26,7 +26,11 @@ POSTHOOK: Lineage: insert_into3_neg PARTITION(ds=1).key EXPRESSION [(src)src.Fie POSTHOOK: Lineage: insert_into3_neg PARTITION(ds=1).value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] PREHOOK: query: LOCK TABLE insert_into3_neg PARTITION (ds='1') EXCLUSIVE PREHOOK: type: LOCKTABLE +PREHOOK: Input: default@insert_into3_neg +PREHOOK: Output: default@insert_into3_neg POSTHOOK: query: LOCK TABLE insert_into3_neg PARTITION (ds='1') EXCLUSIVE POSTHOOK: type: LOCKTABLE +POSTHOOK: Input: default@insert_into3_neg +POSTHOOK: Output: default@insert_into3_neg Unable to acquire IMPLICIT, EXCLUSIVE lock default@insert_into3_neg@ds=1 after 5 attempts. FAILED: Error in acquiring locks: Locks on the underlying objects cannot be acquired. retry after some time diff --git a/ql/src/test/results/clientnegative/lockneg1.q.out b/ql/src/test/results/clientnegative/lockneg1.q.out index 3a96cda..1abe3a9 100644 --- a/ql/src/test/results/clientnegative/lockneg1.q.out +++ b/ql/src/test/results/clientnegative/lockneg1.q.out @@ -22,13 +22,23 @@ POSTHOOK: Lineage: tstsrc.key SIMPLE [(src)src.FieldSchema(name:key, type:string POSTHOOK: Lineage: tstsrc.value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] PREHOOK: query: LOCK TABLE tstsrc SHARED PREHOOK: type: LOCKTABLE +PREHOOK: Input: default@tstsrc +PREHOOK: Output: default@tstsrc POSTHOOK: query: LOCK TABLE tstsrc SHARED POSTHOOK: type: LOCKTABLE +POSTHOOK: Input: default@tstsrc +POSTHOOK: Output: default@tstsrc PREHOOK: query: LOCK TABLE tstsrc SHARED PREHOOK: type: LOCKTABLE +PREHOOK: Input: default@tstsrc +PREHOOK: Output: default@tstsrc POSTHOOK: query: LOCK TABLE tstsrc SHARED POSTHOOK: type: LOCKTABLE +POSTHOOK: Input: default@tstsrc +POSTHOOK: Output: default@tstsrc PREHOOK: query: LOCK TABLE tstsrc EXCLUSIVE PREHOOK: type: LOCKTABLE +PREHOOK: Input: default@tstsrc +PREHOOK: Output: default@tstsrc Unable to acquire EXPLICIT, EXCLUSIVE lock default@tstsrc after 1 attempts. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask diff --git a/ql/src/test/results/clientnegative/lockneg2.q.out b/ql/src/test/results/clientnegative/lockneg2.q.out index 31e9087..219bc9f 100644 --- a/ql/src/test/results/clientnegative/lockneg2.q.out +++ b/ql/src/test/results/clientnegative/lockneg2.q.out @@ -22,4 +22,6 @@ POSTHOOK: Lineage: tstsrc.key SIMPLE [(src)src.FieldSchema(name:key, type:string POSTHOOK: Lineage: tstsrc.value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] PREHOOK: query: UNLOCK TABLE tstsrc PREHOOK: type: UNLOCKTABLE +PREHOOK: Input: default@tstsrc +PREHOOK: Output: default@tstsrc FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Table tstsrc is not locked diff --git a/ql/src/test/results/clientnegative/lockneg3.q.out b/ql/src/test/results/clientnegative/lockneg3.q.out index e4f6357..d27c7eb 100644 --- a/ql/src/test/results/clientnegative/lockneg3.q.out +++ b/ql/src/test/results/clientnegative/lockneg3.q.out @@ -26,4 +26,6 @@ POSTHOOK: Lineage: tstsrcpart PARTITION(ds=2008-04-08,hr=11).key SIMPLE [(srcpar POSTHOOK: Lineage: tstsrcpart PARTITION(ds=2008-04-08,hr=11).value SIMPLE [(srcpart)srcpart.FieldSchema(name:value, type:string, comment:default), ] PREHOOK: query: UNLOCK TABLE tstsrcpart PARTITION(ds='2008-04-08', hr='11') PREHOOK: type: UNLOCKTABLE +PREHOOK: Input: default@tstsrcpart +PREHOOK: Output: default@tstsrcpart FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Table tstsrcpart is not locked diff --git a/ql/src/test/results/clientnegative/lockneg4.q.out b/ql/src/test/results/clientnegative/lockneg4.q.out index c31a23c..86498a1 100644 --- a/ql/src/test/results/clientnegative/lockneg4.q.out +++ b/ql/src/test/results/clientnegative/lockneg4.q.out @@ -26,8 +26,12 @@ POSTHOOK: Lineage: tstsrcpart PARTITION(ds=2008-04-08,hr=11).key SIMPLE [(srcpar POSTHOOK: Lineage: tstsrcpart PARTITION(ds=2008-04-08,hr=11).value SIMPLE [(srcpart)srcpart.FieldSchema(name:value, type:string, comment:default), ] PREHOOK: query: LOCK TABLE tstsrcpart PARTITION(ds='2008-04-08', hr='11') EXCLUSIVE PREHOOK: type: LOCKTABLE +PREHOOK: Input: default@tstsrcpart +PREHOOK: Output: default@tstsrcpart POSTHOOK: query: LOCK TABLE tstsrcpart PARTITION(ds='2008-04-08', hr='11') EXCLUSIVE POSTHOOK: type: LOCKTABLE +POSTHOOK: Input: default@tstsrcpart +POSTHOOK: Output: default@tstsrcpart PREHOOK: query: SHOW LOCKS tstsrcpart PARTITION(ds='2008-04-08', hr='12') PREHOOK: type: SHOWLOCKS FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hive.ql.metadata.HiveException: Partition {ds=2008-04-08, hr=12} for table tstsrcpart does not exist diff --git a/ql/src/test/results/clientpositive/lock1.q.out b/ql/src/test/results/clientpositive/lock1.q.out index 27545ea..f57a944 100644 --- a/ql/src/test/results/clientpositive/lock1.q.out +++ b/ql/src/test/results/clientpositive/lock1.q.out @@ -30,8 +30,12 @@ POSTHOOK: query: SHOW LOCKS tstsrc POSTHOOK: type: SHOWLOCKS PREHOOK: query: LOCK TABLE tstsrc shared PREHOOK: type: LOCKTABLE +PREHOOK: Input: default@tstsrc +PREHOOK: Output: default@tstsrc POSTHOOK: query: LOCK TABLE tstsrc shared POSTHOOK: type: LOCKTABLE +POSTHOOK: Input: default@tstsrc +POSTHOOK: Output: default@tstsrc PREHOOK: query: SHOW LOCKS PREHOOK: type: SHOWLOCKS POSTHOOK: query: SHOW LOCKS @@ -52,8 +56,12 @@ LOCK_MODE:EXPLICIT LOCK_QUERYSTRING:LOCK TABLE tstsrc shared PREHOOK: query: UNLOCK TABLE tstsrc PREHOOK: type: UNLOCKTABLE +PREHOOK: Input: default@tstsrc +PREHOOK: Output: default@tstsrc POSTHOOK: query: UNLOCK TABLE tstsrc POSTHOOK: type: UNLOCKTABLE +POSTHOOK: Input: default@tstsrc +POSTHOOK: Output: default@tstsrc PREHOOK: query: SHOW LOCKS PREHOOK: type: SHOWLOCKS POSTHOOK: query: SHOW LOCKS @@ -68,8 +76,12 @@ POSTHOOK: query: SHOW LOCKS tstsrc POSTHOOK: type: SHOWLOCKS PREHOOK: query: lock TABLE tstsrc SHARED PREHOOK: type: LOCKTABLE +PREHOOK: Input: default@tstsrc +PREHOOK: Output: default@tstsrc POSTHOOK: query: lock TABLE tstsrc SHARED POSTHOOK: type: LOCKTABLE +POSTHOOK: Input: default@tstsrc +POSTHOOK: Output: default@tstsrc PREHOOK: query: SHOW LOCKS PREHOOK: type: SHOWLOCKS POSTHOOK: query: SHOW LOCKS @@ -90,8 +102,12 @@ POSTHOOK: type: SHOWLOCKS default@tstsrc SHARED PREHOOK: query: LOCK TABLE tstsrc SHARED PREHOOK: type: LOCKTABLE +PREHOOK: Input: default@tstsrc +PREHOOK: Output: default@tstsrc POSTHOOK: query: LOCK TABLE tstsrc SHARED POSTHOOK: type: LOCKTABLE +POSTHOOK: Input: default@tstsrc +POSTHOOK: Output: default@tstsrc PREHOOK: query: SHOW LOCKS PREHOOK: type: SHOWLOCKS POSTHOOK: query: SHOW LOCKS @@ -118,8 +134,12 @@ default@tstsrc SHARED default@tstsrc SHARED PREHOOK: query: UNLOCK TABLE tstsrc PREHOOK: type: UNLOCKTABLE +PREHOOK: Input: default@tstsrc +PREHOOK: Output: default@tstsrc POSTHOOK: query: UNLOCK TABLE tstsrc POSTHOOK: type: UNLOCKTABLE +POSTHOOK: Input: default@tstsrc +POSTHOOK: Output: default@tstsrc PREHOOK: query: SHOW LOCKS PREHOOK: type: SHOWLOCKS POSTHOOK: query: SHOW LOCKS diff --git a/ql/src/test/results/clientpositive/lock2.q.out b/ql/src/test/results/clientpositive/lock2.q.out index e699a8d..51005f5 100644 --- a/ql/src/test/results/clientpositive/lock2.q.out +++ b/ql/src/test/results/clientpositive/lock2.q.out @@ -48,16 +48,28 @@ POSTHOOK: Lineage: tstsrcpart PARTITION(ds=2008-04-08,hr=11).key SIMPLE [(srcpar POSTHOOK: Lineage: tstsrcpart PARTITION(ds=2008-04-08,hr=11).value SIMPLE [(srcpart)srcpart.FieldSchema(name:value, type:string, comment:default), ] PREHOOK: query: LOCK TABLE tstsrc SHARED PREHOOK: type: LOCKTABLE +PREHOOK: Input: default@tstsrc +PREHOOK: Output: default@tstsrc POSTHOOK: query: LOCK TABLE tstsrc SHARED POSTHOOK: type: LOCKTABLE +POSTHOOK: Input: default@tstsrc +POSTHOOK: Output: default@tstsrc PREHOOK: query: LOCK TABLE tstsrcpart SHARED PREHOOK: type: LOCKTABLE +PREHOOK: Input: default@tstsrcpart +PREHOOK: Output: default@tstsrcpart POSTHOOK: query: LOCK TABLE tstsrcpart SHARED POSTHOOK: type: LOCKTABLE +POSTHOOK: Input: default@tstsrcpart +POSTHOOK: Output: default@tstsrcpart PREHOOK: query: LOCK TABLE tstsrcpart PARTITION(ds='2008-04-08', hr='11') EXCLUSIVE PREHOOK: type: LOCKTABLE +PREHOOK: Input: default@tstsrcpart +PREHOOK: Output: default@tstsrcpart POSTHOOK: query: LOCK TABLE tstsrcpart PARTITION(ds='2008-04-08', hr='11') EXCLUSIVE POSTHOOK: type: LOCKTABLE +POSTHOOK: Input: default@tstsrcpart +POSTHOOK: Output: default@tstsrcpart PREHOOK: query: SHOW LOCKS PREHOOK: type: SHOWLOCKS POSTHOOK: query: SHOW LOCKS @@ -85,8 +97,12 @@ LOCK_MODE:EXPLICIT LOCK_QUERYSTRING:LOCK TABLE tstsrcpart PARTITION(ds='2008-04-08', hr='11') EXCLUSIVE PREHOOK: query: UNLOCK TABLE tstsrc PREHOOK: type: UNLOCKTABLE +PREHOOK: Input: default@tstsrc +PREHOOK: Output: default@tstsrc POSTHOOK: query: UNLOCK TABLE tstsrc POSTHOOK: type: UNLOCKTABLE +POSTHOOK: Input: default@tstsrc +POSTHOOK: Output: default@tstsrc PREHOOK: query: SHOW LOCKS PREHOOK: type: SHOWLOCKS POSTHOOK: query: SHOW LOCKS @@ -105,8 +121,12 @@ POSTHOOK: type: SHOWLOCKS default@tstsrcpart@ds=2008-04-08/hr=11 EXCLUSIVE PREHOOK: query: UNLOCK TABLE tstsrcpart PREHOOK: type: UNLOCKTABLE +PREHOOK: Input: default@tstsrcpart +PREHOOK: Output: default@tstsrcpart POSTHOOK: query: UNLOCK TABLE tstsrcpart POSTHOOK: type: UNLOCKTABLE +POSTHOOK: Input: default@tstsrcpart +POSTHOOK: Output: default@tstsrcpart PREHOOK: query: SHOW LOCKS PREHOOK: type: SHOWLOCKS POSTHOOK: query: SHOW LOCKS @@ -123,8 +143,12 @@ POSTHOOK: type: SHOWLOCKS default@tstsrcpart@ds=2008-04-08/hr=11 EXCLUSIVE PREHOOK: query: UNLOCK TABLE tstsrcpart PARTITION(ds='2008-04-08', hr='11') PREHOOK: type: UNLOCKTABLE +PREHOOK: Input: default@tstsrcpart +PREHOOK: Output: default@tstsrcpart POSTHOOK: query: UNLOCK TABLE tstsrcpart PARTITION(ds='2008-04-08', hr='11') POSTHOOK: type: UNLOCKTABLE +POSTHOOK: Input: default@tstsrcpart +POSTHOOK: Output: default@tstsrcpart PREHOOK: query: SHOW LOCKS PREHOOK: type: SHOWLOCKS POSTHOOK: query: SHOW LOCKS