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 15:15:32 Functions: 100.0 % 4 4 4
Baseline: 15
Baseline Date: 2023-04-08 15:09:40
Legend: Lines: hit not hit

           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
      38 CBC       56753 : GetFreeIndexPage(Relation rel)
      39                 : {
      40           56753 :     BlockNumber blkno = GetPageWithFreeSpace(rel, BLCKSZ / 2);
      41                 : 
      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                 : {
      54            4048 :     RecordPageWithFreeSpace(rel, freeBlock, BLCKSZ - 1);
      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                 : {
      64             333 :     RecordPageWithFreeSpace(rel, usedBlock, 0);
      65             333 : }
      66                 : 
      67                 : /*
      68                 :  * IndexFreeSpaceMapVacuum - scan and fix any inconsistencies in the FSM
      69                 :  */
      70                 : void
      71              90 : IndexFreeSpaceMapVacuum(Relation rel)
      72                 : {
      73              90 :     FreeSpaceMapVacuum(rel);
      74              90 : }
        

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