You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "feiyuanxing (JIRA)" <ji...@apache.org> on 2018/12/17 07:33:00 UTC
[jira] [Commented] (HIVE-16451) Race condition between
HiveStatement.getQueryLog and HiveStatement.runAsyncOnServer
[ https://issues.apache.org/jira/browse/HIVE-16451?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16722749#comment-16722749 ]
feiyuanxing commented on HIVE-16451:
------------------------------------
well!
> Race condition between HiveStatement.getQueryLog and HiveStatement.runAsyncOnServer
> -----------------------------------------------------------------------------------
>
> Key: HIVE-16451
> URL: https://issues.apache.org/jira/browse/HIVE-16451
> Project: Hive
> Issue Type: Bug
> Components: Beeline, JDBC
> Affects Versions: 3.0.0
> Reporter: Peter Vary
> Assignee: Peter Vary
> Priority: Major
> Fix For: 3.0.0
>
> Attachments: HIVE-16451.02.patch, HIVE-16451.03.patch, HIVE-16451.patch
>
>
> During the BeeLineDriver testing I have met the following race condition:
> - Run the query asynchronously through BeeLine
> - Querying the logs in the BeeLine
> In the following code:
> {code:title=HiveStatement.runAsyncOnServer}
> private void runAsyncOnServer(String sql) throws SQLException {
> checkConnection("execute");
> closeClientOperation();
> initFlags();
> [..]
> }
> {code}
> {code:title=HiveStatement.getQueryLog}
> public List<String> getQueryLog(boolean incremental, int fetchSize)
> throws SQLException, ClosedOrCancelledStatementException {
> [..]
> try {
> if (stmtHandle != null) {
> [..]
> } else {
> if (isQueryClosed) {
> throw new ClosedOrCancelledStatementException("Method getQueryLog() failed. The " +
> "statement has been closed or cancelled.");
> } else {
> return logs;
> }
> }
> } catch (SQLException e) {
> [..]
> }
> [..]
> }
> {code}
> The runAsyncOnServer {{closeClientOperation}} sets {{isQueryClosed}} flag to true:
> {code:title=HiveStatement.closeClientOperation}
> void closeClientOperation() throws SQLException {
> [..]
> isQueryClosed = true;
> isExecuteStatementFailed = false;
> stmtHandle = null;
> }
> {code}
> The {{initFlags}} sets it to false:
> {code}
> private void initFlags() {
> isCancelled = false;
> isQueryClosed = false;
> isLogBeingGenerated = true;
> isExecuteStatementFailed = false;
> isOperationComplete = false;
> }
> {code}
> If the {{getQueryLog}} is called after the {{closeClientOperation}}, but before the {{initFlags}}, then we will have a following warning if verbose mode is set to true in BeeLine:
> {code}
> Warning: org.apache.hive.jdbc.ClosedOrCancelledStatementException: Method getQueryLog() failed. The statement has been closed or cancelled. (state=,code=0)
> {code}
> This caused this fail:
> https://builds.apache.org/job/PreCommit-HIVE-Build/4691/testReport/org.apache.hadoop.hive.cli/TestBeeLineDriver/testCliDriver_smb_mapjoin_11_/
> {code}
> Error Message
> Client result comparison failed with error code = 1 while executing fname=smb_mapjoin_11
> 16a17
> > Warning: org.apache.hive.jdbc.ClosedOrCancelledStatementException: Method getQueryLog() failed. The statement has been closed or cancelled. (state=,code=0)
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)