You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hive.apache.org by "Peter Vary (JIRA)" <ji...@apache.org> on 2017/04/14 14:12:42 UTC
[jira] [Created] (HIVE-16451) Race condition between
HiveStatement.getQueryLog and HiveStatement.runAsyncOnServer
Peter Vary created HIVE-16451:
---------------------------------
Summary: 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
Affects Versions: 3.0.0
Reporter: Peter Vary
Assignee: Peter Vary
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
(v6.3.15#6346)