From b353c4c26610e2fcdb5261de19b899dd082301fc Mon Sep 17 00:00:00 2001
From: Evgeny Voropaev <evorop@gmail.com>
Date: Thu, 30 Jan 2025 15:22:52 +0800
Subject: [PATCH v60 14/15] Removed the management of repairing fragmentation
 during a prune-freeze operarion. Fixed the bug of the XMAX_COMMITTED hint
 bit.

Author: Evgeny Voropaev <evgeny.voropaev@tantorlabs.com> <evorop@gmail.com>
Author: Sergey Solovev  <sergey.soloviev@tantorlabs.com>
---
 src/backend/access/heap/heapam.c      |  2 +-
 src/backend/access/heap/heapam_xlog.c |  1 -
 src/backend/access/heap/pruneheap.c   | 19 +++++--------------
 src/backend/access/heap/vacuumlazy.c  |  6 ++----
 src/include/access/heapam.h           |  7 ++-----
 5 files changed, 10 insertions(+), 25 deletions(-)

diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 6ac653833fa..93b6384b4a5 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -9779,7 +9779,7 @@ freeze_single_heap_page(Relation relation, Buffer buffer)
 
 	vistest = GlobalVisTestFor(relation);
 	heap_page_prune_and_freeze(relation, buffer, vistest, HEAP_PAGE_PRUNE_FREEZE,
-									NULL, &presult, PRUNE_ON_ACCESS, &offnum, &new_relfrozen_xid, &new_relmin_mxid, false);
+									NULL, &presult, PRUNE_ON_ACCESS, &offnum, &new_relfrozen_xid, &new_relmin_mxid);
 
 	if (presult.ndeleted > presult.nnewlpdead)
 		pgstat_update_heap_dead_tuples(relation,
diff --git a/src/backend/access/heap/heapam_xlog.c b/src/backend/access/heap/heapam_xlog.c
index 768bd6ad53d..819f59dcf7c 100644
--- a/src/backend/access/heap/heapam_xlog.c
+++ b/src/backend/access/heap/heapam_xlog.c
@@ -107,7 +107,6 @@ heap_xlog_prune_freeze(XLogReaderState *record)
 									redirected, nredirected,
 									nowdead, ndead,
 									nowunused, nunused,
-									(xlrec.flags & XLHP_REPAIR_FRAGMENTATION) != 0,
 									(xlrec.flags & XLHP_ON_TOAST_RELATION) != 0);
 
 
diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c
index fa31e6432c8..3c92a05794a 100644
--- a/src/backend/access/heap/pruneheap.c
+++ b/src/backend/access/heap/pruneheap.c
@@ -273,7 +273,7 @@ heap_page_prune_opt(Relation relation, Buffer buffer)
 			 * that during on-access pruning with the current implementation.
 			 */
 			heap_page_prune_and_freeze(relation, buffer, vistest, 0,
-									   NULL, &presult, PRUNE_ON_ACCESS, &dummy_off_loc, NULL, NULL, false);
+									   NULL, &presult, PRUNE_ON_ACCESS, &dummy_off_loc, NULL, NULL);
 
 			/*
 			 * Report the number of tuples reclaimed to pgstats.  This is
@@ -367,8 +367,7 @@ heap_page_prune_and_freeze(Relation relation, Buffer buffer,
 						   PruneReason reason,
 						   OffsetNumber *off_loc,
 						   TransactionId *new_relfrozen_xid,
-						   MultiXactId *new_relmin_mxid,
-						   bool repairFragmentation)
+						   MultiXactId *new_relmin_mxid)
 {
 	Page		page = BufferGetPage(buffer);
 	BlockNumber blockno = BufferGetBlockNumber(buffer);
@@ -806,7 +805,6 @@ heap_page_prune_and_freeze(Relation relation, Buffer buffer,
 									prstate.redirected, prstate.nredirected,
 									prstate.nowdead, prstate.ndead,
 									prstate.nowunused, prstate.nunused,
-									repairFragmentation,
 									IsToastRelation(relation));
 		}
 
@@ -862,8 +860,7 @@ heap_page_prune_and_freeze(Relation relation, Buffer buffer,
 									  prstate.frozen, prstate.nfrozen,
 									  prstate.redirected, prstate.nredirected,
 									  prstate.nowdead, prstate.ndead,
-									  prstate.nowunused, prstate.nunused,
-									  repairFragmentation);
+									  prstate.nowunused, prstate.nunused);
 		}
 	}
 
@@ -1593,7 +1590,6 @@ heap_page_prune_execute(Buffer buffer, bool lp_truncate_only,
 						OffsetNumber *redirected, int nredirected,
 						OffsetNumber *nowdead, int ndead,
 						OffsetNumber *nowunused, int nunused,
-						bool repairFragmentation,
 						bool is_toast)
 {
 	Page		page = (Page) BufferGetPage(buffer);
@@ -1742,8 +1738,7 @@ heap_page_prune_execute(Buffer buffer, bool lp_truncate_only,
 		 * Finally, repair any fragmentation, and update the page's hint bit
 		 * about whether it has free pointers.
 		 */
