[ https://issues.apache.org/jira/browse/HIVE-7615?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14141866#comment-14141866 ]
Thejas M Nair commented on HIVE-7615: ------------------------------------- Thanks for the new patch and pointing out the issue with just having a single isRunning boolean. I have some more comments/thoughts - # I think we should avoid throwing exceptions in the normal code path, as Brock pointed out. (getQueryLog throwing exception when statementHandle is not initialized) # getQueryLog should throw an exception when the Statement is cancelled or closed. I think this is the state that needs to be captured (canceled/closed vs pre-initalization). For the getQueryLog api, it not matter if the query succeeded or failed. # It would be useful to have a way to determine if there are not going to be any more logs being logged. In current implementation, once execute call returns, the execution is over and all logs have been written. The user can stop making calls at that point. # The current code does not guarantee that the last few lines of logs (which indicate success) would be picked up. The logging thread could be sleeping while query completes and interrupt might happen before it is able to make another getQueryLog. This can be confusing to a beeline user. # HiveQueryResultSet does not lock calls to client using the transportLock . This means that the getQueryLog and HiveQueryResultSet.next might end up using the client object at same time, causing problems. {code} /** * This method is a public API for usage outside of Hive, although it is not part of the * interface java.sql.Statement. * @return true if query execution might be producing more logs. It does not indicate if last log lines have been fetched by getQueryLog. * @throws ClosedOrCancelledStatement if statement has been cancelled or closed */ boolean hasMoreLogs() throws ClosedOrCancelledStatement; /** * Get the execution logs of the given SQL statement. * This method is a public API for usage outside of Hive, although it is not part of the * interface java.sql.Statement. * @param incremental indicate getting logs either incrementally or from the beginning, * when it is true or false. * @param fetchSize the number of lines to fetch * @return a list of log messages. It can be empty if there are no new logs to be retrieved at that time. * @throws ClosedOrCancelledStatement if statement has been cancelled or closed * @throws SQLException */ public List<String> getQueryLog(boolean incremental, int fetchSize) throws ClosedOrCancelledStatement, SQLException {code} The code for retrieving the logs can simply be - {code} new Runnable () { public void run() { while(stmt.hasMoreLogs()) { printProgress(stmt.getQueryLog(true, 50)); try { Thread.sleep(1000); } catch(InterruptedException e) { return; } } } {code} The mainline code using jdbc can on the lines of - {code} stmt.execute(); // get results // before closing statement, interrupt the thread. logThread.interrupt(); // get any last lines of log synchronously before closing statement stmt.close(); // or resultSet.close() {code} volatile boolean closedStmt = false; // set this to true when HiveStatement.closeClientOperation is called volatile boolean isLogBeingGenerated = true; // set this to false when the " while (!operationComplete) {" loop is complete, or an exception is thrown in that loop. in getQueryLog, the check that is there for stmtHandle == null can be changed to throw ClosedOrCancelledStatement only if stmtHandle == null && closedStmt hasMoreLogs can return the value of isLogBeingGenerated Sorry about the large number of comments. Creating a public api is a big commitment, just trying to make sure it is possible to stay committed! Thats for all the work you have done. > Beeline should have an option for user to see the query progress > ---------------------------------------------------------------- > > Key: HIVE-7615 > URL: https://issues.apache.org/jira/browse/HIVE-7615 > Project: Hive > Issue Type: Improvement > Components: CLI > Reporter: Dong Chen > Assignee: Dong Chen > Attachments: HIVE-7615.1.patch, HIVE-7615.2.patch, HIVE-7615.patch, > complete_logs, simple_logs > > > When executing query in Beeline, user should have a option to see the > progress through the outputs. > Beeline could use the API introduced in HIVE-4629 to get and display the logs > to the client. -- This message was sent by Atlassian JIRA (v6.3.4#6332)