postgresql/src/backend/storage
Michael Paquier c780a7a90a Add CheckBuffer() to check on-disk pages without shared buffer loading
CheckBuffer() is designed to be a concurrent-safe function able to run
sanity checks on a relation page without loading it into the shared
buffers.  The operation is done using a lock on the partition involved
in the shared buffer mapping hashtable and an I/O lock for the buffer
itself, preventing the risk of false positives due to any concurrent
activity.

The primary use of this function is the detection of on-disk corruptions
for relation pages.  If a page is found in shared buffers, the on-disk
page is checked if not dirty (a follow-up checkpoint would flush a valid
version of the page if dirty anyway), as it could be possible that a
page was present for a long time in shared buffers with its on-disk
version corrupted.  Such a scenario could lead to a corrupted cluster if
a host is plugged off for example.  If the page is not found in shared
buffers, its on-disk state is checked.  PageIsVerifiedExtended() is used
to apply the same sanity checks as when a page gets loaded into shared
buffers.

This function will be used by an upcoming patch able to check the state
of on-disk relation pages using a SQL function.

Author: Julien Rouhaud, Michael Paquier
Reviewed-by:  Masahiko Sawada
Discussion: https://postgr.es/m/CAOBaU_aVvMjQn=ge5qPiJOPMmOj5=ii3st5Q0Y+WuLML5sR17w@mail.gmail.com
2020-10-28 11:12:46 +09:00
..
buffer Add CheckBuffer() to check on-disk pages without shared buffer loading 2020-10-28 11:12:46 +09:00
file Skip unnecessary stat() calls in walkdir(). 2020-09-07 18:28:06 +12:00
freespace Cache smgrnblocks() results in recovery. 2020-07-31 14:29:52 +12:00
ipc Avoid invalid alloc size error in shm_mq 2020-10-19 08:52:25 +02:00
large_object Remove utils/acl.h from catalog/objectaddress.h 2020-03-10 10:27:00 +01:00
lmgr Defer flushing of SLRU files. 2020-09-25 19:00:15 +12:00
page Extend PageIsVerified() to handle more custom options 2020-10-26 09:55:28 +09:00
smgr remove redundant initializations 2020-09-03 22:57:35 -04:00
sync Defer flushing of SLRU files. 2020-09-25 19:00:15 +12:00
Makefile Refactor the fsync queue for wider use. 2019-04-04 23:38:38 +13:00