Author: hashutosh
Date: Wed Jul 30 00:07:27 2014
New Revision: 1614524
URL: http://svn.apache.org/r1614524
Log:
HIVE-7249 : HiveTxnManager.closeTxnManger() throws if called after commitTxn()
(Alan Gates via Ashutosh Chauhan)
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbLockManager.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java
hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager.java
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbLockManager.java
URL:
http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbLockManager.java?rev=1614524&r1=1614523&r2=1614524&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbLockManager.java
(original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbLockManager.java
Wed Jul 30 00:07:27 2014
@@ -207,6 +207,16 @@ public class DbLockManager implements Hi
}
}
+ /**
+ * Clear the memory of the locks in this object. This won't clear the locks
from the database.
+ * It is for use with
+ * {@link
#DbLockManager(org.apache.hadoop.hive.metastore.HiveMetaStoreClient).commitTxn}
and
+ * {@link
#DbLockManager(org.apache.hadoop.hive.metastore.HiveMetaStoreClient).rollbackTxn}.
+ */
+ void clearLocalLockRecords() {
+ locks.clear();
+ }
+
// Sleep before we send checkLock again, but do it with a back off
// off so we don't sit and hammer the metastore in a tight loop
private void backoff() {
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java
URL:
http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java?rev=1614524&r1=1614523&r2=1614524&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java
(original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java
Wed Jul 30 00:07:27 2014
@@ -203,6 +203,7 @@ public class DbTxnManager extends HiveTx
"transaction");
}
try {
+ lockMgr.clearLocalLockRecords();
LOG.debug("Committing txn " + txnId);
client.commitTxn(txnId);
} catch (NoSuchTxnException e) {
@@ -226,6 +227,7 @@ public class DbTxnManager extends HiveTx
"transaction");
}
try {
+ lockMgr.clearLocalLockRecords();
LOG.debug("Rolling back txn " + txnId);
client.rollbackTxn(txnId);
} catch (NoSuchTxnException e) {
Modified:
hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager.java
URL:
http://svn.apache.org/viewvc/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager.java?rev=1614524&r1=1614523&r2=1614524&view=diff
==============================================================================
---
hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager.java
(original)
+++
hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/lockmgr/TestDbTxnManager.java
Wed Jul 30 00:07:27 2014
@@ -126,12 +126,13 @@ public class TestDbTxnManager {
public void testSingleWriteTable() throws Exception {
WriteEntity we = addTableOutput(WriteEntity.WriteType.INSERT);
QueryPlan qp = new MockQueryPlan(this);
+ txnMgr.openTxn("fred");
txnMgr.acquireLocks(qp, ctx, "fred");
List<HiveLock> locks = ctx.getHiveLocks();
Assert.assertEquals(1, locks.size());
Assert.assertEquals(1,
TxnDbUtil.countLockComponents(((DbLockManager.DbHiveLock)
locks.get(0)).lockId));
- txnMgr.getLockManager().unlock(locks.get(0));
+ txnMgr.commitTxn();
locks = txnMgr.getLockManager().getLocks(false, false);
Assert.assertEquals(0, locks.size());
}
@@ -144,12 +145,13 @@ public class TestDbTxnManager {
addPartitionInput(t);
WriteEntity we = addTableOutput(WriteEntity.WriteType.INSERT);
QueryPlan qp = new MockQueryPlan(this);
+ txnMgr.openTxn("fred");
txnMgr.acquireLocks(qp, ctx, "fred");
List<HiveLock> locks = ctx.getHiveLocks();
Assert.assertEquals(1, locks.size());
Assert.assertEquals(4,
TxnDbUtil.countLockComponents(((DbLockManager.DbHiveLock)
locks.get(0)).lockId));
- txnMgr.getLockManager().unlock(locks.get(0));
+ txnMgr.commitTxn();
locks = txnMgr.getLockManager().getLocks(false, false);
Assert.assertEquals(0, locks.size());
}
@@ -158,12 +160,13 @@ public class TestDbTxnManager {
public void testUpdate() throws Exception {
WriteEntity we = addTableOutput(WriteEntity.WriteType.UPDATE);
QueryPlan qp = new MockQueryPlan(this);
+ txnMgr.openTxn("fred");
txnMgr.acquireLocks(qp, ctx, "fred");
List<HiveLock> locks = ctx.getHiveLocks();
Assert.assertEquals(1, locks.size());
Assert.assertEquals(1,
TxnDbUtil.countLockComponents(((DbLockManager.DbHiveLock)
locks.get(0)).lockId));
- txnMgr.getLockManager().unlock(locks.get(0));
+ txnMgr.commitTxn();
locks = txnMgr.getLockManager().getLocks(false, false);
Assert.assertEquals(0, locks.size());
}
@@ -172,12 +175,28 @@ public class TestDbTxnManager {
public void testDelete() throws Exception {
WriteEntity we = addTableOutput(WriteEntity.WriteType.DELETE);
QueryPlan qp = new MockQueryPlan(this);
+ txnMgr.openTxn("fred");
txnMgr.acquireLocks(qp, ctx, "fred");
List<HiveLock> locks = ctx.getHiveLocks();
Assert.assertEquals(1, locks.size());
Assert.assertEquals(1,
TxnDbUtil.countLockComponents(((DbLockManager.DbHiveLock)
locks.get(0)).lockId));
- txnMgr.getLockManager().unlock(locks.get(0));
+ txnMgr.commitTxn();
+ locks = txnMgr.getLockManager().getLocks(false, false);
+ Assert.assertEquals(0, locks.size());
+ }
+
+ @Test
+ public void testRollback() throws Exception {
+ WriteEntity we = addTableOutput(WriteEntity.WriteType.DELETE);
+ QueryPlan qp = new MockQueryPlan(this);
+ txnMgr.openTxn("fred");
+ txnMgr.acquireLocks(qp, ctx, "fred");
+ List<HiveLock> locks = ctx.getHiveLocks();
+ Assert.assertEquals(1, locks.size());
+ Assert.assertEquals(1,
+ TxnDbUtil.countLockComponents(((DbLockManager.DbHiveLock)
locks.get(0)).lockId));
+ txnMgr.rollbackTxn();
locks = txnMgr.getLockManager().getLocks(false, false);
Assert.assertEquals(0, locks.size());
}