You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues-all@impala.apache.org by "Sahil Takiar (Jira)" <ji...@apache.org> on 2019/09/02 22:47:00 UTC
[jira] [Commented] (IMPALA-558) HS2::FetchResults sets hasMoreRows
in many cases where no more rows are to be returned
[ https://issues.apache.org/jira/browse/IMPALA-558?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16921071#comment-16921071 ]
Sahil Takiar commented on IMPALA-558:
-------------------------------------
The frequency of this issue should be significantly reduced when result spooling is enabled. The call to {{BufferedPlanRootSink::Send}} no longer blocks waiting for a corresponding call to {{GetNext}}, so {{FlushFinal}} is called immediately after sending the last batch.
However, even with result spooling, the issue could still occur because {{Send}} releases the lock and then {{FlushFinal}} re-acquires it before setting the sender state. So it is possible that the client calls {{GetNext}} before {{FlushFinal}} can set the state to EOS.
This could be fixed by re-factoring the {{PlanRootSink}} interface so that {{Send}} takes in an {{eos}} flag. This would allow {{Send}} to know if the batch being sent, is the last one. It could then set the {{sender_state_}} flag. However, I'm not sure its worth the effort.
> HS2::FetchResults sets hasMoreRows in many cases where no more rows are to be returned
> --------------------------------------------------------------------------------------
>
> Key: IMPALA-558
> URL: https://issues.apache.org/jira/browse/IMPALA-558
> Project: IMPALA
> Issue Type: Sub-task
> Components: Clients
> Affects Versions: Impala 1.1
> Reporter: Henry Robinson
> Priority: Minor
> Labels: query-lifecycle
>
> The first call to {{FetchResults}} always sets {{hasMoreRows}} even when 0 rows should be returned. The next call correctly sets {{hasMoreRows == False}}. The upshot is there's always an extra round-trip, although correctness isn't affected.
> {code}
> execute_statement_req = TCLIService.TExecuteStatementReq()
> execute_statement_req.sessionHandle = resp.sessionHandle
> execute_statement_req.statement = "SELECT COUNT(*) FROM functional.alltypes WHERE 1 = 2"
> execute_statement_resp = self.hs2_client.ExecuteStatement(execute_statement_req)
>
> fetch_results_req = TCLIService.TFetchResultsReq()
> fetch_results_req.operationHandle = execute_statement_resp.operationHandle
> fetch_results_req.maxRows = 100
> fetch_results_resp = self.hs2_client.FetchResults(fetch_results_req)
>
> assert not fetch_results_resp.hasMoreRows # Fails
> {code}
--
This message was sent by Atlassian Jira
(v8.3.2#803003)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-all-unsubscribe@impala.apache.org
For additional commands, e-mail: issues-all-help@impala.apache.org