[ https://issues.apache.org/jira/browse/HIVE-18864?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16397460#comment-16397460 ]
Eugene Koifman commented on HIVE-18864: --------------------------------------- I'm looking at the original (before this patch) implementation of getValidWriteIdsForTable() and I'm not sure why it's not sufficient. txnHwm is fixed for the duration of the txn. Since we recompute ValidWriteIdList for each statement of a multi-stmt txn, at step 7 in the Description, you'd see writeId=7 as it belongs to txn10 and writeId=6 would be considered invalid because it belongs to txn11 which is not isValid() for txn 10. > ValidWriteIdList snapshot seems incorrect if obtained after allocating > writeId by current transaction. > ------------------------------------------------------------------------------------------------------ > > Key: HIVE-18864 > URL: https://issues.apache.org/jira/browse/HIVE-18864 > Project: Hive > Issue Type: Sub-task > Components: Transactions > Affects Versions: 3.0.0 > Reporter: Sankar Hariappan > Assignee: Sankar Hariappan > Priority: Major > Labels: ACID, pull-request-available > Fix For: 3.0.0 > > Attachments: HIVE-18864.01.patch, HIVE-18864.02.patch > > > For multi-statement txns, it is possible that write on a table happens after > a read. Let's see the below scenario. > # Committed txn=9 writes on table T1 with writeId=5. > # Open txn=10. ValidTxnList(open:null, txn_HWM=10), > # Read table T1 from txn=10. ValidWriteIdList(open:null, write_HWM=5). > # Open txn=11, writes on table T1 with writeid=6. > # Read table T1 from txn=10. ValidWriteIdList(open:null, write_HWM=5). > # Write table T1 from txn=10 with writeId=7. > # Read table T1 from txn=10. {color:#d04437}*ValidWriteIdList(open:null, > write_HWM=7)*. – This read will able to see rows added by txn=11 which is > still open.{color} > {color:#d04437}So, it is needed to rebuild the open/aborted list of > ValidWriteIdList based on txn_HWM. Any writeId allocated by txnId > txn_HWM > should be marked as open. In this example, *ValidWriteIdList(open:6, > write_HWM=7)* should be generated.{color} > {color:#333333}cc{color} [~ekoifman], [~thejas] -- This message was sent by Atlassian JIRA (v7.6.3#76005)