PostgreSQL Source Code: src/include/access/commit_ts.h File Reference (original) (raw)

Go to the source code of this file.

Macros
#define COMMIT_TS_ZEROPAGE 0x00
#define COMMIT_TS_TRUNCATE 0x10
#define SizeOfCommitTsSet
#define SizeOfCommitTsTruncate
Functions
void TransactionTreeSetCommitTsData (TransactionId xid, int nsubxids, TransactionId *subxids, TimestampTz timestamp, RepOriginId nodeid)
bool TransactionIdGetCommitTsData (TransactionId xid, TimestampTz *ts, RepOriginId *nodeid)
TransactionId GetLatestCommitTsData (TimestampTz *ts, RepOriginId *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 char * commit_ts_identify (uint8 info)

COMMIT_TS_TRUNCATE

#define COMMIT_TS_TRUNCATE 0x10

COMMIT_TS_ZEROPAGE

#define COMMIT_TS_ZEROPAGE 0x00

SizeOfCommitTsSet

#define SizeOfCommitTsSet

SizeOfCommitTsTruncate

#define SizeOfCommitTsTruncate

xl_commit_ts_set

xl_commit_ts_truncate

AdvanceOldestCommitTsXid()

BootStrapCommitTs()

void BootStrapCommitTs ( void )

CheckPointCommitTs()

void CheckPointCommitTs ( void )

commit_ts_desc()

Definition at line 21 of file committsdesc.c.

22{

25

27 {

29

30 memcpy(&pageno, rec, sizeof(pageno));

32 }

34 {

36

39 }

40}

#define COMMIT_TS_ZEROPAGE

#define COMMIT_TS_TRUNCATE

void appendStringInfo(StringInfo str, const char *fmt,...)

#define XLogRecGetInfo(decoder)

#define XLogRecGetData(decoder)

References appendStringInfo(), buf, COMMIT_TS_TRUNCATE, COMMIT_TS_ZEROPAGE, xl_commit_ts_truncate::oldestXid, xl_commit_ts_truncate::pageno, XLogRecGetData, and XLogRecGetInfo.

commit_ts_identify()

const char * commit_ts_identify ( uint8 info )

commit_ts_redo()

Definition at line 1016 of file commit_ts.c.

1017{

1019

1020

1022

1024 {

1026 int slotno;

1028

1029 memcpy(&pageno, XLogRecGetData(record), sizeof(pageno));

1030

1033

1037

1039 }

1041 {

1043

1045

1046

1047

1048

1049

1052

1054 }

1055 else

1056 elog(PANIC, "commit_ts_redo: unknown op code %u", info);

1057}

static void pg_atomic_write_u64(volatile pg_atomic_uint64 *ptr, uint64 val)

void AdvanceOldestCommitTsXid(TransactionId oldestXact)

static int ZeroCommitTsPage(int64 pageno, bool writeXlog)

Assert(PointerIsAligned(start, uint64))

void SimpleLruWritePage(SlruCtl ctl, int slotno)

void SimpleLruTruncate(SlruCtl ctl, int64 cutoffPage)

static LWLock * SimpleLruGetBankLock(SlruCtl ctl, int64 pageno)

#define XLogRecHasAnyBlockRefs(decoder)

References AdvanceOldestCommitTsXid(), Assert(), COMMIT_TS_TRUNCATE, COMMIT_TS_ZEROPAGE, CommitTsCtl, elog, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), xl_commit_ts_truncate::oldestXid, xl_commit_ts_truncate::pageno, PANIC, pg_atomic_write_u64(), SimpleLruGetBankLock(), SimpleLruTruncate(), SimpleLruWritePage(), XLogRecGetData, XLogRecGetInfo, XLogRecHasAnyBlockRefs, and ZeroCommitTsPage().

CommitTsParameterChange()

void CommitTsParameterChange ( bool newvalue,
bool oldvalue
)

CommitTsShmemInit()

void CommitTsShmemInit ( void )

Definition at line 530 of file commit_ts.c.

531{

532 bool found;

533

534

536 {

537 char buf[32];

538

542

543

544

545

546

547

548

552 }

554

560 false);

562

565 &found);

566

568 {

570

575 }

576 else

578}

#define COMMIT_TS_XACTS_PER_PAGE

static int CommitTsShmemBuffers(void)

static bool CommitTsPagePrecedes(int64 page1, int64 page2)

#define TIMESTAMP_NOBEGIN(j)

int commit_timestamp_buffers

void SetConfigOption(const char *name, const char *value, GucContext context, GucSource source)

@ LWTRANCHE_COMMITTS_BUFFER

