PostgreSQL Source Code git master
Loading...
Searching...
No Matches
commit_ts.h File Reference
#include "access/xlog.h"
#include "datatype/timestamp.h"
#include "replication/origin.h"
#include "storage/sync.h"
Include dependency graph for commit_ts.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  xl_commit_ts_truncate
 

Macros

#define COMMIT_TS_ZEROPAGE   0x00
 
#define COMMIT_TS_TRUNCATE   0x10
 
#define SizeOfCommitTsTruncate
 

Typedefs

typedef struct xl_commit_ts_truncate xl_commit_ts_truncate
 

Functions

void TransactionTreeSetCommitTsData (TransactionId xid, int nsubxids, TransactionId *subxids, TimestampTz timestamp, ReplOriginId nodeid)
 
bool TransactionIdGetCommitTsData (TransactionId xid, TimestampTz *ts, ReplOriginId *nodeid)
 
TransactionId GetLatestCommitTsData (TimestampTz *ts, ReplOriginId *nodeid)
 
Size CommitTsShmemSize (void)
 
void CommitTsShmemInit (void)
 
void BootStrapCommitTs (void)
 
void StartupCommitTs (void)
 
void CommitTsParameterChange (bool newvalue, bool oldvalue)
 
void CompleteCommitTsInitialization (void)
 
void CheckPointCommitTs (void)
 
void ExtendCommitTs (TransactionId newestXact)
 
void TruncateCommitTs (TransactionId oldestXact)
 
void SetCommitTsLimit (TransactionId oldestXact, TransactionId newestXact)
 
void AdvanceOldestCommitTsXid (TransactionId oldestXact)
 
int committssyncfiletag (const FileTag *ftag, char *path)
 
void commit_ts_redo (XLogReaderState *record)
 
void commit_ts_desc (StringInfo buf, XLogReaderState *record)
 
const charcommit_ts_identify (uint8 info)
 

Variables

PGDLLIMPORT bool track_commit_timestamp
 

Macro Definition Documentation

◆ COMMIT_TS_TRUNCATE

#define COMMIT_TS_TRUNCATE   0x10

Definition at line 47 of file commit_ts.h.

◆ COMMIT_TS_ZEROPAGE

#define COMMIT_TS_ZEROPAGE   0x00

Definition at line 46 of file commit_ts.h.

◆ SizeOfCommitTsTruncate

#define SizeOfCommitTsTruncate
Value:
uint32 TransactionId
Definition c.h:738
static int fb(int x)

Definition at line 55 of file commit_ts.h.

Typedef Documentation

◆ xl_commit_ts_truncate

Function Documentation

◆ AdvanceOldestCommitTsXid()

void AdvanceOldestCommitTsXid ( TransactionId  oldestXact)
extern

Definition at line 916 of file commit_ts.c.

917{
923}
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
Definition lwlock.c:1177
void LWLockRelease(LWLock *lock)
Definition lwlock.c:1794
@ LW_EXCLUSIVE
Definition lwlock.h:112
TransactionId oldestCommitTsXid
Definition transam.h:232
#define InvalidTransactionId
Definition transam.h:31
static bool TransactionIdPrecedes(TransactionId id1, TransactionId id2)
Definition transam.h:263
TransamVariablesData * TransamVariables
Definition varsup.c:34

References fb(), InvalidTransactionId, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), TransamVariablesData::oldestCommitTsXid, TransactionIdPrecedes(), and TransamVariables.

Referenced by commit_ts_redo(), and vac_truncate_clog().

◆ BootStrapCommitTs()

void BootStrapCommitTs ( void  )
extern

Definition at line 596 of file commit_ts.c.

597{
598 /*
599 * Nothing to do here at present, unlike most other SLRU modules; segments
600 * are created when the server is started with this module enabled. See
601 * ActivateCommitTs.
602 */
603}

Referenced by BootStrapXLOG().

◆ CheckPointCommitTs()

void CheckPointCommitTs ( void  )
extern

Definition at line 796 of file commit_ts.c.

797{
798 /*
799 * Write dirty CommitTs pages to disk. This may result in sync requests
800 * queued for later handling by ProcessSyncRequests(), as part of the
801 * checkpoint.
802 */
804}
#define CommitTsCtl
Definition commit_ts.c:85
void SimpleLruWriteAll(SlruCtl ctl, bool allow_redirtied)
Definition slru.c:1355

