[jira] Commented: (HIVE-1760) Mismatched open/commit transaction calls in case of connection retry

2010-10-29 Thread Paul Yang (JIRA)

[ 
https://issues.apache.org/jira/browse/HIVE-1760?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12926502#action_12926502
 ] 

Paul Yang commented on HIVE-1760:
-

Explanation of the patch - by eliminating cases where executeWithRetry() is 
nested, this will produce the correct rollback behavior.

> Mismatched open/commit transaction calls in case of connection retry
> 
>
> Key: HIVE-1760
> URL: https://issues.apache.org/jira/browse/HIVE-1760
> Project: Hive
>  Issue Type: Bug
>  Components: Metastore
>Affects Versions: 0.7.0
>Reporter: Paul Yang
>Assignee: Paul Yang
> Attachments: HIVE-1760.1.patch
>
>
> Consider the create table function (parts removed for simplicity):
> {code}
> private void create_table_core(final RawStore ms, final Table tbl)
> throws AlreadyExistsException, MetaException, InvalidObjectException {
>   Path tblPath = null;
>   boolean success = false, madeDir = false;
>   try {
> ms.openTransaction();
> // get_table checks whether database exists, it should be moved here
> if (is_table_exists(tbl.getDbName(), tbl.getTableName())) {
>   throw new AlreadyExistsException("Table " + tbl.getTableName()
>   + " already exists");
> }
> ms.createTable(tbl);
> success = ms.commitTransaction();
>   } finally {
> if (!success) {
>   ms.rollbackTransaction();
>   if (madeDir) {
> wh.deleteDir(tblPath, true);
>   }
> }
>   }
> }
> {code}
> A potential openTransaction() / commitTransaction() mismatch can occur if the 
> is_table_exits() method call experiences a connection failure. 
> Since get_table() in is_table_exists() uses executeWithRetry(),  the 
> transaction will be rolled back and get_table() will be called again if the 
> is a connection problem. However, this rollback and retry will reset the 
> global openTransactionCalls counter back to 0, effectively canceling out the 
> openTransaction() call. 
> Then later in the method when commitTransaction() is called, Hive will throw 
> an error similar to the following:
> Caused by: java.lang.RuntimeException: commitTransaction was called but 
> openTransactionCalls = 0. This probably indicates that there are unbalanced 
> calls to openTransaction/commitTransaction
> A similar problem exists with create_type_core()

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.



[jira] Commented: (HIVE-1760) Mismatched open/commit transaction calls in case of connection retry

2010-10-29 Thread Namit Jain (JIRA)

[ 
https://issues.apache.org/jira/browse/HIVE-1760?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12926500#action_12926500
 ] 

Namit Jain commented on HIVE-1760:
--

+1

running tests now

> Mismatched open/commit transaction calls in case of connection retry
> 
>
> Key: HIVE-1760
> URL: https://issues.apache.org/jira/browse/HIVE-1760
> Project: Hive
>  Issue Type: Bug
>  Components: Metastore
>Affects Versions: 0.7.0
>Reporter: Paul Yang
>Assignee: Paul Yang
> Attachments: HIVE-1760.1.patch
>
>
> Consider the create table function (parts removed for simplicity):
> {code}
> private void create_table_core(final RawStore ms, final Table tbl)
> throws AlreadyExistsException, MetaException, InvalidObjectException {
>   Path tblPath = null;
>   boolean success = false, madeDir = false;
>   try {
> ms.openTransaction();
> // get_table checks whether database exists, it should be moved here
> if (is_table_exists(tbl.getDbName(), tbl.getTableName())) {
>   throw new AlreadyExistsException("Table " + tbl.getTableName()
>   + " already exists");
> }
> ms.createTable(tbl);
> success = ms.commitTransaction();
>   } finally {
> if (!success) {
>   ms.rollbackTransaction();
>   if (madeDir) {
> wh.deleteDir(tblPath, true);
>   }
> }
>   }
> }
> {code}
> A potential openTransaction() / commitTransaction() mismatch can occur if the 
> is_table_exits() method call experiences a connection failure. 
> Since get_table() in is_table_exists() uses executeWithRetry(),  the 
> transaction will be rolled back and get_table() will be called again if the 
> is a connection problem. However, this rollback and retry will reset the 
> global openTransactionCalls counter back to 0, effectively canceling out the 
> openTransaction() call. 
> Then later in the method when commitTransaction() is called, Hive will throw 
> an error similar to the following:
> Caused by: java.lang.RuntimeException: commitTransaction was called but 
> openTransactionCalls = 0. This probably indicates that there are unbalanced 
> calls to openTransaction/commitTransaction
> A similar problem exists with create_type_core()

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.