@ LWTRANCHE_COMMITTS_SLRU

#define InvalidRepOriginId

void * ShmemInitStruct(const char *name, Size size, bool *foundPtr)

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)

#define SlruPagePrecedesUnitTests(ctl, per_page)

References Assert(), buf, commit_timestamp_buffers, COMMIT_TS_XACTS_PER_PAGE, CommitTimestampShared::commitTsActive, CommitTsCtl, CommitTsPagePrecedes(), commitTsShared, CommitTsShmemBuffers(), CommitTimestampShared::dataLastCommit, InvalidRepOriginId, InvalidTransactionId, IsUnderPostmaster, LWTRANCHE_COMMITTS_BUFFER, LWTRANCHE_COMMITTS_SLRU, 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 )

committssyncfiletag()

int committssyncfiletag ( const FileTag * ftag,
char * path
)

CompleteCommitTsInitialization()

void CompleteCommitTsInitialization ( void )

ExtendCommitTs()

Definition at line 842 of file commit_ts.c.

843{

846

847

848

849

850

851

854 return;

855

856

857

858

859

862 return;

863

865

867

869

870

872

874}

#define TransactionIdToCTsEntry(xid)

static int64 TransactionIdToCTsPage(TransactionId xid)

#define TransactionIdEquals(id1, id2)

#define FirstNormalTransactionId

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

Referenced by GetNewTransactionId().

GetLatestCommitTsData()

SetCommitTsLimit()

StartupCommitTs()

void StartupCommitTs ( void )

TransactionIdGetCommitTsData()

Definition at line 274 of file commit_ts.c.

276{

279 int slotno;

283

286 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),

287 errmsg("cannot retrieve commit timestamp for transaction %u", xid)));

289 {

290

291 *ts = 0;

292 if (nodeid)

293 *nodeid = 0;

294 return false;

295 }

296

298

299

302

303

304

305

306

308 {

310 if (nodeid)

312

314 return *ts != 0;

315 }

316

319

322

323

324

325

329 {

330 *ts = 0;

331 if (nodeid)

333 return false;

334 }

335

336

338 memcpy(&entry,

339 CommitTsCtl->shared->page_buffer[slotno] +

342

343 *ts = entry.time;

344 if (nodeid)

345 *nodeid = entry.nodeid;

346

348 return *ts != 0;

349}

#define SizeOfCommitTimestampEntry

int errcode(int sqlerrcode)

int errmsg(const char *fmt,...)

#define ereport(elevel,...)

int SimpleLruReadPage_ReadOnly(SlruCtl ctl, int64 pageno, TransactionId xid)

#define TransactionIdIsValid(xid)

#define TransactionIdIsNormal(xid)

References Assert(), CommitTimestampShared::commitTsActive, CommitTsCtl, commitTsShared, CommitTimestampShared::dataLastCommit, ereport, errcode(), errmsg(), ERROR, error_commit_ts_disabled(), InvalidRepOriginId, 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(), and pg_xact_commit_timestamp_origin().

TransactionTreeSetCommitTsData()

Definition at line 141 of file commit_ts.c.

144{

145 int i;

148

149

150

151

152

153

154

155

156

158 return;

159

160

161

162

163

164 if (nsubxids > 0)

165 newestXact = subxids[nsubxids - 1];

166 else

167 newestXact = xid;

168

169

170

171

172

173

174

175

176 headxid = xid;

177 i = 0;

178 for (;;)

179 {

181 int j;

182

183 for (j = i; j < nsubxids; j++)

184 {

186 break;

187 }

188

189

191 pageno);

192

193

194 if (j >= nsubxids)

195 break;

196

197

198

199

200

201 headxid = subxids[j];

202 i = j + 1;

203 }

204

205

210

211

215}

static void SetXidCommitTsInPage(TransactionId xid, int nsubxids, TransactionId *subxids, TimestampTz ts, RepOriginId nodeid, int64 pageno)

References CommitTimestampShared::commitTsActive, commitTsShared, CommitTimestampShared::dataLastCommit, 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()

Definition at line 883 of file commit_ts.c.

884{

885 int64 cutoffPage;

886

887

888

889

890

892

893

895 &cutoffPage))

896 return;

897

898

900

901

903}

static void WriteTruncateXlogRec(int64 pageno, TransactionId oldestXid)

bool SlruScanDirectory(SlruCtl ctl, SlruScanCallback callback, void *data)

bool SlruScanDirCbReportPresence(SlruCtl ctl, char *filename, int64 segpage, void *data)

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

Referenced by vac_truncate_clog().

track_commit_timestamp