109#define MAPSIZE (BLCKSZ - MAXALIGN(SizeOfPageHeaderData))
112#define HEAPBLOCKS_PER_BYTE (BITS_PER_BYTE / BITS_PER_HEAPBLOCK)
115#define HEAPBLOCKS_PER_PAGE (MAPSIZE * HEAPBLOCKS_PER_BYTE)
118#define HEAPBLK_TO_MAPBLOCK(x) ((x) / HEAPBLOCKS_PER_PAGE)
119#define HEAPBLK_TO_MAPBYTE(x) (((x) % HEAPBLOCKS_PER_PAGE) / HEAPBLOCKS_PER_BYTE)
120#define HEAPBLK_TO_OFFSET(x) (((x) % HEAPBLOCKS_PER_BYTE) * BITS_PER_HEAPBLOCK)
123#define VISIBLE_MASK8 (0x55)
124#define FROZEN_MASK8 (0xaa)
152#ifdef TRACE_VISIBILITYMAP
157 elog(
ERROR,
"wrong buffer passed to visibilitymap_clear");
256#ifdef TRACE_VISIBILITYMAP
270 elog(
ERROR,
"wrong heap buffer passed to visibilitymap_set");
277 elog(
ERROR,
"wrong VM buffer passed to visibilitymap_set");
355#ifdef TRACE_VISIBILITYMAP
373 elog(
ERROR,
"wrong VM buffer passed to visibilitymap_set");
416#ifdef TRACE_VISIBILITYMAP
495 *all_frozen = nfrozen;
519#ifdef TRACE_VISIBILITYMAP
#define InvalidBlockNumber
BlockNumber BufferGetBlockNumber(Buffer buffer)
bool BufferIsLockedByMeInMode(Buffer buffer, BufferLockMode mode)
Buffer ExtendBufferedRelTo(BufferManagerRelation bmr, ForkNumber fork, BufferAccessStrategy strategy, uint32 flags, BlockNumber extend_to, ReadBufferMode mode)
void ReleaseBuffer(Buffer buffer)
void UnlockReleaseBuffer(Buffer buffer)
void MarkBufferDirty(Buffer buffer)
Buffer ReadBufferExtended(Relation reln, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, BufferAccessStrategy strategy)
static Page BufferGetPage(Buffer buffer)
static void LockBuffer(Buffer buffer, BufferLockMode mode)
@ EB_CREATE_FORK_IF_NEEDED
static bool BufferIsValid(Buffer bufnum)
void PageInit(Page page, Size pageSize, Size specialSize)
static bool PageIsAllVisible(const PageData *page)
static bool PageIsNew(const PageData *page)
static char * PageGetContents(Page page)
static void PageSetLSN(Page page, XLogRecPtr lsn)
#define Assert(condition)
#define MemSet(start, val, len)
volatile uint32 CritSectionCount
XLogRecPtr log_heap_visible(Relation rel, Buffer heap_buffer, Buffer vm_buffer, TransactionId snapshotConflictHorizon, uint8 vmflags)
void CacheInvalidateSmgr(RelFileLocatorBackend rlocator)
#define START_CRIT_SECTION()
#define END_CRIT_SECTION()
static uint64 pg_popcount_masked(const char *buf, int bytes, bits8 mask)
static char buf[DEFAULT_XLOG_SEG_SIZE]
static SMgrRelation RelationGetSmgr(Relation rel)
#define RelationGetRelationName(relation)
#define RelationNeedsWAL(relation)
#define relpathbackend(rlocator, backend, forknum)
BlockNumber smgrnblocks(SMgrRelation reln, ForkNumber forknum)
bool smgrexists(SMgrRelation reln, ForkNumber forknum)
void visibilitymap_set(Relation rel, BlockNumber heapBlk, Buffer heapBuf, XLogRecPtr recptr, Buffer vmBuf, TransactionId cutoff_xid, uint8 flags)
bool visibilitymap_pin_ok(BlockNumber heapBlk, Buffer vmbuf)
bool visibilitymap_clear(Relation rel, BlockNumber heapBlk, Buffer vmbuf, uint8 flags)
#define HEAPBLK_TO_OFFSET(x)
void visibilitymap_pin(Relation rel, BlockNumber heapBlk, Buffer *vmbuf)
uint8 visibilitymap_get_status(Relation rel, BlockNumber heapBlk, Buffer *vmbuf)
static Buffer vm_extend(Relation rel, BlockNumber vm_nblocks)
BlockNumber visibilitymap_prepare_truncate(Relation rel, BlockNumber nheapblocks)
void visibilitymap_count(Relation rel, BlockNumber *all_visible, BlockNumber *all_frozen)
static Buffer vm_readbuf(Relation rel, BlockNumber blkno, bool extend)
#define HEAPBLK_TO_MAPBLOCK(x)
void visibilitymap_set_vmbits(BlockNumber heapBlk, Buffer vmBuf, uint8 flags, const RelFileLocator rlocator)
#define HEAPBLK_TO_MAPBYTE(x)
#define VISIBILITYMAP_VALID_BITS
#define VISIBILITYMAP_ALL_FROZEN
#define VISIBILITYMAP_ALL_VISIBLE
#define XLogHintBitIsNeeded()
#define XLogRecPtrIsValid(r)
XLogRecPtr log_newpage_buffer(Buffer buffer, bool page_std)