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)