[
https://issues.apache.org/jira/browse/HIVE-1760?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Namit Jain updated HIVE-1760:
-----------------------------
Resolution: Fixed
Fix Version/s: 0.7.0
Hadoop Flags: [Reviewed]
Status: Resolved (was: Patch Available)
Committed. Thanks Paul
> 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
> Fix For: 0.7.0
>
> 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.