Details
-
Bug
-
Status: Open
-
Minor
-
Resolution: Unresolved
-
Impala 1.4
-
None
Description
I've been told that if the user cancels the query, our intention is to not set query_state to EXCEPTION. (Is that the desired behavior?) Adding a test case to test_cancellation.py as follows, shows that this is not the current behavior (at least not in all circumstances).
--- a/tests/query_test/test_cancellation.py +++ b/tests/query_test/test_cancellation.py @@ -102,6 +102,7 @@ class TestCancellation(ImpalaTestSuite): sleep(vector.get_value('cancel_delay')) assert self.client.get_state(handle) != self.client.QUERY_STATES['EXCEPTION'] cancel_result = self.client.cancel(handle) + assert self.client.get_state(handle) != self.client.QUERY_STATES['EXCEPTION'] assert cancel_result.status_code == 0,\ 'Unexpected status code from cancel request: %s' % cancel_result thread.join()
One example of how this can happen is if the cancel happens while the wait thread is still in WaitInternal, then WaitInternal will return Status::CANCELLED, and UpdateQueryStatus indiscriminately sets query_state_ to EXCEPTION if !ok(). But, I don't think that side of the execution can distinguish between user initiated cancel and error initiated cancel. Probably, QueryExecState::Cancel needs to remember which kind of cancellation it was so that the cancelled side can do the right thing.
We don't have a general workaround.
Attachments
Issue Links
- is duplicated by
-
IMPALA-2371 Query state/status of cancelled query is reported as FINISHED/OK
- Resolved
- is related to
-
IMPALA-8411 A race during query cancellation by a client can make the client see it as still running
- Open
-
IMPALA-4714 Idle session expired query goes in to exception state - And this is confusing
- Resolved
-
IMPALA-7561 Expired queries should end up in a consistent state (EXCEPTION, CANCELLED, or something else)
- Open
- relates to
-
IMPALA-6614 ClientRequestState should use HS2 TOperationState states rather than Beeswax QueryState
- Resolved