1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-19 13:42:17 +03:00

Let caller of PageIsVerified() control ignore_checksum_failure

For AIO the completion of a read into shared buffers (i.e. verifying the page
including the checksum, updating the BufferDesc to reflect the IO) can happen
in a different backend than the backend that started the IO. As
ignore_checksum_failure can differ between backends, we need to allow the
caller of PageIsVerified() control whether to ignore checksum failures.

The commit leaves a gap in the PIV_* values, as an upcoming commit, which
depends on this commit, will add PIV_LOG_LOG, which better fits just after
PIV_LOG_WARNING.

Reviewed-by: Noah Misch <noah@leadboat.com>
Discussion: https://postgr.es/m/20250329212929.a6.nmisch@google.com
This commit is contained in:
Andres Freund
2025-03-30 16:10:51 -04:00
parent b96d3c3897
commit d445990adc
4 changed files with 17 additions and 5 deletions

View File

@@ -1569,6 +1569,7 @@ WaitReadBuffers(ReadBuffersOperation *operation)
{
BufferDesc *bufHdr;
Block bufBlock;
int piv_flags;
bool verified;
bool checksum_failure;
@@ -1584,8 +1585,11 @@ WaitReadBuffers(ReadBuffersOperation *operation)
}
/* check for garbage data */
piv_flags = PIV_LOG_WARNING;
if (ignore_checksum_failure)
piv_flags |= PIV_IGNORE_CHECKSUM_FAILURE;
verified = PageIsVerified((Page) bufBlock, io_first_block + j,
PIV_LOG_WARNING, &checksum_failure);
piv_flags, &checksum_failure);
if (checksum_failure)
{
RelFileLocatorBackend rloc = operation->smgr->smgr_rlocator;