You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Peter Vary (JIRA)" <ji...@apache.org> on 2017/07/24 12:35:00 UTC
[jira] [Commented] (HIVE-17158) BeeLine Query Log and Query Result
print order is not defined
[ https://issues.apache.org/jira/browse/HIVE-17158?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16098296#comment-16098296 ]
Peter Vary commented on HIVE-17158:
-----------------------------------
The root cause of the issue is that if the LogRunnable is interrupted before started then there is no InterruptedException thrown, and the {{showRemainingLogsIfAny}} is not called.
{code}
private Runnable createLogRunnable(final Statement statement) {
if (statement instanceof HiveStatement) {
final HiveStatement hiveStatement = (HiveStatement) statement;
Runnable runnable = new Runnable() {
@Override
public void run() {
while (hiveStatement.hasMoreLogs() && !Thread.currentThread().isInterrupted()) {
try {
// fetch the log periodically and output to beeline console
for (String log : hiveStatement.getQueryLog()) {
if (!beeLine.isTestMode()) {
beeLine.info(log);
} else {
// In test mode print the logs to the output
beeLine.output(log);
}
}
Thread.sleep(DEFAULT_QUERY_PROGRESS_INTERVAL);
} catch (SQLException e) {
beeLine.error(new SQLWarning(e));
return;
} catch (InterruptedException e) {
beeLine.debug("Getting log thread is interrupted, since query is done!");
showRemainingLogsIfAny(statement); <-- We expect to print the logs here, but if no exception, no logs
return;
}
}
}
};
return runnable;
} else {
[..]
}
}
{code}
The log printed when the ResultSet is queried, or in the finally stage.
{code}
do {
ResultSet rs = stmnt.getResultSet();
try {
int count = beeLine.print(rs);
long end = System.currentTimeMillis();
beeLine.info(
beeLine.loc("rows-selected", count) + " " + beeLine.locElapsedTime(end - start));
} finally {
if (logThread != null) {
logThread.join(DEFAULT_QUERY_PROGRESS_THREAD_TIMEOUT);
showRemainingLogsIfAny(stmnt);
logThread = null;
}
rs.close();
}
} while (BeeLine.getMoreResults(stmnt));
{code}
{code}
} finally {
if (logThread != null) {
if (!logThread.isInterrupted()) {
logThread.interrupt();
}
logThread.join(DEFAULT_QUERY_PROGRESS_THREAD_TIMEOUT);
showRemainingLogsIfAny(stmnt);
}
if (stmnt != null) {
stmnt.close();
}
}
{code}
> BeeLine Query Log and Query Result print order is not defined
> -------------------------------------------------------------
>
> Key: HIVE-17158
> URL: https://issues.apache.org/jira/browse/HIVE-17158
> Project: Hive
> Issue Type: Bug
> Components: Beeline, Testing Infrastructure
> Affects Versions: 3.0.0
> Reporter: Peter Vary
> Assignee: Peter Vary
>
> The output of the BeeLine tests is sometimes flaky, especially if the query is a fast one
> The output is sometime this:
> {code}
> PREHOOK: query: select explode(array('a', 'b'))
> PREHOOK: type: QUERY
> PREHOOK: Input: _dummy_database@_dummy_table
> #### A masked pattern was here ####
> POSTHOOK: query: select explode(array('a', 'b'))
> POSTHOOK: type: QUERY
> POSTHOOK: Input: _dummy_database@_dummy_table
> #### A masked pattern was here ####
> a
> b
> {code}
> Sometime this:
> {code}
> a
> b
> PREHOOK: query: select explode(array('a', 'b'))
> PREHOOK: type: QUERY
> PREHOOK: Input: _dummy_database@_dummy_table
> #### A masked pattern was here ####
> POSTHOOK: query: select explode(array('a', 'b'))
> POSTHOOK: type: QUERY
> POSTHOOK: Input: _dummy_database@_dummy_table
> #### A masked pattern was here ####
> {code}
> Notice, that the actual query result is either before, or after the stuff printed by the hooks.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)