deniskuzZ commented on a change in pull request #1151: URL: https://github.com/apache/hive/pull/1151#discussion_r444683782
########## File path: ql/src/java/org/apache/hadoop/hive/ql/Driver.java ########## @@ -675,50 +678,18 @@ private void runInternal(String command, boolean alreadyCompiled) throws Command try { if (!validTxnManager.isValidTxnListState()) { - LOG.info("Compiling after acquiring locks"); + LOG.info("Reexecuting after acquiring locks, since snapshot was outdated."); // Snapshot was outdated when locks were acquired, hence regenerate context, - // txn list and retry - // TODO: Lock acquisition should be moved before analyze, this is a bit hackish. - // Currently, we acquire a snapshot, we compile the query wrt that snapshot, - // and then, we acquire locks. If snapshot is still valid, we continue as usual. - // But if snapshot is not valid, we recompile the query. - if (driverContext.isOutdatedTxn()) { - driverContext.getTxnManager().rollbackTxn(); - - String userFromUGI = DriverUtils.getUserFromUGI(driverContext); - driverContext.getTxnManager().openTxn(context, userFromUGI, driverContext.getTxnType()); - lockAndRespond(); - } - driverContext.setRetrial(true); - driverContext.getBackupContext().addSubContext(context); - driverContext.getBackupContext().setHiveLocks(context.getHiveLocks()); - context = driverContext.getBackupContext(); - driverContext.getConf().set(ValidTxnList.VALID_TXNS_KEY, - driverContext.getTxnManager().getValidTxns().toString()); - if (driverContext.getPlan().hasAcidResourcesInQuery()) { - validTxnManager.recordValidWriteIds(); - } - - if (!alreadyCompiled) { - // compile internal will automatically reset the perf logger - compileInternal(command, true); - } else { - // Since we're reusing the compiled plan, we need to update its start time for current run - driverContext.getPlan().setQueryStartTime(driverContext.getQueryDisplay().getQueryStartTime()); - } - - if (!validTxnManager.isValidTxnListState()) { - // Throw exception - throw handleHiveException(new HiveException("Operation could not be executed"), 14); + // txn list and retry (see ReExecutionRetryLockPlugin) + try { + releaseLocksAndCommitOrRollback(false); + } catch (LockException e) { + handleHiveException(e, 12); Review comment: what is this magic number 12? do we have enum for error codes? ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: gitbox-unsubscr...@hive.apache.org For additional commands, e-mail: gitbox-h...@hive.apache.org