[ 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.