• Heikki Linnakangas's avatar
    SSI has a race condition, where the order of commit sequence numbers of · 406d6183
    Heikki Linnakangas authored
    transactions might not match the order the work done in those transactions
    become visible to others. The logic in SSI, however, assumed that it does.
    Fix that by having two sequence numbers for each serializable transaction,
    one taken before a transaction becomes visible to others, and one after it.
    This is easier than trying to make the the transition totally atomic, which
    would require holding ProcArrayLock and SerializableXactHashLock at the same
    time. By using prepareSeqNo instead of commitSeqNo in a few places where
    commit sequence numbers are compared, we can make those comparisons err on
    the safe side when we don't know for sure which committed first.
    
    Per analysis by Kevin Grittner and Dan Ports, but this approach to fix it
    is different from the original patch.
    406d6183
predicate_internals.h 17.5 KB