-		if (repairFragmentation)
-			PageRepairFragmentation(page, is_toast);
+		PageRepairFragmentation(page, is_toast);
 
 		/*
 		 * Now that the page has been modified, assert that redirect items
@@ -2099,8 +2094,7 @@ log_heap_prune_and_freeze(Relation relation, Buffer buffer,
 						  HeapTupleFreeze *frozen, int nfrozen,
 						  OffsetNumber *redirected, int nredirected,
 						  OffsetNumber *dead, int ndead,
-						  OffsetNumber *unused, int nunused,
-						  bool repairFragmentation)
+						  OffsetNumber *unused, int nunused)
 {
 	xl_heap_prune xlrec;
 	XLogRecPtr	recptr;
@@ -2119,9 +2113,6 @@ log_heap_prune_and_freeze(Relation relation, Buffer buffer,
 	if (IsToastRelation(relation))
 		xlrec.flags |= XLHP_ON_TOAST_RELATION;
 
-	if (repairFragmentation)
-		xlrec.flags |= XLHP_REPAIR_FRAGMENTATION;
-
 	/*
 	 * Prepare data for the buffer.  The arrays are not actually in the
 	 * buffer, but we pretend that they are.  When XLogInsert stores a full
diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c
index 1264ad7b201..b0e8b8ec4a1 100644
--- a/src/backend/access/heap/vacuumlazy.c
+++ b/src/backend/access/heap/vacuumlazy.c
@@ -1971,8 +1971,7 @@ lazy_scan_prune(LVRelState *vacrel,
 	heap_page_prune_and_freeze(rel, buf, vacrel->vistest, prune_options,
 							   &vacrel->cutoffs, &presult, PRUNE_VACUUM_SCAN,
 							   &vacrel->offnum,
-							   &vacrel->NewRelfrozenXid, &vacrel->NewRelminMxid,
-							   true);
+							   &vacrel->NewRelfrozenXid, &vacrel->NewRelminMxid);
 
 	Assert(MultiXactIdIsValid(vacrel->NewRelminMxid));
 	Assert(TransactionIdIsValid(vacrel->NewRelfrozenXid));
@@ -2857,8 +2856,7 @@ lazy_vacuum_heap_page(LVRelState *vacrel, BlockNumber blkno, Buffer buffer,
 								  NULL, 0,	/* frozen */
 								  NULL, 0,	/* redirected */
 								  NULL, 0,	/* dead */
-								  unused, nunused,
-								  true); /*repair fragmentation*/
+								  unused, nunused);
 	}
 
 	/*
diff --git a/src/include/access/heapam.h b/src/include/access/heapam.h
index 923c5f4e97d..6006925c486 100644
--- a/src/include/access/heapam.h
+++ b/src/include/access/heapam.h
@@ -394,14 +394,12 @@ extern void heap_page_prune_and_freeze(Relation relation, Buffer buffer,
 									   PruneReason reason,
 									   OffsetNumber *off_loc,
 									   TransactionId *new_relfrozen_xid,
-									   MultiXactId *new_relmin_mxid,
-									   bool repairFragmentation);
+									   MultiXactId *new_relmin_mxid);
 
 extern void heap_page_prune_execute(Buffer buffer, bool lp_truncate_only,
 									OffsetNumber *redirected, int nredirected,
 									OffsetNumber *nowdead, int ndead,
 									OffsetNumber *nowunused, int nunused,
-									bool repairFragmentation,
 									bool is_toast);
 
 extern void heap_get_root_tuples(Relation relation, Buffer buffer, Page page,
@@ -414,8 +412,7 @@ extern void log_heap_prune_and_freeze(Relation relation, Buffer buffer,
 									  HeapTupleFreeze *frozen, int nfrozen,
 									  OffsetNumber *redirected, int nredirected,
 									  OffsetNumber *dead, int ndead,
-									  OffsetNumber *unused, int nunused,
-									  bool repairFragmentation);
+									  OffsetNumber *unused, int nunused);
 
 /* in heap/vacuumlazy.c */
 struct VacuumParams;
-- 
2.48.1

