postgresql/src/include/access
Andres Freund eca0f1db14 Clear all-frozen visibilitymap status when locking tuples.
Since a892234 & fd31cd265 the visibilitymap's freeze bit is used to
avoid vacuuming the whole relation in anti-wraparound vacuums. Doing so
correctly relies on not adding xids to the heap without also unsetting
the visibilitymap flag.  Tuple locking related code has not done so.

To allow selectively resetting all-frozen - to avoid pessimizing
heap_lock_tuple - allow to selectively reset the all-frozen with
visibilitymap_clear(). To avoid having to use
visibilitymap_get_status (e.g. via VM_ALL_FROZEN) inside a critical
section, have visibilitymap_clear() return whether any bits have been
reset.

There's a remaining issue (denoted by XXX): After the PageIsAllVisible()
check in heap_lock_tuple() and heap_lock_updated_tuple_rec() the page
status could theoretically change. Practically that currently seems
impossible, because updaters will hold a page level pin already.  Due to
the next beta coming up, it seems better to get the required WAL magic
bump done before resolving this issue.

The added flags field fields to xl_heap_lock and xl_heap_lock_updated
require bumping the WAL magic. Since there's already been a catversion
bump since the last beta, that's not an issue.

Reviewed-By: Robert Haas, Amit Kapila and Andres Freund
Author: Masahiko Sawada, heavily revised by Andres Freund
Discussion: CAEepm=3fWAbWryVW9swHyLTY4sXVf0xbLvXqOwUoDiNCx9mBjQ@mail.gmail.com
Backpatch: -
2016-07-18 02:01:13 -07:00
..
amapi.h Revert CREATE INDEX ... INCLUDING ... 2016-04-08 21:52:13 +03:00
amvalidate.h Improve index AMs' opclass validation procedures. 2016-01-21 19:47:15 -05:00
attnum.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
brin.h Restructure index access method API to hide most of it at the C level. 2016-01-17 19:36:59 -05:00
brin_internal.h Restructure index access method API to hide most of it at the C level. 2016-01-17 19:36:59 -05:00
brin_page.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
brin_pageops.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
brin_revmap.h Add the "snapshot too old" feature 2016-04-08 14:36:30 -05:00
brin_tuple.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
brin_xlog.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
clog.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
commit_ts.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
genam.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
generic_xlog.h Improve API of GenericXLogRegister(). 2016-04-12 11:42:06 -04:00
gin.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
gin_private.h Prevent multiple cleanup process for pending list in GIN. 2016-04-28 16:21:42 +03:00
gist.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
gist_private.h Remove unused arguments in two GiST subroutines 2016-06-28 16:01:13 -04:00
gistscan.h Restructure index access method API to hide most of it at the C level. 2016-01-17 19:36:59 -05:00
hash.h Fix building of large (bigger than shared_buffers) hash indexes. 2016-06-24 16:57:36 -04:00
heapam.h Change the format of the VM fork to add a second bit per page. 2016-03-01 21:49:41 -05:00
heapam_xlog.h Clear all-frozen visibilitymap status when locking tuples. 2016-07-18 02:01:13 -07:00
hio.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
htup.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
htup_details.h Fix handling of multixacts predating pg_upgrade 2016-06-24 18:29:28 -04:00
itup.h Revert CREATE INDEX ... INCLUDING ... 2016-04-08 21:52:13 +03:00
multixact.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
nbtree.h pgindent run for 9.6 2016-06-09 18:02:36 -04:00
parallel.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
printtup.h Stop the executor if no more tuples can be sent from worker to leader. 2016-06-06 14:52:58 -04:00
reloptions.h Restructure index access method API to hide most of it at the C level. 2016-01-17 19:36:59 -05:00
relscan.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
rewriteheap.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
rmgr.h Add rmgr callback to name xlog record types for display purposes. 2014-09-19 16:20:29 +02:00
rmgrlist.h Generic Messages for Logical Decoding 2016-04-06 10:05:41 +01:00
sdir.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
skey.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
slru.h Make all built-in lwlock tranche IDs fixed. 2016-02-02 06:45:55 -05:00
spgist.h Introduce traversalValue for SP-GiST scan 2016-03-30 18:29:28 +03:00
spgist_private.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
stratnum.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
subtrans.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
sysattr.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
timeline.h pgindent run for 9.6 2016-06-09 18:02:36 -04:00
transam.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
tsmapi.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
tupconvert.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
tupdesc.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
tupmacs.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
tuptoaster.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
twophase.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
twophase_rmgr.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
valid.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
visibilitymap.h Clear all-frozen visibilitymap status when locking tuples. 2016-07-18 02:01:13 -07:00
xact.h Add new replication mode synchronous_commit = 'remote_apply'. 2016-03-29 21:29:49 -04:00
xlog.h pgindent run for 9.6 2016-06-09 18:02:36 -04:00
xlog_fn.h Implement backup API functions for non-exclusive backups 2016-04-05 20:03:49 +02:00
xlog_internal.h Clear all-frozen visibilitymap status when locking tuples. 2016-07-18 02:01:13 -07:00
xlogdefs.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
xloginsert.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
xlogreader.h Revert timeline following in replication slots 2016-05-04 17:32:22 -03:00
xlogrecord.h Update copyright for 2016 2016-01-02 13:33:40 -05:00
xlogutils.h XLogReader general code cleanup 2016-03-30 18:56:13 -03:00