summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/access/gin/ginxlog.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/src/backend/access/gin/ginxlog.c b/src/backend/access/gin/ginxlog.c
index 2344ec25bc..de0a2ed796 100644
--- a/src/backend/access/gin/ginxlog.c
+++ b/src/backend/access/gin/ginxlog.c
@@ -650,25 +650,24 @@ ginRedoDeleteListPages(XLogRecPtr lsn, XLogRecord *record)
PageSetTLI(metapage, ThisTimeLineID);
MarkBufferDirty(metabuffer);
+ /*
+ * No full-page images are taken of the deleted pages. Instead, they are
+ * re-initialized as empty, deleted pages.
+ */
for (i = 0; i < data->ndeleted; i++)
{
- Buffer buffer = XLogReadBuffer(data->node, data->toDelete[i], false);
+ Buffer buffer;
+ Page page;
- if (BufferIsValid(buffer))
- {
- Page page = BufferGetPage(buffer);
-
- if (!XLByteLE(lsn, PageGetLSN(page)))
- {
- GinPageGetOpaque(page)->flags = GIN_DELETED;
+ buffer = XLogReadBuffer(data->node, data->toDelete[i], true);
+ page = BufferGetPage(buffer);
+ GinInitBuffer(buffer, GIN_DELETED);
- PageSetLSN(page, lsn);
- PageSetTLI(page, ThisTimeLineID);
- MarkBufferDirty(buffer);
- }
+ PageSetLSN(page, lsn);
+ PageSetTLI(page, ThisTimeLineID);
+ MarkBufferDirty(buffer);
- UnlockReleaseBuffer(buffer);
- }
+ UnlockReleaseBuffer(buffer);
}
UnlockReleaseBuffer(metabuffer);
}