PostgreSQL Source Code
git master
|
#include "postgres.h"
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include "access/slru.h"
#include "access/transam.h"
#include "access/xlog.h"
#include "access/xlogutils.h"
#include "miscadmin.h"
#include "pgstat.h"
#include "storage/fd.h"
#include "storage/shmem.h"
Go to the source code of this file.
Data Structures | |
struct | SlruWriteAllData |
Macros | |
#define | SlruFileName(ctl, path, seg) snprintf(path, MAXPGPATH, "%s/%04X", (ctl)->Dir, seg) |
#define | MAX_WRITEALL_BUFFERS 16 |
#define | INIT_SLRUFILETAG(a, xx_handler, xx_segno) |
#define | SlruRecentlyUsed(shared, slotno) |
Typedefs | |
typedef struct SlruWriteAllData | SlruWriteAllData |
typedef struct SlruWriteAllData * | SlruWriteAll |
Enumerations | |
enum | SlruErrorCause { SLRU_OPEN_FAILED , SLRU_SEEK_FAILED , SLRU_READ_FAILED , SLRU_WRITE_FAILED , SLRU_FSYNC_FAILED , SLRU_CLOSE_FAILED } |
Functions | |
static void | SimpleLruZeroLSNs (SlruCtl ctl, int slotno) |
static void | SimpleLruWaitIO (SlruCtl ctl, int slotno) |
static void | SlruInternalWritePage (SlruCtl ctl, int slotno, SlruWriteAll fdata) |
static bool | SlruPhysicalReadPage (SlruCtl ctl, int pageno, int slotno) |
static bool | SlruPhysicalWritePage (SlruCtl ctl, int pageno, int slotno, SlruWriteAll fdata) |
static void | SlruReportIOError (SlruCtl ctl, int pageno, TransactionId xid) |
static int | SlruSelectLRUPage (SlruCtl ctl, int pageno) |
static bool | SlruScanDirCbDeleteCutoff (SlruCtl ctl, char *filename, int segpage, void *data) |
static void | SlruInternalDeleteSegment (SlruCtl ctl, int segno) |
Size | SimpleLruShmemSize (int nslots, int nlsns) |
void | SimpleLruInit (SlruCtl ctl, const char *name, int nslots, int nlsns, LWLock *ctllock, const char *subdir, int tranche_id, SyncRequestHandler sync_handler) |
int | SimpleLruZeroPage (SlruCtl ctl, int pageno) |
int | SimpleLruReadPage (SlruCtl ctl, int pageno, bool write_ok, TransactionId xid) |
int | SimpleLruReadPage_ReadOnly (SlruCtl ctl, int pageno, TransactionId xid) |
void | SimpleLruWritePage (SlruCtl ctl, int slotno) |
bool | SimpleLruDoesPhysicalPageExist (SlruCtl ctl, int pageno) |
void | SimpleLruWriteAll (SlruCtl ctl, bool allow_redirtied) |
void | SimpleLruTruncate (SlruCtl ctl, int cutoffPage) |
void | SlruDeleteSegment (SlruCtl ctl, int segno) |
static bool | SlruMayDeleteSegment (SlruCtl ctl, int segpage, int cutoffPage) |
bool | SlruScanDirCbReportPresence (SlruCtl ctl, char *filename, int segpage, void *data) |
bool | SlruScanDirCbDeleteAll (SlruCtl ctl, char *filename, int segpage, void *data) |
bool | SlruScanDirectory (SlruCtl ctl, SlruScanCallback callback, void *data) |
int | SlruSyncFileTag (SlruCtl ctl, const FileTag *ftag, char *path) |
Variables | |
static SlruErrorCause | slru_errcause |
static int | slru_errno |
#define INIT_SLRUFILETAG | ( | a, | |
xx_handler, | |||
xx_segno | |||
) |
#define SlruRecentlyUsed | ( | shared, | |
slotno | |||
) |
typedef struct SlruWriteAllData* SlruWriteAll |
typedef struct SlruWriteAllData SlruWriteAllData |
enum SlruErrorCause |
Definition at line 627 of file slru.c.
References CloseTransientFile(), endpos, fd(), MAXPGPATH, OpenTransientFile(), PG_BINARY, pgstat_count_slru_page_exists(), SlruWriteAllData::segno, SlruCtlData::shared, SLRU_CLOSE_FAILED, slru_errcause, slru_errno, SLRU_OPEN_FAILED, SLRU_PAGES_PER_SEGMENT, SLRU_SEEK_FAILED, SlruSharedData::slru_stats_idx, SlruFileName, and SlruReportIOError().
Referenced by ActivateCommitTs(), find_multixact_start(), MaybeExtendOffsetSlru(), and test_slru_page_exists().
void SimpleLruInit | ( | SlruCtl | ctl, |
const char * | name, | ||
int | nslots, | ||
int | nlsns, | ||
LWLock * | ctllock, | ||
const char * | subdir, | ||
int | tranche_id, | ||
SyncRequestHandler | sync_handler | ||
) |
Definition at line 188 of file slru.c.
References Assert(), SlruSharedData::buffer_locks, BUFFERALIGN, SlruSharedData::ControlLock, SlruSharedData::cur_lru_count, SlruCtlData::Dir, SlruSharedData::group_lsn, IsUnderPostmaster, LWLockPadded::lock, SlruSharedData::lsn_groups_per_page, LWLockInitialize(), MAXALIGN, name, SlruSharedData::num_slots, SlruSharedData::page_buffer, SlruSharedData::page_dirty, SlruSharedData::page_lru_count, SlruSharedData::page_number, SlruSharedData::page_status, pgstat_get_slru_index(), SlruCtlData::shared, ShmemInitStruct(), SimpleLruShmemSize(), SLRU_PAGE_EMPTY, SlruSharedData::slru_stats_idx, strlcpy(), and SlruCtlData::sync_handler.
Referenced by AsyncShmemInit(), CLOGShmemInit(), CommitTsShmemInit(), MultiXactShmemInit(), SerialInit(), SUBTRANSShmemInit(), and test_slru_shmem_startup().
int SimpleLruReadPage | ( | SlruCtl | ctl, |
int | pageno, | ||
bool | write_ok, | ||
TransactionId | xid | ||
) |
Definition at line 396 of file slru.c.
References Assert(), SlruSharedData::buffer_locks, SlruSharedData::ControlLock, LWLockPadded::lock, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), SlruSharedData::page_dirty, SlruSharedData::page_number, SlruSharedData::page_status, pgstat_count_slru_page_hit(), pgstat_count_slru_page_read(), SlruCtlData::shared, SimpleLruWaitIO(), SimpleLruZeroLSNs(), SLRU_PAGE_EMPTY, SLRU_PAGE_READ_IN_PROGRESS, SLRU_PAGE_VALID, SLRU_PAGE_WRITE_IN_PROGRESS, SlruSharedData::slru_stats_idx, SlruPhysicalReadPage(), SlruRecentlyUsed, SlruReportIOError(), and SlruSelectLRUPage().
Referenced by asyncQueueAddEntries(), GetMultiXactIdMembers(), RecordNewMultiXact(), SerialAdd(), SetXidCommitTsInPage(), SimpleLruReadPage_ReadOnly(), SubTransSetParent(), test_slru_page_read(), TransactionIdSetPageStatusInternal(), TrimCLOG(), and TrimMultiXact().
int SimpleLruReadPage_ReadOnly | ( | SlruCtl | ctl, |
int | pageno, | ||
TransactionId | xid | ||
) |
Definition at line 496 of file slru.c.
References SlruSharedData::ControlLock, LW_EXCLUSIVE, LW_SHARED, LWLockAcquire(), LWLockRelease(), SlruSharedData::num_slots, SlruSharedData::page_number, SlruSharedData::page_status, pgstat_count_slru_page_hit(), SlruCtlData::shared, SimpleLruReadPage(), SLRU_PAGE_EMPTY, SLRU_PAGE_READ_IN_PROGRESS, SlruSharedData::slru_stats_idx, and SlruRecentlyUsed.
Referenced by asyncQueueReadAllNotifications(), find_multixact_start(), SerialGetMinConflictCommitSeqNo(), SubTransGetParent(), test_slru_page_readonly(), TransactionIdGetCommitTsData(), and TransactionIdGetStatus().
Size SimpleLruShmemSize | ( | int | nslots, |
int | nlsns | ||
) |
Definition at line 156 of file slru.c.
References BUFFERALIGN, and MAXALIGN.
Referenced by AsyncShmemSize(), CLOGShmemSize(), CommitTsShmemSize(), MultiXactShmemSize(), PredicateLockShmemSize(), SimpleLruInit(), SUBTRANSShmemSize(), and test_slru_shmem_request().
void SimpleLruTruncate | ( | SlruCtl | ctl, |
int | cutoffPage | ||
) |
Definition at line 1227 of file slru.c.
References SlruSharedData::ControlLock, SlruCtlData::Dir, ereport, errmsg(), SlruSharedData::latest_page_number, LOG, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), SlruSharedData::num_slots, SlruSharedData::page_dirty, SlruSharedData::page_number, SlruSharedData::page_status, SlruCtlData::PagePrecedes, pgstat_count_slru_truncate(), SlruCtlData::shared, SimpleLruWaitIO(), SLRU_PAGE_EMPTY, SLRU_PAGE_VALID, SlruSharedData::slru_stats_idx, SlruInternalWritePage(), SlruScanDirCbDeleteCutoff(), and SlruScanDirectory().
Referenced by asyncQueueAdvanceTail(), CheckPointPredicate(), clog_redo(), commit_ts_redo(), PerformOffsetsTruncation(), test_slru_page_truncate(), TruncateCLOG(), TruncateCommitTs(), and TruncateSUBTRANS().
|
static |
Definition at line 342 of file slru.c.
References SlruSharedData::buffer_locks, SlruSharedData::ControlLock, LWLockPadded::lock, LW_EXCLUSIVE, LW_SHARED, LWLockAcquire(), LWLockConditionalAcquire(), LWLockRelease(), SlruSharedData::page_dirty, SlruSharedData::page_status, SlruCtlData::shared, SLRU_PAGE_EMPTY, SLRU_PAGE_READ_IN_PROGRESS, SLRU_PAGE_VALID, and SLRU_PAGE_WRITE_IN_PROGRESS.
Referenced by SimpleLruReadPage(), SimpleLruTruncate(), SlruDeleteSegment(), SlruInternalWritePage(), and SlruSelectLRUPage().
Definition at line 1157 of file slru.c.
References Assert(), CloseTransientFile(), SlruSharedData::ControlLock, SlruCtlData::Dir, SlruWriteAllData::fd, fsync_fname(), i, InvalidTransactionId, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), SlruWriteAllData::num_files, SlruSharedData::num_slots, SlruSharedData::page_dirty, SlruSharedData::page_status, pgstat_count_slru_flush(), SlruWriteAllData::segno, SlruCtlData::shared, SLRU_CLOSE_FAILED, slru_errcause, slru_errno, SLRU_PAGE_EMPTY, SLRU_PAGE_VALID, SLRU_PAGES_PER_SEGMENT, SlruSharedData::slru_stats_idx, SlruInternalWritePage(), SlruReportIOError(), SlruCtlData::sync_handler, and SYNC_HANDLER_NONE.
Referenced by CheckPointCLOG(), CheckPointCommitTs(), CheckPointMultiXact(), CheckPointPredicate(), CheckPointSUBTRANS(), find_multixact_start(), and test_slru_page_writeall().
void SimpleLruWritePage | ( | SlruCtl | ctl, |
int | slotno | ||
) |
Definition at line 615 of file slru.c.
References SlruInternalWritePage().
Referenced by ActivateCommitTs(), BootStrapCLOG(), BootStrapMultiXact(), BootStrapSUBTRANS(), clog_redo(), commit_ts_redo(), MaybeExtendOffsetSlru(), multixact_redo(), and test_slru_page_write().
|
static |
Definition at line 325 of file slru.c.
References SlruSharedData::group_lsn, SlruSharedData::lsn_groups_per_page, MemSet, and SlruCtlData::shared.
Referenced by SimpleLruReadPage(), and SimpleLruZeroPage().
int SimpleLruZeroPage | ( | SlruCtl | ctl, |
int | pageno | ||
) |
Definition at line 281 of file slru.c.
References Assert(), SlruSharedData::latest_page_number, MemSet, SlruSharedData::page_buffer, SlruSharedData::page_dirty, SlruSharedData::page_number, SlruSharedData::page_status, pgstat_count_slru_page_zeroed(), SlruCtlData::shared, SimpleLruZeroLSNs(), SLRU_PAGE_EMPTY, SLRU_PAGE_VALID, SlruSharedData::slru_stats_idx, SlruRecentlyUsed, and SlruSelectLRUPage().
Referenced by asyncQueueAddEntries(), SerialAdd(), test_slru_page_write(), ZeroCLOGPage(), ZeroCommitTsPage(), ZeroMultiXactMemberPage(), ZeroMultiXactOffsetPage(), and ZeroSUBTRANSPage().
void SlruDeleteSegment | ( | SlruCtl | ctl, |
int | segno | ||
) |
Definition at line 1328 of file slru.c.
References SlruSharedData::ControlLock, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), SlruSharedData::num_slots, SlruSharedData::page_dirty, SlruSharedData::page_number, SlruSharedData::page_status, SlruWriteAllData::segno, SlruCtlData::shared, SimpleLruWaitIO(), SLRU_PAGE_EMPTY, SLRU_PAGE_VALID, SLRU_PAGES_PER_SEGMENT, SlruInternalDeleteSegment(), and SlruInternalWritePage().
Referenced by PerformMembersTruncation(), and test_slru_page_delete().
|
static |
Definition at line 1305 of file slru.c.
References DEBUG2, ereport, errmsg_internal(), INIT_SLRUFILETAG, MAXPGPATH, RegisterSyncRequest(), SlruWriteAllData::segno, SlruFileName, SYNC_FORGET_REQUEST, SlruCtlData::sync_handler, and SYNC_HANDLER_NONE.
Referenced by SlruDeleteSegment(), SlruScanDirCbDeleteAll(), and SlruScanDirCbDeleteCutoff().
|
static |
Definition at line 540 of file slru.c.
References Assert(), SlruSharedData::buffer_locks, CheckpointStats, CheckpointStatsData::ckpt_bufs_written, CloseTransientFile(), SlruSharedData::ControlLock, SlruWriteAllData::fd, i, InvalidTransactionId, LWLockPadded::lock, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), SlruWriteAllData::num_files, SlruSharedData::page_dirty, SlruSharedData::page_number, SlruSharedData::page_status, SlruCtlData::shared, SimpleLruWaitIO(), SLRU_PAGE_VALID, SLRU_PAGE_WRITE_IN_PROGRESS, SlruPhysicalWritePage(), and SlruReportIOError().
Referenced by SimpleLruTruncate(), SimpleLruWriteAll(), SimpleLruWritePage(), SlruDeleteSegment(), and SlruSelectLRUPage().
Definition at line 1392 of file slru.c.
References Assert(), SlruCtlData::PagePrecedes, and SLRU_PAGES_PER_SEGMENT.
Referenced by SlruScanDirCbDeleteCutoff(), and SlruScanDirCbReportPresence().
Definition at line 685 of file slru.c.
References CloseTransientFile(), ereport, errmsg(), fd(), InRecovery, LOG, MAXPGPATH, MemSet, OpenTransientFile(), SlruSharedData::page_buffer, PG_BINARY, pg_pread, pgstat_report_wait_end(), pgstat_report_wait_start(), SlruWriteAllData::segno, SlruCtlData::shared, SLRU_CLOSE_FAILED, slru_errcause, slru_errno, SLRU_OPEN_FAILED, SLRU_PAGES_PER_SEGMENT, SLRU_READ_FAILED, and SlruFileName.
Referenced by SimpleLruReadPage().
|
static |
Definition at line 757 of file slru.c.
References CloseTransientFile(), END_CRIT_SECTION, fd(), SlruWriteAllData::fd, SlruSharedData::group_lsn, i, INIT_SLRUFILETAG, SlruSharedData::lsn_groups_per_page, MAX_WRITEALL_BUFFERS, MAXPGPATH, SlruWriteAllData::num_files, OpenTransientFile(), SlruSharedData::page_buffer, PG_BINARY, pg_fsync(), pg_pwrite, pgstat_count_slru_page_written(), pgstat_report_wait_end(), pgstat_report_wait_start(), RegisterSyncRequest(), SlruWriteAllData::segno, SlruCtlData::shared, SLRU_CLOSE_FAILED, slru_errcause, slru_errno, SLRU_FSYNC_FAILED, SLRU_OPEN_FAILED, SLRU_PAGES_PER_SEGMENT, SlruSharedData::slru_stats_idx, SLRU_WRITE_FAILED, SlruFileName, START_CRIT_SECTION, SlruCtlData::sync_handler, SYNC_HANDLER_NONE, SYNC_REQUEST, XLogFlush(), and XLogRecPtrIsInvalid.
Referenced by SlruInternalWritePage().
|
static |
Definition at line 932 of file slru.c.
References data_sync_elevel(), elog(), ereport, errcode_for_file_access(), errdetail(), errmsg(), ERROR, MAXPGPATH, SlruWriteAllData::segno, SLRU_CLOSE_FAILED, slru_errcause, slru_errno, SLRU_FSYNC_FAILED, SLRU_OPEN_FAILED, SLRU_PAGES_PER_SEGMENT, SLRU_READ_FAILED, SLRU_SEEK_FAILED, SLRU_WRITE_FAILED, and SlruFileName.
Referenced by SimpleLruDoesPhysicalPageExist(), SimpleLruReadPage(), SimpleLruWriteAll(), and SlruInternalWritePage().
Definition at line 1531 of file slru.c.
References SLRU_PAGES_PER_SEGMENT, and SlruInternalDeleteSegment().
Referenced by AsyncShmemInit(), DeactivateCommitTs(), and test_slru_scan_cb().
|
static |
Definition at line 1516 of file slru.c.
References data, SLRU_PAGES_PER_SEGMENT, SlruInternalDeleteSegment(), and SlruMayDeleteSegment().
Referenced by SimpleLruTruncate().
Definition at line 1501 of file slru.c.
References data, and SlruMayDeleteSegment().
Referenced by TruncateCLOG(), and TruncateCommitTs().
bool SlruScanDirectory | ( | SlruCtl | ctl, |
SlruScanCallback | callback, | ||
void * | data | ||
) |
Definition at line 1554 of file slru.c.
References AllocateDir(), callback(), dirent::d_name, data, DEBUG2, SlruCtlData::Dir, elog(), FreeDir(), len, ReadDir(), and SLRU_PAGES_PER_SEGMENT.
Referenced by AsyncShmemInit(), DeactivateCommitTs(), SimpleLruTruncate(), test_slru_delete_all(), TruncateCLOG(), TruncateCommitTs(), and TruncateMultiXact().
|
static |
Definition at line 1017 of file slru.c.
References SlruSharedData::cur_lru_count, SlruSharedData::latest_page_number, SlruSharedData::num_slots, SlruSharedData::page_dirty, SlruSharedData::page_lru_count, SlruSharedData::page_number, SlruSharedData::page_status, SlruCtlData::PagePrecedes, SlruCtlData::shared, SimpleLruWaitIO(), SLRU_PAGE_EMPTY, SLRU_PAGE_VALID, and SlruInternalWritePage().
Referenced by SimpleLruReadPage(), and SimpleLruZeroPage().
Definition at line 1594 of file slru.c.
References CloseTransientFile(), fd(), OpenTransientFile(), PG_BINARY, pg_fsync(), pgstat_report_wait_end(), pgstat_report_wait_start(), FileTag::segno, and SlruFileName.
Referenced by clogsyncfiletag(), committssyncfiletag(), multixactmemberssyncfiletag(), multixactoffsetssyncfiletag(), and test_slru_page_sync().
|
static |
Definition at line 134 of file slru.c.
Referenced by SimpleLruDoesPhysicalPageExist(), SimpleLruWriteAll(), SlruPhysicalReadPage(), SlruPhysicalWritePage(), and SlruReportIOError().
|
static |
Definition at line 135 of file slru.c.
Referenced by SimpleLruDoesPhysicalPageExist(), SimpleLruWriteAll(), SlruPhysicalReadPage(), SlruPhysicalWritePage(), and SlruReportIOError().