References CommitTsCtl, and SimpleLruWriteAll().

Referenced by CheckPointGuts().

◆ commit_ts_desc()

void commit_ts_desc ( StringInfo  buf,
XLogReaderState record 
)
extern

Definition at line 21 of file committsdesc.c.

22{
23 char *rec = XLogRecGetData(record);
24 uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
25
26 if (info == COMMIT_TS_ZEROPAGE)
27 {
28 int64 pageno;
29
30 memcpy(&pageno, rec, sizeof(pageno));
31 appendStringInfo(buf, "%" PRId64, pageno);
32 }
33 else if (info == COMMIT_TS_TRUNCATE)
34 {
36
37 appendStringInfo(buf, "pageno %" PRId64 ", oldestXid %u",
38 trunc->pageno, trunc->oldestXid);
39 }
40}
uint8_t uint8
Definition c.h:616
int64_t int64
Definition c.h:615
#define COMMIT_TS_ZEROPAGE
Definition commit_ts.h:46
#define COMMIT_TS_TRUNCATE
Definition commit_ts.h:47
static char buf[DEFAULT_XLOG_SEG_SIZE]
void appendStringInfo(StringInfo str, const char *fmt,...)
Definition stringinfo.c:145
#define XLogRecGetInfo(decoder)
Definition xlogreader.h:409
#define XLogRecGetData(decoder)
Definition xlogreader.h:414

References appendStringInfo(), buf, COMMIT_TS_TRUNCATE, COMMIT_TS_ZEROPAGE, fb(), XLogRecGetData, and XLogRecGetInfo.

◆ commit_ts_identify()

const char * commit_ts_identify ( uint8  info)
extern

Definition at line 43 of file committsdesc.c.

44{
45 switch (info)
46 {
48 return "ZEROPAGE";
50 return "TRUNCATE";
51 default:
52 return NULL;
53 }
54}

References COMMIT_TS_TRUNCATE, COMMIT_TS_ZEROPAGE, and fb().

◆ commit_ts_redo()

void commit_ts_redo ( XLogReaderState record)
extern

Definition at line 992 of file commit_ts.c.

993{
994 uint8 info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;
995
996 /* Backup blocks are not used in commit_ts records */
998
999 if (info == COMMIT_TS_ZEROPAGE)
1000 {
1001 int64 pageno;
1002
1003 memcpy(&pageno, XLogRecGetData(record), sizeof(pageno));
1005 }
1006 else if (info == COMMIT_TS_TRUNCATE)
1007 {
1009
1010 AdvanceOldestCommitTsXid(trunc->oldestXid);
1011
1012 /*
1013 * During XLOG replay, latest_page_number isn't set up yet; insert a
1014 * suitable value to bypass the sanity test in SimpleLruTruncate.
1015 */
1016 pg_atomic_write_u64(&CommitTsCtl->shared->latest_page_number,
1017 trunc->pageno);
1018
1020 }
1021 else
1022 elog(PANIC, "commit_ts_redo: unknown op code %u", info);
1023}
static void pg_atomic_write_u64(volatile pg_atomic_uint64 *ptr, uint64 val)
Definition atomics.h:485
#define Assert(condition)
Definition c.h:945
void AdvanceOldestCommitTsXid(TransactionId oldestXact)
Definition commit_ts.c:916
#define PANIC
Definition elog.h:42
#define elog(elevel,...)
Definition elog.h:226
void SimpleLruZeroAndWritePage(SlruCtl ctl, int64 pageno)
Definition slru.c:449
void SimpleLruTruncate(SlruCtl ctl, int64 cutoffPage)
Definition slru.c:1441
#define XLogRecHasAnyBlockRefs(decoder)
Definition xlogreader.h:416

References AdvanceOldestCommitTsXid(), Assert, COMMIT_TS_TRUNCATE, COMMIT_TS_ZEROPAGE, CommitTsCtl, elog, fb(), PANIC, pg_atomic_write_u64(), SimpleLruTruncate(), SimpleLruZeroAndWritePage(), XLogRecGetData, XLogRecGetInfo, and XLogRecHasAnyBlockRefs.

◆ CommitTsParameterChange()

void CommitTsParameterChange ( bool  newvalue,
bool  oldvalue 
)
extern

Definition at line 642 of file commit_ts.c.

