You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by we...@apache.org on 2016/05/11 18:15:23 UTC
hive git commit: HIVE-12996 : Temp tables shouldn't be locked (Wei
Zheng, reviewed by Eugene Koifman)
Repository: hive
Updated Branches:
refs/heads/master d8f3d33b0 -> bad8525cc
HIVE-12996 : Temp tables shouldn't be locked (Wei Zheng, reviewed by Eugene Koifman)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/bad8525c
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/bad8525c
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/bad8525c
Branch: refs/heads/master
Commit: bad8525cc0131a919753fc700ea1906c0063931f
Parents: d8f3d33
Author: Wei Zheng <we...@apache.org>
Authored: Wed May 11 11:15:08 2016 -0700
Committer: Wei Zheng <we...@apache.org>
Committed: Wed May 11 11:15:08 2016 -0700
----------------------------------------------------------------------
.../hadoop/hive/ql/lockmgr/DbTxnManager.java | 12 ++++---
.../hive/ql/lockmgr/TestDbTxnManager2.java | 36 ++++++++------------
2 files changed, 21 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/bad8525c/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java b/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java
index 9c2a346..8c3a1d2 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.hive.ql.lockmgr;
import com.google.common.annotations.VisibleForTesting;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hive.ql.io.AcidUtils;
+import org.apache.hadoop.hive.ql.parse.SemanticAnalyzer;
import org.apache.hive.common.util.ShutdownHookManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -167,9 +168,10 @@ public class DbTxnManager extends HiveTxnManagerImpl {
// For each source to read, get a shared lock
for (ReadEntity input : plan.getInputs()) {
- if (!input.needsLock() || input.isUpdateOrDelete()) {
+ if (!input.needsLock() || input.isUpdateOrDelete() ||
+ (input.getType() == Entity.Type.TABLE && input.getTable().isTemporary())) {
// We don't want to acquire read locks during update or delete as we'll be acquiring write
- // locks instead.
+ // locks instead. Also, there's no need to lock temp tables since they're session wide
continue;
}
LockComponentBuilder compBuilder = new LockComponentBuilder();
@@ -210,9 +212,9 @@ public class DbTxnManager extends HiveTxnManagerImpl {
// overwrite) than we need a shared. If it's update or delete then we
// need a SEMI-SHARED.
for (WriteEntity output : plan.getOutputs()) {
- if (output.getType() == Entity.Type.DFS_DIR || output.getType() ==
- Entity.Type.LOCAL_DIR) {
- // We don't lock files or directories.
+ if (output.getType() == Entity.Type.DFS_DIR || output.getType() == Entity.Type.LOCAL_DIR ||
+ (output.getType() == Entity.Type.TABLE && output.getTable().isTemporary())) {
+ // We don't lock files or directories. We also skip locking temp tables.
continue;
}
LockComponentBuilder compBuilder = new LockComponentBuilder();
http://git-wip-us.apache.org/repos/asf/hive/blob/bad8525c/ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager2.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager2.java b/ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager2.java
index c956d78..0fdf0e9 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager2.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager2.java
@@ -569,48 +569,40 @@ public class TestDbTxnManager2 {
checkCmdOnDriver(cpr);
LockState lockState = ((DbTxnManager) txnMgr).acquireLocks(driver.getPlan(), ctx, "Practical", false);
List<ShowLocksResponseElement> locks = getLocks();
- Assert.assertEquals("Unexpected lock count", 2, locks.size());
- checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "default", "values__tmp__table__1", null, locks.get(0));
- checkLock(LockType.EXCLUSIVE, LockState.ACQUIRED, "default", "nonAcidPart", null, locks.get(1));
- List<HiveLock> relLocks = new ArrayList<HiveLock>(2);
+ Assert.assertEquals("Unexpected lock count", 1, locks.size());
+ checkLock(LockType.EXCLUSIVE, LockState.ACQUIRED, "default", "nonAcidPart", null, locks.get(0));
+ List<HiveLock> relLocks = new ArrayList<HiveLock>(1);
relLocks.add(new DbLockManager.DbHiveLock(locks.get(0).getLockid()));
- relLocks.add(new DbLockManager.DbHiveLock(locks.get(1).getLockid()));
txnMgr.getLockManager().releaseLocks(relLocks);
cpr = driver.compileAndRespond("insert into nonAcidPart partition(p=1) values(5,6)");
checkCmdOnDriver(cpr);
lockState = ((DbTxnManager) txnMgr).acquireLocks(driver.getPlan(), ctx, "Practical", false);
locks = getLocks();
- Assert.assertEquals("Unexpected lock count", 2, locks.size());
- checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "default", "values__tmp__table__2", null, locks.get(0));
- checkLock(LockType.EXCLUSIVE, LockState.ACQUIRED, "default", "nonAcidPart", "p=1", locks.get(1));
- relLocks = new ArrayList<HiveLock>(2);
+ Assert.assertEquals("Unexpected lock count", 1, locks.size());
+ checkLock(LockType.EXCLUSIVE, LockState.ACQUIRED, "default", "nonAcidPart", "p=1", locks.get(0));
+ relLocks = new ArrayList<HiveLock>(1);
relLocks.add(new DbLockManager.DbHiveLock(locks.get(0).getLockid()));
- relLocks.add(new DbLockManager.DbHiveLock(locks.get(1).getLockid()));
txnMgr.getLockManager().releaseLocks(relLocks);
cpr = driver.compileAndRespond("insert into acidPart partition(p) values(1,2,3)");
checkCmdOnDriver(cpr);
lockState = ((DbTxnManager) txnMgr).acquireLocks(driver.getPlan(), ctx, "Practical", false);
locks = getLocks();
- Assert.assertEquals("Unexpected lock count", 2, locks.size());
- checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "default", "values__tmp__table__3", null, locks.get(0));
- checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "default", "acidPart", null, locks.get(1));
- relLocks = new ArrayList<HiveLock>(2);
+ Assert.assertEquals("Unexpected lock count", 1, locks.size());
+ checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "default", "acidPart", null, locks.get(0));
+ relLocks = new ArrayList<HiveLock>(1);
relLocks.add(new DbLockManager.DbHiveLock(locks.get(0).getLockid()));
- relLocks.add(new DbLockManager.DbHiveLock(locks.get(1).getLockid()));
txnMgr.getLockManager().releaseLocks(relLocks);
cpr = driver.compileAndRespond("insert into acidPart partition(p=1) values(5,6)");
checkCmdOnDriver(cpr);
lockState = ((DbTxnManager) txnMgr).acquireLocks(driver.getPlan(), ctx, "Practical", false);
locks = getLocks();
- Assert.assertEquals("Unexpected lock count", 2, locks.size());
- checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "default", "values__tmp__table__4", null, locks.get(0));
- checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "default", "acidPart", "p=1", locks.get(1));
- relLocks = new ArrayList<HiveLock>(2);
+ Assert.assertEquals("Unexpected lock count", 1, locks.size());
+ checkLock(LockType.SHARED_READ, LockState.ACQUIRED, "default", "acidPart", "p=1", locks.get(0));
+ relLocks = new ArrayList<HiveLock>(1);
relLocks.add(new DbLockManager.DbHiveLock(locks.get(0).getLockid()));
- relLocks.add(new DbLockManager.DbHiveLock(locks.get(1).getLockid()));
txnMgr.getLockManager().releaseLocks(relLocks);
cpr = driver.compileAndRespond("update acidPart set b = 17 where a = 1");
@@ -619,7 +611,7 @@ public class TestDbTxnManager2 {
locks = getLocks();
Assert.assertEquals("Unexpected lock count", 1, locks.size());
checkLock(LockType.SHARED_WRITE, LockState.ACQUIRED, "default", "acidPart", null, locks.get(0));
- relLocks = new ArrayList<HiveLock>(2);
+ relLocks = new ArrayList<HiveLock>(1);
relLocks.add(new DbLockManager.DbHiveLock(locks.get(0).getLockid()));
txnMgr.getLockManager().releaseLocks(relLocks);
@@ -629,7 +621,7 @@ public class TestDbTxnManager2 {
locks = getLocks();
Assert.assertEquals("Unexpected lock count", 1, locks.size());
checkLock(LockType.SHARED_WRITE, LockState.ACQUIRED, "default", "acidPart", null, locks.get(0));//https://issues.apache.org/jira/browse/HIVE-13212
- relLocks = new ArrayList<HiveLock>(2);
+ relLocks = new ArrayList<HiveLock>(1);
relLocks.add(new DbLockManager.DbHiveLock(locks.get(0).getLockid()));
txnMgr.getLockManager().releaseLocks(relLocks);
}