diff options
author | Amit Kapila <akapila@postgresql.org> | 2024-02-07 11:10:12 +0530 |
---|---|---|
committer | Amit Kapila <akapila@postgresql.org> | 2024-02-07 11:10:12 +0530 |
commit | aa5edbe379d645e980f927b01379bdad9bc6c295 (patch) | |
tree | de37447b6c81d32dbe72dfac36aff6bab5e82590 | |
parent | 22f7e61a63306873211e26c7bac9c68631309aef (diff) | |
download | postgresql-aa5edbe379d645e980f927b01379bdad9bc6c295.tar.gz postgresql-aa5edbe379d645e980f927b01379bdad9bc6c295.zip |
Set LSN for wbuf in _hash_freeovflpage() iff wbuf is modified.
Commit 861f86beea used REGBUF_NO_CHANGE at one of the places in the hash
index to register the clean buffers but forgot to avoid setting LSN in
that case.
Reported-by: Michael Paquier
Author: Kuroda Hayato
Reviewed-by: Amit Kapila, Michael Paquier
Discussion: https://postgr.es/m/ZbyVVG_7eW3YD5-A@paquier.xyz
-rw-r--r-- | src/backend/access/hash/hashovfl.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/backend/access/hash/hashovfl.c b/src/backend/access/hash/hashovfl.c index b512d0bcb66..c280ae885e3 100644 --- a/src/backend/access/hash/hashovfl.c +++ b/src/backend/access/hash/hashovfl.c @@ -647,6 +647,7 @@ _hash_freeovflpage(Relation rel, Buffer bucketbuf, Buffer ovflbuf, xl_hash_squeeze_page xlrec; XLogRecPtr recptr; int i; + bool mod_wbuf = false; xlrec.prevblkno = prevblkno; xlrec.nextblkno = nextblkno; @@ -671,6 +672,10 @@ _hash_freeovflpage(Relation rel, Buffer bucketbuf, Buffer ovflbuf, if (xlrec.ntups > 0) { XLogRegisterBuffer(1, wbuf, REGBUF_STANDARD); + + /* Remember that wbuf is modified. */ + mod_wbuf = true; + XLogRegisterBufData(1, (char *) itup_offsets, nitups * sizeof(OffsetNumber)); for (i = 0; i < nitups; i++) @@ -690,7 +695,14 @@ _hash_freeovflpage(Relation rel, Buffer bucketbuf, Buffer ovflbuf, wbuf_flags = REGBUF_STANDARD; if (!xlrec.is_prev_bucket_same_wrt) + { wbuf_flags |= REGBUF_NO_CHANGE; + } + else + { + /* Remember that wbuf is modified. */ + mod_wbuf = true; + } XLogRegisterBuffer(1, wbuf, wbuf_flags); } @@ -719,7 +731,10 @@ _hash_freeovflpage(Relation rel, Buffer bucketbuf, Buffer ovflbuf, recptr = XLogInsert(RM_HASH_ID, XLOG_HASH_SQUEEZE_PAGE); - PageSetLSN(BufferGetPage(wbuf), recptr); + /* Set LSN iff wbuf is modified. */ + if (mod_wbuf) + PageSetLSN(BufferGetPage(wbuf), recptr); + PageSetLSN(BufferGetPage(ovflbuf), recptr); if (BufferIsValid(prevbuf) && !xlrec.is_prev_bucket_same_wrt) |