643{
644 /*
645 * If the commit_ts module is disabled in this server and we get word from
646 * the primary server that it is enabled there, activate it so that we can
647 * replay future WAL records involving it; also mark it as active on
648 * pg_control. If the old value was already set, we already did this, so
649 * don't do anything.
650 *
651 * If the module is disabled in the primary, disable it here too, unless
652 * the module is enabled locally.
653 *
654 * Note this only runs in the recovery process, so an unlocked read is
655 * fine.
656 */
657 if (newvalue)
658 {
661 }
664}
static void DeactivateCommitTs(void)
Definition commit_ts.c:754
static CommitTimestampShared * commitTsShared
Definition commit_ts.c:105
static void ActivateCommitTs(void)
Definition commit_ts.c:683

References ActivateCommitTs(), CommitTimestampShared::commitTsActive, commitTsShared, DeactivateCommitTs(), and fb().

Referenced by xlog_redo().

◆ CommitTsShmemInit()

void CommitTsShmemInit ( void  )
extern

Definition at line 529 of file commit_ts.c.

530{
531 bool found;
532
533 /* If auto-tuning is requested, now is the time to do it */
535 {
536 char buf[32];
537
538 snprintf(buf, sizeof(buf), "%d", CommitTsShmemBuffers());
539 SetConfigOption("commit_timestamp_buffers", buf, PGC_POSTMASTER,
541
542 /*
543 * We prefer to report this value's source as PGC_S_DYNAMIC_DEFAULT.
544 * However, if the DBA explicitly set commit_timestamp_buffers = 0 in
545 * the config file, then PGC_S_DYNAMIC_DEFAULT will fail to override
546 * that and we must force the matter with PGC_S_OVERRIDE.
547 */
548 if (commit_timestamp_buffers == 0) /* failed to apply it? */
549 SetConfigOption("commit_timestamp_buffers", buf, PGC_POSTMASTER,
551 }
553
554 CommitTsCtl->PagePrecedes = CommitTsPagePrecedes;
555 CommitTsCtl->errdetail_for_io_error = commit_ts_errdetail_for_io_error;
556 SimpleLruInit(CommitTsCtl, "commit_timestamp", CommitTsShmemBuffers(), 0,
557 "pg_commit_ts", LWTRANCHE_COMMITTS_BUFFER,
560 false);
562
563 commitTsShared = ShmemInitStruct("CommitTs shared",
564 sizeof(CommitTimestampShared),
565 &found);
566
568 {
569 Assert(!found);
570
575 }
576 else
577 Assert(found);
578}
static int commit_ts_errdetail_for_io_error(const void *opaque_data)
Definition commit_ts.c:965
#define COMMIT_TS_XACTS_PER_PAGE
Definition commit_ts.c:63
static int CommitTsShmemBuffers(void)
Definition commit_ts.c:505
static bool CommitTsPagePrecedes(int64 page1, int64 page2)
Definition commit_ts.c:950
#define TIMESTAMP_NOBEGIN(j)
Definition timestamp.h:159
bool IsUnderPostmaster
Definition globals.c:120
int commit_timestamp_buffers
Definition globals.c:161
void SetConfigOption(const char *name, const char *value, GucContext context, GucSource source)
Definition guc.c:4228
@ PGC_S_DYNAMIC_DEFAULT
Definition guc.h:114
@ PGC_S_OVERRIDE
Definition guc.h:123
@ PGC_POSTMASTER
Definition guc.h:74
#define InvalidReplOriginId
Definition origin.h:33
#define snprintf
Definition port.h:260
void * ShmemInitStruct(const char *name, Size size, bool *foundPtr)
Definition shmem.c:381
void SimpleLruInit(SlruCtl ctl, const char *name, int nslots, int nlsns, const char *subdir, int buffer_tranche_id, int bank_tranche_id, SyncRequestHandler sync_handler, bool long_segment_names)
Definition slru.c:254
#define SlruPagePrecedesUnitTests(ctl, per_page)
Definition slru.h:196
TimestampTz time
Definition commit_ts.c:56
ReplOriginId nodeid
Definition commit_ts.c:57
CommitTimestampEntry dataLastCommit
Definition commit_ts.c:101
TransactionId xidLastCommit
Definition commit_ts.c:100
@ SYNC_HANDLER_COMMIT_TS
Definition sync.h:39

References Assert, buf, commit_timestamp_buffers, commit_ts_errdetail_for_io_error(), COMMIT_TS_XACTS_PER_PAGE, CommitTimestampShared::commitTsActive, CommitTsCtl, CommitTsPagePrecedes(), commitTsShared, CommitTsShmemBuffers(), CommitTimestampShared::dataLastCommit, fb(), InvalidReplOriginId, InvalidTransactionId, IsUnderPostmaster, CommitTimestampEntry::nodeid, PGC_POSTMASTER, PGC_S_DYNAMIC_DEFAULT, PGC_S_OVERRIDE, SetConfigOption(), ShmemInitStruct(), SimpleLruInit(), SlruPagePrecedesUnitTests, snprintf, SYNC_HANDLER_COMMIT_TS, CommitTimestampEntry::time, TIMESTAMP_NOBEGIN, and CommitTimestampShared::xidLastCommit.

Referenced by CreateOrAttachShmemStructs().

◆ CommitTsShmemSize()

Size CommitTsShmemSize ( void  )
extern

Definition at line 518 of file commit_ts.c.

519{
521 sizeof(CommitTimestampShared);
522}
Size SimpleLruShmemSize(int nslots, int nlsns)
Definition slru.c:200

References CommitTsShmemBuffers(), and SimpleLruShmemSize().

Referenced by CalculateShmemSize().

◆ committssyncfiletag()

int committssyncfiletag ( const FileTag ftag,
char path 
)
extern

Definition at line 1029 of file commit_ts.c.

1030{
1031 return SlruSyncFileTag(CommitTsCtl, ftag, path);
1032}
int SlruSyncFileTag(SlruCtl ctl, const FileTag *ftag, char *path)
Definition slru.c:1864

References CommitTsCtl, and SlruSyncFileTag().

◆ CompleteCommitTsInitialization()

void CompleteCommitTsInitialization ( void  )
extern

Definition at line 620 of file commit_ts.c.

621{
622 /*
623 * If the feature is not enabled, turn it off for good. This also removes
624 * any leftover data.
625 *
626 * Conversely, we activate the module if the feature is enabled. This is
627 * necessary for primary and standby as the activation depends on the
628 * control file contents at the beginning of recovery or when a
629 * XLOG_PARAMETER_CHANGE is replayed.
630 */
633 else
635}
bool track_commit_timestamp
Definition commit_ts.c:109

References ActivateCommitTs(), DeactivateCommitTs(), and track_commit_timestamp.

Referenced by StartupXLOG().

◆ ExtendCommitTs()

void ExtendCommitTs ( TransactionId  newestXact)
extern

Definition at line 818 of file commit_ts.c.

819{
820 int64 pageno;
821 LWLock *lock;
822
823 /*
824 * Nothing to do if module not enabled. Note we do an unlocked read of
825 * the flag here, which is okay because this routine is only called from
826 * GetNewTransactionId, which is never called in a standby.
827 */
830 return;
831
832 /*
833 * No work except at first XID of a page. But beware: just after
834 * wraparound, the first XID of page zero is FirstNormalTransactionId.
835 */
838 return;
839
841
842 lock = SimpleLruGetBankLock(CommitTsCtl, pageno);
843
845
846 /* Zero the page ... */
848
849 /* and make a WAL entry about that, unless we're in REDO */
850 if (!InRecovery)
852
853 LWLockRelease(lock);
854}
#define TransactionIdToCTsEntry(xid)
Definition commit_ts.c:77
static int64 TransactionIdToCTsPage(TransactionId xid)
Definition commit_ts.c:72
int SimpleLruZeroPage(SlruCtl ctl, int64 pageno)
Definition slru.c:380
static LWLock * SimpleLruGetBankLock(SlruCtl ctl, int64 pageno)
Definition slru.h:171
#define TransactionIdEquals(id1, id2)
Definition transam.h:43
#define FirstNormalTransactionId
Definition transam.h:34
XLogRecPtr XLogSimpleInsertInt64(RmgrId rmid, uint8 info, int64 value)
Definition xloginsert.c:544
bool InRecovery
Definition xlogutils.c:50

References Assert, COMMIT_TS_ZEROPAGE, CommitTimestampShared::commitTsActive, CommitTsCtl, commitTsShared, fb(), FirstNormalTransactionId, InRecovery, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), SimpleLruGetBankLock(), SimpleLruZeroPage(), TransactionIdEquals, TransactionIdToCTsEntry, TransactionIdToCTsPage(), and XLogSimpleInsertInt64().

Referenced by GetNewTransactionId().

◆ GetLatestCommitTsData()

TransactionId GetLatestCommitTsData ( TimestampTz ts,
ReplOriginId nodeid 
)
extern

◆ SetCommitTsLimit()

void SetCommitTsLimit ( TransactionId  oldestXact,
TransactionId  newestXact 
)
extern

◆ StartupCommitTs()

void StartupCommitTs ( void  )
extern

Definition at line 610 of file commit_ts.c.

611{
613}

References ActivateCommitTs().

Referenced by StartupXLOG().

◆ TransactionIdGetCommitTsData()

bool TransactionIdGetCommitTsData ( TransactionId  xid,
TimestampTz ts,
ReplOriginId nodeid 
)
extern

Definition at line 273 of file commit_ts.c.

275{
276 int64 pageno = TransactionIdToCTsPage(xid);
278 int slotno;
280 TransactionId oldestCommitTsXid;
281 TransactionId newestCommitTsXid;
282
283 if (!TransactionIdIsValid(xid))
286 errmsg("cannot retrieve commit timestamp for transaction %u", xid)));
287 else if (!TransactionIdIsNormal(xid))
288 {
289 /* frozen and bootstrap xids are always committed far in the past */
290 *ts = 0;
291 if (nodeid)
292 *nodeid = 0;
293 return false;
294 }
295
297
298 /* Error if module not enabled */
301
302 /*
303 * If we're asked for the cached value, return that. Otherwise, fall
304 * through to read from SLRU.
305 */
306 if (commitTsShared->xidLastCommit == xid)
307 {
309 if (nodeid)
311
313 return *ts != 0;
314 }
315
316 oldestCommitTsXid = TransamVariables->oldestCommitTsXid;
317 newestCommitTsXid = TransamVariables->newestCommitTsXid;
318 /* neither is invalid, or both are */
319 Assert(TransactionIdIsValid(oldestCommitTsXid) == TransactionIdIsValid(newestCommitTsXid));
321
322 /*
323 * Return empty if the requested value is outside our valid range.
324 */
325 if (!TransactionIdIsValid(oldestCommitTsXid) ||
326 TransactionIdPrecedes(xid, oldestCommitTsXid) ||
327 TransactionIdPrecedes(newestCommitTsXid, xid))
328 {
329 *ts = 0;
330 if (nodeid)
331 *nodeid = InvalidReplOriginId;
332 return false;
333 }
334
335 /* lock is acquired by SimpleLruReadPage_ReadOnly */
337 memcpy(&entry,
338 CommitTsCtl->shared->page_buffer[slotno] +
341
342 *ts = entry.time;
343 if (nodeid)
344 *nodeid = entry.nodeid;
345
347 return *ts != 0;
348}
#define SizeOfCommitTimestampEntry
Definition commit_ts.c:60
int errcode(int sqlerrcode)
Definition elog.c:874
#define ERROR
Definition elog.h:39
#define ereport(elevel,...)
Definition elog.h:150
static char * errmsg
int SimpleLruReadPage_ReadOnly(SlruCtl ctl, int64 pageno, const void *opaque_data)
Definition slru.c:637
#define TransactionIdIsValid(xid)
Definition transam.h:41
#define TransactionIdIsNormal(xid)
Definition transam.h:42

