You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Eugene Koifman (JIRA)" <ji...@apache.org> on 2018/04/05 18:30:00 UTC

[jira] [Comment Edited] (HIVE-17647) DDLTask.generateAddMmTasks(Table tbl) and other random code should not start transactions

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

Eugene Koifman edited comment on HIVE-17647 at 4/5/18 6:29 PM:
---------------------------------------------------------------

In DDLTask
{noformat}
if (writeId == null) {
	      throw new HiveException("Internal error - write ID not set for MM conversion"); 
 }
 could this include table name or path
{noformat}

Could you add a test to check that X lock is actually acquired?  (TestDbTxnManager2) I'm not sure {{ddlWork.setNeedLock(true);}} will do anything.  LM relies on WriteEntity with WriteType.DD_EXCLUSIVE to get X lock...

Also, I don't any .q tests check that the data lands in the right place, i.e. into a delta.  that would be useful.


was (Author: ekoifman):
In DDLTask
{noformat}
if (writeId == null) {
	      throw new HiveException("Internal error - write ID not set for MM conversion"); 
 }
 could this include table name or path
{noformat}

Could you add a test to check that X lock is actually acquired?  (TestDbTxnManager2) I'm not sure {{ddlWork.setNeedLock(true);}} will do anything.  LM relies on WriteEntity with WriteType.DD_EXCLUSIVE to get X lock...


> DDLTask.generateAddMmTasks(Table tbl) and other random code should not start transactions
> -----------------------------------------------------------------------------------------
>
>                 Key: HIVE-17647
>                 URL: https://issues.apache.org/jira/browse/HIVE-17647
>             Project: Hive
>          Issue Type: Sub-task
>          Components: Transactions
>            Reporter: Eugene Koifman
>            Assignee: Sergey Shelukhin
>            Priority: Major
>              Labels: mm-gap-2
>         Attachments: HIVE-17647.patch
>
>
> This method (and other places) have 
> {noformat}
>       if (txnManager.isTxnOpen()) {
>         mmWriteId = txnManager.getCurrentTxnId();
>       } else {
>         mmWriteId = txnManager.openTxn(new Context(conf), conf.getUser());
>         txnManager.commitTxn();
>       }
> {noformat}
> this should throw if there is no open transaction.  It should never open one.
> In general the logic seems suspect.  Looks like the intent is to move all existing files into a delta_x_x/ when a plain table is converted to MM table.  This seems like something that needs to be done from under an Exclusive lock to prevent concurrent Insert operations writing data under table/partition root.  But this is too late to acquire locks which should be done from the Driver.acquireLocks()  (or else have deadlock detector since acquiring them here would bread all-or-nothing lock acquisition semantics currently required w/o deadlock detector)



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)