Dump combocid message to dynamic shared memory instead of BufFile
For write-gang and read-gang combocid synchronization, I remove
BufFile code and replace it with dynamic shared memory.
- Remove the combocids array from SharedLocalSnapshotSlot. Always rely on
the array sharing mechanism in combocid.c.
- Revert comboCids array to the way it is in the upstream; remove 'xmin'
field.
- Remove the changes to assertions referring to MPP-8317. As far as I can
see, QE reader processed need to always have a correct view of all their
"current" transactions, whether or not you're running a cursor. We
were not consistent with relaxing those assertions, we had relaxed the
one in HeapTupleHeaderGetCmax(), for example, but not the one in
HeapTupleHeaderGetCmin(). The relaxations must have become obsolete
somewhere along the line.
- In the DSM segment, use the same array format as in the backend-private
comboCids array. Rename and move things around to make it more explicit
that the shared array is a copy of the backend-private comboCids array.
- Improve the dsm_attach() retry logic. We can detect the case that
dsm_attach() fails because the QE writer process reallocated a new DSM
segment, so check for that explicitly, remove the sleeps, and throw an
error on other failures.
Co-authored-by: NHeikki Linnakangas <hlinnakangas@pivotal.io>
Showing
想要评论请 注册 或 登录