References Assert, CommitTimestampShared::commitTsActive, CommitTsCtl, commitTsShared, CommitTimestampShared::dataLastCommit, ereport, errcode(), errmsg, ERROR, error_commit_ts_disabled(), fb(), InvalidReplOriginId, LW_SHARED, LWLockAcquire(), LWLockRelease(), TransamVariablesData::newestCommitTsXid, CommitTimestampEntry::nodeid, TransamVariablesData::oldestCommitTsXid, SimpleLruGetBankLock(), SimpleLruReadPage_ReadOnly(), SizeOfCommitTimestampEntry, CommitTimestampEntry::time, TransactionIdIsNormal, TransactionIdIsValid, TransactionIdPrecedes(), TransactionIdToCTsEntry, TransactionIdToCTsPage(), TransamVariables, and CommitTimestampShared::xidLastCommit.

Referenced by GetTupleTransactionInfo(), pg_xact_commit_timestamp(), pg_xact_commit_timestamp_origin(), and update_most_recent_deletion_info().

◆ TransactionTreeSetCommitTsData()

void TransactionTreeSetCommitTsData ( TransactionId  xid,
int  nsubxids,
TransactionId subxids,
TimestampTz  timestamp,
ReplOriginId  nodeid 
)
extern

Definition at line 140 of file commit_ts.c.

