You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by kh...@apache.org on 2014/12/09 02:10:26 UTC
svn commit: r1643966 -
/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
Author: khorgath
Date: Tue Dec 9 01:10:26 2014
New Revision: 1643966
URL: http://svn.apache.org/r1643966
Log:
HIVE-8850 : ObjectStore:: rollbackTransaction() needs to be looked into further (Hari Sankar Sivarama Subramaniyan, reviewed by Sushanth Sowmyan, Chaoyu Tang)
Modified:
hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java?rev=1643966&r1=1643965&r2=1643966&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java Tue Dec 9 01:10:26 2014
@@ -394,9 +394,12 @@ public class ObjectStore implements RawS
currentTransaction.begin();
transactionStatus = TXN_STATUS.OPEN;
} else {
- // something is wrong since openTransactionCalls is greater than 1 but
- // currentTransaction is not active
- assert ((currentTransaction != null) && (currentTransaction.isActive()));
+ // openTransactionCalls > 1 means this is an interior transaction
+ // We should already have a transaction created that is active.
+ if ((currentTransaction == null) || (!currentTransaction.isActive())){
+ throw new RuntimeException("openTransaction called in an interior"
+ + " transaction scope, but currentTransaction is not active.");
+ }
}
boolean result = currentTransaction.isActive();
@@ -462,20 +465,19 @@ public class ObjectStore implements RawS
debugLog("rolling back transaction: no open transactions: " + openTrasactionCalls);
return;
}
- openTrasactionCalls = 0;
debugLog("Rollback transaction, isActive: " + currentTransaction.isActive());
- if (currentTransaction.isActive()
- && transactionStatus != TXN_STATUS.ROLLBACK) {
- transactionStatus = TXN_STATUS.ROLLBACK;
- try {
- // could already be rolled back
+ try {
+ if (currentTransaction.isActive()
+ && transactionStatus != TXN_STATUS.ROLLBACK) {
currentTransaction.rollback();
- } finally {
- // remove all detached objects from the cache, since the transaction is
- // being rolled back they are no longer relevant, and this prevents them
- // from reattaching in future transactions
- pm.evictAll();
}
+ } finally {
+ openTrasactionCalls = 0;
+ transactionStatus = TXN_STATUS.ROLLBACK;
+ // remove all detached objects from the cache, since the transaction is
+ // being rolled back they are no longer relevant, and this prevents them
+ // from reattaching in future transactions
+ pm.evictAll();
}
}