Enis Soztutar created HBASE-16525:
-------------------------------------

             Summary: [2.0] Cell timestamps can be assigned out of order with 
sequenceId
                 Key: HBASE-16525
                 URL: https://issues.apache.org/jira/browse/HBASE-16525
             Project: HBase
          Issue Type: Bug
            Reporter: Enis Soztutar
             Fix For: 2.0.0


While working on something else, noticed that in 2.0, we can end up with 
assigning timestamps out of order of sequenceId for the same row, thus ending 
with a case that a "later" mutation will not be visible due to an earlier 
mutation with a lower sequenceId. This can happen only in 2.0 code bases where 
we have the read-write lock based rowlocks. In 1.x, due to row locks being 
exclusive, we always order the cell timestamps in order of sequenceIds. 

In HRegion.doMiniBatchMutate(), step 2 is to assign cell timestamps: 

{code}
      // STEP 2. Update any LATEST_TIMESTAMP timestamps
      // We should record the timestamp only after we have acquired the rowLock,
      // otherwise, newer puts/deletes are not guaranteed to have a newer 
timestamp
{code}

If two transactions that modify the same row starts concurrently, and t1 
executes step 2 first, while t2 gets the sequenceId first, we can end up with 
two transactions where t1 has higher timestamp but lower seqId, and t2 lower 
timestamp but higher seqId. 

Not sure how big a problem is this. One can say that the "order" of 
transactions is the order they execute step 2 (assign cell timestamps) rather 
than assign sequenceIds.  

[[email protected]] , [~eclark] FYI. 




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

Reply via email to