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

Adesh Kumar Rao commented on HIVE-24549:
----------------------------------------

[~jfs] If you are not planning to work on it, Can I assign it to myself?

> TxnManager should not be shared across queries
> ----------------------------------------------
>
>                 Key: HIVE-24549
>                 URL: https://issues.apache.org/jira/browse/HIVE-24549
>             Project: Hive
>          Issue Type: Bug
>          Components: HiveServer2
>    Affects Versions: 4.0.0
>            Reporter: John Sherman
>            Priority: Major
>
> There are various sections of code that assume the DbTxnManager is not shared 
> across concurrent queries in a session.
>  Such as (which gets invoked during closeOperation):
>  
> [https://github.com/apache/hive/blob/3f5e01cae5b65dde7edb3fbde8ebe70c1d02f6cf/ql/src/java/org/apache/hadoop/hive/ql/Driver.java#L868-L885]
> {code:java}
>    // is usually called after close() to commit or rollback a query and end 
> the driver life cycle.
>   // do not understand why it is needed and wonder if it could be combined 
> with close.
>   @Override
>   public void destroy() {
>     driverState.lock();
>     try {
>       // in the cancel case where the driver state is INTERRUPTED, destroy 
> will be deferred to
>       // the query process
>       if (driverState.isDestroyed()) {
>         return;
>       } else {
>         driverState.descroyed();
>       }
>     } finally {
>       driverState.unlock();
>     }
>     driverTxnHandler.destroy();
>   }
> {code}
> The problematic part is the: driverTxnHandler.destroy() which looks like:
> {code:java}
>  void destroy() {
>    boolean isTxnOpen =
>      driverContext != null &&
>      driverContext.getTxnManager() != null &&
>      driverContext.getTxnManager().isTxnOpen();
>    release(!hiveLocks.isEmpty() || isTxnOpen);
>  }
> {code}
> What happens is (rough sketch):
>  Q1 - starts operation, acquires txn, does operation, closes txn/cleans up 
> txn info, starts fetching data
>  Q2 - starts operation, acquire txn
>  Q1 - calls close operation which in turn calls destroy which sees the Q2s 
> transaction information and cleans it up.
>  Q2 - proceeds and fails in splitGeneration when it no longer can find its 
> Valid*TxnIdList information.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to