A small correction to doc and comment of FSM for indexes

Started by Alex Friedmanabout 1 year ago2 messageshackers
Jump to latest
#1Alex Friedman
alexf01@gmail.com

Hi,

This patch fixes a couple of small inaccuracies in the doc and the comment for FSM about index handling.

1. In the doc for pg_freespacemap, it currently says:

For indexes, what is tracked is entirely-unused pages, rather than free space within pages. Therefore, the values are not meaningful, just whether a page is full or empty.

However, as what is tracked is entirely-unused pages, the values mean whether a page is "in-use or empty", rather than "full or empty".

2. In indexfsm.c the header comment says:

* This is similar to the FSM used for heap, in freespace.c, but instead
* of tracking the amount of free space on pages, we only track whether
* pages are completely free or in-use. We use the same FSM implementation
* as for heaps, using BLCKSZ - 1 to denote used pages, and 0 for unused.

However, in the code we see that used pages are marked with 0:

/*
* RecordUsedIndexPage - mark a page as used in the FSM
*/
void
RecordUsedIndexPage(Relation rel, BlockNumber usedBlock)
{
RecordPageWithFreeSpace(rel, usedBlock, 0);
}

And free pages are marked with BLCKSZ - 1:

/*
* RecordFreeIndexPage - mark a page as free in the FSM
*/
void
RecordFreeIndexPage(Relation rel, BlockNumber freeBlock)
{
RecordPageWithFreeSpace(rel, freeBlock, BLCKSZ - 1);
}

And so, this patch also fixes the comment's "using BLCKSZ - 1 to denote used pages, and 0 for unused" to be "using 0 to denote used pages, and BLCKSZ - 1 for unused".

While these changes are minor, I've seen how this can cause a bit of confusion, and it would be good to clarify it.

Best regards,

Alex Friedman

Attachments:

v1-0001-A-small-correction-to-doc-and-comment-of-FSM-for-.patchtext/plain; charset=UTF-8; name=v1-0001-A-small-correction-to-doc-and-comment-of-FSM-for-.patchDownload+2-3
#2Michael Paquier
michael@paquier.xyz
In reply to: Alex Friedman (#1)
Re: A small correction to doc and comment of FSM for indexes

On Tue, Feb 25, 2025 at 07:24:14PM +0200, Alex Friedman wrote:

However, as what is tracked is entirely-unused pages, the values
mean whether a page is "in-use or empty", rather than "full or
empty".

Ah, right, you are obviously right here. Applied and backpatched doen
to 13 as the docs of pg_freespacemap have been incorrect for a long
time.
--
Michael