Hi, On 2019-06-24 10:41:06 -0700, Ashwin Agrawal wrote: > Proposing following changes to make predicate locking and checking > functions generic and remove dependency on HeapTuple and Heap AM. We > made these changes to help with Zedstore. I think the changes should > help Zheap and other AMs in general.
Indeed. > - Change PredicateLockTuple() to PredicateLockTID(). So, instead of > passing HeapTuple to it, just pass ItemPointer and tuple insert > transaction id if known. This was also discussed earlier in [1], > don't think was done in that context but would be helpful in future > if such requirement comes up as well. Right. > - CheckForSerializableConflictIn() take blocknum instead of > buffer. Currently, the function anyways does nothing with the buffer > just needs blocknum. Also, helps to decouple dependency on buffer as > not all AMs may have one to one notion between blocknum and single > buffer. Like for zedstore, tuple is stored across individual column > buffers. So, wish to have way to lock not physical buffer but > logical blocknum. Hm. I wonder if we somehow ought to generalize the granularity scheme for predicate locks to not be tuple/page/relation. But even if, that's probably a separate patch. > - CheckForSerializableConflictOut() no more takes HeapTuple nor > buffer, instead just takes xid. Push heap specific parts from > CheckForSerializableConflictOut() into its own function > HeapCheckForSerializableConflictOut() which calls > CheckForSerializableConflictOut(). The alternative option could be > CheckForSerializableConflictOut() take callback function and > callback arguments, which gets called if required after performing > prechecks. Though currently I fell AM having its own wrapper to > perform AM specific task and then calling > CheckForSerializableConflictOut() is fine. I think it's right to move the xid handling out of CheckForSerializableConflictOut(). But I think we also ought to move the subtransaction handling out of the function - e.g. zheap doesn't want/need that. > Attaching patch which makes these changes. Please make sure that there's a CF entry for this (I'm in a plane with a super slow connection, otherwise I'd check). Greetings, Andres Freund