143{
144 int i;
147
148 /*
149 * No-op if the module is not active.
150 *
151 * An unlocked read here is fine, because in a standby (the only place
152 * where the flag can change in flight) this routine is only called by the
153 * recovery process, which is also the only process which can change the
154 * flag.
155 */
157 return;
158
159 /*
160 * Figure out the latest Xid in this batch: either the last subxid if
161 * there's any, otherwise the parent xid.
162 */
163 if (nsubxids > 0)
164 newestXact = subxids[nsubxids - 1];
165 else
166 newestXact = xid;
167
168 /*
169 * We split the xids to set the timestamp to in groups belonging to the
170 * same SLRU page; the first element in each such set is its head. The
171 * first group has the main XID as the head; subsequent sets use the first
172 * subxid not on the previous page as head. This way, we only have to
173 * lock/modify each SLRU page once.
174 */
175 headxid = xid;
176 i = 0;
177 for (;;)
178 {
180 int j;
181
182 for (j = i; j < nsubxids; j++)
183 {
184 if (TransactionIdToCTsPage(subxids[j]) != pageno)
185 break;
186 }
187 /* subxids[i..j] are on the same page as the head */
188
189 SetXidCommitTsInPage(headxid, j - i, subxids + i, timestamp, nodeid,
190 pageno);
191
192 /* if we wrote out all subxids, we're done. */
193 if (j >= nsubxids)
194 break;
195
196 /*
197 * Set the new head and skip over it, as well as over the subxids we
198 * just wrote.
199 */
200 headxid = subxids[j];
201 i = j + 1;
202 }
203
204 /* update the cached value in shared memory */
209
210 /* and move forwards our endpoint, if needed */
214}
static void SetXidCommitTsInPage(TransactionId xid, int nsubxids, TransactionId *subxids, TimestampTz ts, ReplOriginId nodeid, int64 pageno)
Definition commit_ts.c:221
int j
Definition isn.c:78
int i
Definition isn.c:77
int64 timestamp

