hive-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Chaoyu Tang (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HIVE-14799) Query operation are not thread safe during its cancellation
Date Wed, 05 Oct 2016 16:52:20 GMT

    [ https://issues.apache.org/jira/browse/HIVE-14799?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15549296#comment-15549296
] 

Chaoyu Tang commented on HIVE-14799:
------------------------------------

This patch is going to fix a couple of Driver issues related to the close request from a thread
other than the one running the query (e.g. from SQLOperation cancel via Timeout or Ctrl-C):
1. Driver is not thread safe and usually supports only one thread at time since it has variables
like ctx, plan which are not thread protected. But certain special use cases need access the
Driver objects from multiply threads. For example, when a query runs in a background thread,
driver.close is invoked in another thread by the query timeout (see HIVE-4924). The close
process could nullify the shared variables like ctx which could cause NPE in the other query
thread which is using them. This runtime exception is unpredictable and not well handled in
the code. Some resources (e.g. locks, files) are left behind and not be cleaned because there
are no more available = references to them.  In this patch, I use the waiting in the close
which makes sure only one thread uses these variables and the resource cleaning happens after
the query finished (or interrupted).
2. SQLOperation.cancel sends the interrupt signal to the background thread running the query
(via backgroundHandle.cancel(true)) but it could not stop that process since there is no code
to capture the signal in the process. In another word, current timeout code could not gracefully
and promptly stop the query process, though it could eventually stop the process by killing
the running tasks (e.g. MapRedTask) via driverContext.shutdown (see HIVE-5901). So in the
patch,  I added a couple of checkpoints to intercept the interrupt signal either set by close
method (a volatile variable) or thread.interrupt. They should be helpful to capture these
signals earlier , though not intermediately.
[~vgumashta], [~sershe], [~ychena], you have done the related work before, could you review
the patch to see if it makes sense? Thanks

> Query operation are not thread safe during its cancellation
> -----------------------------------------------------------
>
>                 Key: HIVE-14799
>                 URL: https://issues.apache.org/jira/browse/HIVE-14799
>             Project: Hive
>          Issue Type: Bug
>          Components: HiveServer2
>            Reporter: Chaoyu Tang
>            Assignee: Chaoyu Tang
>         Attachments: HIVE-14799.patch
>
>
> When a query is cancelled either via Beeline (Ctrl-C) or API call TCLIService.Client.CancelOperation,
SQLOperation.cancel is invoked in a different thread from that running the query to close/destroy
its encapsulated Driver object. Both SQLOperation and Driver are not thread-safe which could
sometimes result in Runtime exceptions like NPE. The errors from the running query are not
handled properly therefore probably causing some stuffs (files, locks etc) not being cleaned
after the query termination.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message