Improve comments for [Heap]CheckForSerializableConflictOut().

Rewrite the documentation of these functions, in light of recent bug fix
commit 5940ffb2.

Back-patch to 13 where the check-for-conflict-out code was split up into
AM-specific and generic parts, and new documentation was added that now
looked wrong.

Reviewed-by: Peter Geoghegan <pg@bowt.ie>
Discussion: https://postgr.es/m/db7b729d-0226-d162-a126-8a8ab2dc4443%40jepsen.io
This commit is contained in:
Thomas Munro 2020-06-12 10:44:32 +12:00
parent 59fa7eb603
commit 7aa4fb5925
2 changed files with 14 additions and 13 deletions

View File

@ -8975,15 +8975,13 @@ heap_mask(char *pagedata, BlockNumber blkno)
/* /*
* HeapCheckForSerializableConflictOut * HeapCheckForSerializableConflictOut
* We are reading a tuple which has been modified. If it is visible to * We are reading a tuple. If it's not visible, there may be a
* us but has been deleted, that indicates a rw-conflict out. If it's * rw-conflict out with the inserter. Otherwise, if it is visible to us
* not visible and was created by a concurrent (overlapping) * but has been deleted, there may be a rw-conflict out with the deleter.
* serializable transaction, that is also a rw-conflict out,
* *
* We will determine the top level xid of the writing transaction with which * We will determine the top level xid of the writing transaction with which
* we may be in conflict, and check for overlap with our own transaction. * we may be in conflict, and ask CheckForSerializableConflictOut() to check
* If the transactions overlap (i.e., they cannot see each other's writes), * for overlap with our own transaction.
* then we have a conflict out.
* *
* This function should be called just about anywhere in heapam.c where a * This function should be called just about anywhere in heapam.c where a
* tuple has been read. The caller must hold at least a shared lock on the * tuple has been read. The caller must hold at least a shared lock on the

View File

@ -4037,13 +4037,16 @@ CheckForSerializableConflictOutNeeded(Relation relation, Snapshot snapshot)
/* /*
* CheckForSerializableConflictOut * CheckForSerializableConflictOut
* A table AM is reading a tuple that has been modified. After determining * A table AM is reading a tuple that has been modified. If it determines
* that it is visible to us, it should call this function with the top * that the tuple version it is reading is not visible to us, it should
* level xid of the writing transaction. * pass in the top level xid of the transaction that created it.
* Otherwise, if it determines that it is visible to us but it has been
* deleted or there is a newer version available due to an update, it
* should pass in the top level xid of the modifying transaction.
* *
* This function will check for overlap with our own transaction. If the * This function will check for overlap with our own transaction. If the given
* transactions overlap (i.e., they cannot see each other's writes), then we * xid is also serializable and the transactions overlap (i.e., they cannot see
* have a conflict out. * each other's writes), then we have a conflict out.
*/ */
void void
CheckForSerializableConflictOut(Relation relation, TransactionId xid, Snapshot snapshot) CheckForSerializableConflictOut(Relation relation, TransactionId xid, Snapshot snapshot)