References CommitTimestampShared::commitTsActive, commitTsShared, CommitTimestampShared::dataLastCommit, fb(), i, j, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), TransamVariablesData::newestCommitTsXid, CommitTimestampEntry::nodeid, SetXidCommitTsInPage(), CommitTimestampEntry::time, TransactionIdPrecedes(), TransactionIdToCTsPage(), TransamVariables, and CommitTimestampShared::xidLastCommit.

Referenced by RecordTransactionCommit(), RecordTransactionCommitPrepared(), and xact_redo_commit().

◆ TruncateCommitTs()

void TruncateCommitTs ( TransactionId  oldestXact)
extern

Definition at line 863 of file commit_ts.c.

864{
866
867 /*
868 * The cutoff point is the start of the segment containing oldestXact. We
869 * pass the *page* containing oldestXact to SimpleLruTruncate.
870 */
872
873 /* Check to see if there's any files that could be removed */
875 &cutoffPage))
876 return; /* nothing to remove */
877
878 /* Write XLOG record */
879 WriteTruncateXlogRec(cutoffPage, oldestXact);
880
881 /* Now we can remove the old CommitTs segment(s) */
883}
static void WriteTruncateXlogRec(int64 pageno, TransactionId oldestXid)
Definition commit_ts.c:976
bool SlruScanDirectory(SlruCtl ctl, SlruScanCallback callback, void *data)
Definition slru.c:1824
bool SlruScanDirCbReportPresence(SlruCtl ctl, char *filename, int64 segpage, void *data)
Definition slru.c:1745

References CommitTsCtl, fb(), SimpleLruTruncate(), SlruScanDirCbReportPresence(), SlruScanDirectory(), TransactionIdToCTsPage(), and WriteTruncateXlogRec().

Referenced by vac_truncate_clog().

Variable Documentation

◆ track_commit_timestamp