Github user ohadshacham commented on a diff in the pull request:

    https://github.com/apache/incubator-omid/pull/46#discussion_r223975170
  
    --- Diff: 
hbase-client/src/main/java/org/apache/omid/transaction/SnapshotFilterImpl.java 
---
    @@ -181,22 +179,44 @@ public CommitTimestamp locateCellCommitTimestamp(long 
cellStartTimestamp, long e
     
                 // 2) Then check the commit table
                 // If the data was written at a previous epoch, check whether 
the transaction was invalidated
    -            Optional<CommitTimestamp> commitTimeStamp = 
commitTableClient.getCommitTimestamp(cellStartTimestamp).get();
    -            if (commitTimeStamp.isPresent()) {
    -                return commitTimeStamp.get();
    +            boolean invalidatedByOther = false;
    +            Optional<CommitTimestamp> commitTimestampFromCT = 
commitTableClient.getCommitTimestamp(cellStartTimestamp).get();
    +            if (commitTimestampFromCT.isPresent()) {
    +                if (isLowLatency && !commitTimestampFromCT.get().isValid())
    +                    invalidatedByOther = true;
    +                else
    +                    return commitTimestampFromCT.get();
                 }
     
                 // 3) Read from shadow cell
    -            commitTimeStamp = 
readCommitTimestampFromShadowCell(cellStartTimestamp, locator);
    +            Optional<CommitTimestamp> commitTimeStamp = 
readCommitTimestampFromShadowCell(cellStartTimestamp, locator);
                 if (commitTimeStamp.isPresent()) {
                     return commitTimeStamp.get();
                 }
     
    +            // In case of LL, if found invalid ct cell, still must check 
sc in stage 3 then return
    +            if (invalidatedByOther) {
    +                assert(!commitTimestampFromCT.get().isValid());
    +                return commitTimestampFromCT.get();
    +            }
    +
                 // 4) Check the epoch and invalidate the entry
                 // if the data was written by a transaction from a previous 
epoch (previous TSO)
    -            if (cellStartTimestamp < epoch) {
    +            if (cellStartTimestamp < epoch || isLowLatency) {
                     boolean invalidated = 
commitTableClient.tryInvalidateTransaction(cellStartTimestamp).get();
                     if (invalidated) { // Invalid commit timestamp
    +
    +                    // If we are running lowLatency Omid, we could have 
manged to invalidate a ct entry,
    +                    // but the committing client already wrote to shadow 
cells:
    --- End diff --
    
    This can happen only in low latency mode, since in the regular mode the 
client keeps the commit table entry if persisting the commit was done after the 
tso lost its lease.


---

Reply via email to