LCOV - differential code coverage report
Current view: top level - src/backend/storage/freespace - indexfsm.c (source / functions) Coverage Total Hit CBC
Current: Differential Code Coverage HEAD vs 15 Lines: 100.0 % 14 14 14
Current Date: 2023-04-08 17:13:01 Functions: 100.0 % 4 4 4
Baseline: 15 Line coverage date bins:
Baseline Date: 2023-04-08 15:09:40 (240..) days: 100.0 % 14 14 14
Legend: Lines: hit not hit Function coverage date bins:
(240..) days: 100.0 % 4 4 4

 Age         Owner                  TLA  Line data    Source code
                                  1                 : /*-------------------------------------------------------------------------
                                  2                 :  *
                                  3                 :  * indexfsm.c
                                  4                 :  *    POSTGRES free space map for quickly finding free pages in relations
                                  5                 :  *
                                  6                 :  *
                                  7                 :  * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
                                  8                 :  * Portions Copyright (c) 1994, Regents of the University of California
                                  9                 :  *
                                 10                 :  * IDENTIFICATION
                                 11                 :  *    src/backend/storage/freespace/indexfsm.c
                                 12                 :  *
                                 13                 :  *
                                 14                 :  * NOTES:
                                 15                 :  *
                                 16                 :  *  This is similar to the FSM used for heap, in freespace.c, but instead
                                 17                 :  *  of tracking the amount of free space on pages, we only track whether
                                 18                 :  *  pages are completely free or in-use. We use the same FSM implementation
                                 19                 :  *  as for heaps, using BLCKSZ - 1 to denote used pages, and 0 for unused.
                                 20                 :  *
                                 21                 :  *-------------------------------------------------------------------------
                                 22                 :  */
                                 23                 : #include "postgres.h"
                                 24                 : 
                                 25                 : #include "storage/freespace.h"
                                 26                 : #include "storage/indexfsm.h"
                                 27                 : 
                                 28                 : /*
                                 29                 :  * Exported routines
                                 30                 :  */
                                 31                 : 
                                 32                 : /*
                                 33                 :  * GetFreeIndexPage - return a free page from the FSM
                                 34                 :  *
                                 35                 :  * As a side effect, the page is marked as used in the FSM.
                                 36                 :  */
                                 37                 : BlockNumber
 5304 heikki.linnakangas         38 CBC       56753 : GetFreeIndexPage(Relation rel)
                                 39                 : {
 1433 akapila                    40           56753 :     BlockNumber blkno = GetPageWithFreeSpace(rel, BLCKSZ / 2);
                                 41                 : 
 5304 heikki.linnakangas         42           56753 :     if (blkno != InvalidBlockNumber)
                                 43             333 :         RecordUsedIndexPage(rel, blkno);
                                 44                 : 
                                 45           56753 :     return blkno;
                                 46                 : }
                                 47                 : 
                                 48                 : /*
                                 49                 :  * RecordFreeIndexPage - mark a page as free in the FSM
                                 50                 :  */
                                 51                 : void
                                 52            4048 : RecordFreeIndexPage(Relation rel, BlockNumber freeBlock)
                                 53                 : {
 1433 akapila                    54            4048 :     RecordPageWithFreeSpace(rel, freeBlock, BLCKSZ - 1);
 5304 heikki.linnakangas         55            4048 : }
                                 56                 : 
                                 57                 : 
                                 58                 : /*
                                 59                 :  * RecordUsedIndexPage - mark a page as used in the FSM
                                 60                 :  */
                                 61                 : void
                                 62             333 : RecordUsedIndexPage(Relation rel, BlockNumber usedBlock)
                                 63                 : {
 1433 akapila                    64             333 :     RecordPageWithFreeSpace(rel, usedBlock, 0);
 5304 heikki.linnakangas         65             333 : }
                                 66                 : 
                                 67                 : /*
                                 68                 :  * IndexFreeSpaceMapVacuum - scan and fix any inconsistencies in the FSM
                                 69                 :  */
                                 70                 : void
 5298                            71              90 : IndexFreeSpaceMapVacuum(Relation rel)
                                 72                 : {
                                 73              90 :     FreeSpaceMapVacuum(rel);
                                 74              90 : }
        

Generated by: LCOV version v1.16-55-g56c0a2a