Skip to content

Commit 4093ff5

Browse files
committed
Store the deletion horizon XID for a deleted GIN page on the right page.
Commit b107140 moved the GinPageSetDeleteXid() call to a spot where the "page" variable was pointing to the wrong page, causing the XID to be inserted on a page that's not being deleted, thus allowing later GinPageIsRecyclable tests to recycle the deleted page too soon. It might be a good idea to stop using the single "page" variable for multiple purposes in this function. But for the moment I just moved the GinPageSetDeleteXid() call down beside the GinPageSetDeleted() call, which seems like a more logical place for it anyway. Back-patch to v11, as the faulty patch was. (Fortunately, the bug hasn't made it into any release yet.) Discussion: https://postgr.es/m/21620.1581098806@sss.pgh.pa.us
1 parent 55173d2 commit 4093ff5

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

src/backend/access/gin/ginvacuum.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,6 @@ ginDeletePage(GinVacuumState *gvs, BlockNumber deleteBlkno, BlockNumber leftBlkn
165165
page = BufferGetPage(lBuffer);
166166
GinPageGetOpaque(page)->rightlink = rightlink;
167167

168-
/* For deleted page remember last xid which could knew its address */
169-
GinPageSetDeleteXid(page, ReadNewTransactionId());
170-
171168
/* Delete downlink from parent */
172169
parentPage = BufferGetPage(pBuffer);
173170
#ifdef USE_ASSERT_CHECKING
@@ -186,7 +183,13 @@ ginDeletePage(GinVacuumState *gvs, BlockNumber deleteBlkno, BlockNumber leftBlkn
186183
* we shouldn't change rightlink field to save workability of running
187184
* search scan
188185
*/
186+
187+
/*
188+
* Mark page as deleted, and remember last xid which could know its
189+
* address.
190+
*/
189191
GinPageSetDeleted(page);
192+
GinPageSetDeleteXid(page, ReadNewTransactionId());
190193

191194
MarkBufferDirty(pBuffer);
192195
MarkBufferDirty(lBuffer);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy