- 
    Type:Bug 
- 
    Resolution: Duplicate
- 
    Priority:Major - P3 
- 
    None
- 
    Affects Version/s: None
- 
    Component/s: None
- 
    None
- 
        None
- 
        None
                /*
                 * Loop until a valid update from a different transaction is found in the update
                 * list.
                 */
                while (upd->next != NULL) {
                    if (upd->next->txnid == WT_TXN_ABORTED)
                        upd = upd->next;
                    else if (upd->next->txnid != WT_TXN_NONE &&
                      tombstone->txnid == upd->next->txnid) {
                        upd = upd->next;
                        /* Save the latest update from the same transaction. */
                        if (same_txn_valid_upd == NULL)
                            same_txn_valid_upd = upd;
                    } else
                        break;
                }
The above code squashes the updates on the same key from the same transaction if the newest update of the transaction is a tombstone. For example:
T@txn10 -> U@txn10 -> U@txn8
We will write T@txn10 as the stop time point and U@txn8 to the data store. However, we don't consider the case that T@txn10 may have a different timestamp to U@txn10. In this case, we shouldn't squash the transaction.
T@(txn10, ts 100) -> U@(txn10, ts 80) -> U@(txn8, ts 60)
We should write T@(txn10, ts 100) as the stop time point, U@(txn10, ts 80) to the data store, and U@(txn8, ts 60) to the history store. Because if we read with ts 90, we should see U@(txn10, ts 80) instead of U@(txn8, ts 60).