PostgreSQL Source Code: src/backend/access/transam/commit_ts.c File Reference (original) (raw)
Go to the source code of this file.
Macros | |
---|---|
#define | SizeOfCommitTimestampEntry |
#define | COMMIT_TS_XACTS_PER_PAGE (BLCKSZ / SizeOfCommitTimestampEntry) |
#define | TransactionIdToCTsEntry(xid) ((xid) % (TransactionId) COMMIT_TS_XACTS_PER_PAGE) |
#define | CommitTsCtl (&CommitTsCtlData) |
Variables | |
---|---|
static SlruCtlData | CommitTsCtlData |
static CommitTimestampShared * | commitTsShared |
bool | track_commit_timestamp |
◆ COMMIT_TS_XACTS_PER_PAGE
◆ CommitTsCtl
◆ SizeOfCommitTimestampEntry
#define SizeOfCommitTimestampEntry
◆ TransactionIdToCTsEntry
◆ CommitTimestampEntry
◆ CommitTimestampShared
◆ ActivateCommitTs()
static void ActivateCommitTs ( void ) | static |
---|
Definition at line 705 of file commit_ts.c.
706{
709
710
713 {
715 return;
716 }
718
721
722
723
724
726
727
728
729
730
731
732
733
734
735
736
737
738
739
742 {
745 }
747
748
750 {
752 int slotno;
753
759 }
760
761
765}
static void pg_atomic_write_u64(volatile pg_atomic_uint64 *ptr, uint64 val)
static CommitTimestampShared * commitTsShared
static int64 TransactionIdToCTsPage(TransactionId xid)
static int ZeroCommitTsPage(int64 pageno, bool writeXlog)
Assert(PointerIsAligned(start, uint64))
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
void LWLockRelease(LWLock *lock)
void SimpleLruWritePage(SlruCtl ctl, int slotno)
bool SimpleLruDoesPhysicalPageExist(SlruCtl ctl, int64 pageno)
static LWLock * SimpleLruGetBankLock(SlruCtl ctl, int64 pageno)
TransactionId oldestCommitTsXid
TransactionId newestCommitTsXid
FullTransactionId nextXid
static TransactionId ReadNextTransactionId(void)
#define InvalidTransactionId
#define XidFromFullTransactionId(x)
TransamVariablesData * TransamVariables
References Assert(), CommitTimestampShared::commitTsActive, CommitTsCtl, commitTsShared, InvalidTransactionId, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), TransamVariablesData::newestCommitTsXid, TransamVariablesData::nextXid, TransamVariablesData::oldestCommitTsXid, pg_atomic_write_u64(), ReadNextTransactionId(), SimpleLruDoesPhysicalPageExist(), SimpleLruGetBankLock(), SimpleLruWritePage(), TransactionIdToCTsPage(), TransamVariables, XidFromFullTransactionId, and ZeroCommitTsPage().
Referenced by CommitTsParameterChange(), CompleteCommitTsInitialization(), and StartupCommitTs().
◆ AdvanceOldestCommitTsXid()
◆ BootStrapCommitTs()
void BootStrapCommitTs | ( | void | ) |
---|
◆ check_commit_ts_buffers()
bool check_commit_ts_buffers | ( | int * | newval, |
---|---|---|---|
void ** | extra, | ||
GucSource | source | ||
) |
◆ CheckPointCommitTs()
void CheckPointCommitTs | ( | void | ) |
---|
◆ 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}
void AdvanceOldestCommitTsXid(TransactionId oldestXact)
#define COMMIT_TS_ZEROPAGE
#define COMMIT_TS_TRUNCATE
void SimpleLruTruncate(SlruCtl ctl, int64 cutoffPage)
#define XLogRecGetInfo(decoder)
#define XLogRecGetData(decoder)
#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().
◆ CommitTsPagePrecedes()
static bool CommitTsPagePrecedes ( int64 page1, int64 page2 ) | static |
---|
◆ CommitTsParameterChange()
void CommitTsParameterChange | ( | bool | newvalue, |
---|---|---|---|
bool | oldvalue | ||
) |
◆ CommitTsShmemBuffers()
static int CommitTsShmemBuffers ( void ) | static |
---|
◆ 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}
static int CommitTsShmemBuffers(void)
static bool CommitTsPagePrecedes(int64 page1, int64 page2)
#define TIMESTAMP_NOBEGIN(j)
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 | ) |
---|
◆ DeactivateCommitTs()
static void DeactivateCommitTs ( void ) | static |
---|
Definition at line 778 of file commit_ts.c.
779{
780
781
782
783
784
785
786
788
793
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
812
814}
bool SlruScanDirectory(SlruCtl ctl, SlruScanCallback callback, void *data)
bool SlruScanDirCbDeleteAll(SlruCtl ctl, char *filename, int64 segpage, void *data)
References CommitTimestampShared::commitTsActive, CommitTsCtl, commitTsShared, CommitTimestampShared::dataLastCommit, InvalidRepOriginId, InvalidTransactionId, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), TransamVariablesData::newestCommitTsXid, CommitTimestampEntry::nodeid, TransamVariablesData::oldestCommitTsXid, SlruScanDirCbDeleteAll(), SlruScanDirectory(), CommitTimestampEntry::time, TIMESTAMP_NOBEGIN, TransamVariables, and CommitTimestampShared::xidLastCommit.
Referenced by CommitTsParameterChange(), and CompleteCommitTsInitialization().
◆ error_commit_ts_disabled()
static void error_commit_ts_disabled ( void ) | static |
---|
Definition at line 381 of file commit_ts.c.
382{
384 (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
385 errmsg("could not get commit timestamp data"),
387 errhint("Make sure the configuration parameter \"%s\" is set on the primary server.",
388 "track_commit_timestamp") :
389 errhint("Make sure the configuration parameter \"%s\" is set.",
390 "track_commit_timestamp")));
391}
int errhint(const char *fmt,...)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
bool RecoveryInProgress(void)
References ereport, errcode(), errhint(), errmsg(), ERROR, and RecoveryInProgress().
Referenced by GetLatestCommitTsData(), and TransactionIdGetCommitTsData().
◆ 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)
#define TransactionIdEquals(id1, id2)
References Assert(), CommitTimestampShared::commitTsActive, CommitTsCtl, commitTsShared, FirstNormalTransactionId, InRecovery, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), SimpleLruGetBankLock(), TransactionIdEquals, TransactionIdToCTsEntry, TransactionIdToCTsPage(), and ZeroCommitTsPage().
Referenced by GetNewTransactionId().
◆ GetLatestCommitTsData()
◆ pg_last_committed_xact()
Definition at line 420 of file commit_ts.c.
421{
426 bool nulls[3];
429
430
432
434 elog(ERROR, "return type must be a row type");
435
437 {
438 memset(nulls, true, sizeof(nulls));
439 }
440 else
441 {
443 nulls[0] = false;
444
446 nulls[1] = false;
447
449 nulls[2] = false;
450 }
451
453
455}
static Datum values[MAXATTR]
TransactionId GetLatestCommitTsData(TimestampTz *ts, RepOriginId *nodeid)
#define PG_RETURN_DATUM(x)
TypeFuncClass get_call_result_type(FunctionCallInfo fcinfo, Oid *resultTypeId, TupleDesc *resultTupleDesc)
static Datum HeapTupleGetDatum(const HeapTupleData *tuple)
HeapTuple heap_form_tuple(TupleDesc tupleDescriptor, const Datum *values, const bool *isnull)
static Datum TransactionIdGetDatum(TransactionId X)
static Datum ObjectIdGetDatum(Oid X)
#define TransactionIdIsNormal(xid)
static Datum TimestampTzGetDatum(TimestampTz X)
References elog, ERROR, get_call_result_type(), GetLatestCommitTsData(), heap_form_tuple(), HeapTupleGetDatum(), ObjectIdGetDatum(), PG_RETURN_DATUM, TimestampTzGetDatum(), TransactionIdGetDatum(), TransactionIdIsNormal, TYPEFUNC_COMPOSITE, and values.
◆ pg_xact_commit_timestamp()
◆ pg_xact_commit_timestamp_origin()
Definition at line 464 of file commit_ts.c.
465{
470 bool nulls[2];
473 bool found;
474
476
478 elog(ERROR, "return type must be a row type");
479
480 if (!found)
481 {
482 memset(nulls, true, sizeof(nulls));
483 }
484 else
485 {
487 nulls[0] = false;
488
490 nulls[1] = false;
491 }
492
494
496}
References elog, ERROR, get_call_result_type(), heap_form_tuple(), HeapTupleGetDatum(), ObjectIdGetDatum(), PG_GETARG_TRANSACTIONID, PG_RETURN_DATUM, TimestampTzGetDatum(), TransactionIdGetCommitTsData(), TYPEFUNC_COMPOSITE, and values.
◆ SetCommitTsLimit()
◆ SetXidCommitTsInPage()
Definition at line 222 of file commit_ts.c.
225{
227 int slotno;
228 int i;
229
231
233
235 for (i = 0; i < nsubxids; i++)
237
238 CommitTsCtl->shared->page_dirty[slotno] = true;
239
241}
static void TransactionIdSetCommitTs(TransactionId xid, TimestampTz ts, RepOriginId nodeid, int slotno)
int SimpleLruReadPage(SlruCtl ctl, int64 pageno, bool write_ok, TransactionId xid)
References CommitTsCtl, i, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), SimpleLruGetBankLock(), SimpleLruReadPage(), and TransactionIdSetCommitTs().
Referenced by TransactionTreeSetCommitTsData().
◆ 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 SimpleLruReadPage_ReadOnly(SlruCtl ctl, int64 pageno, TransactionId xid)
#define TransactionIdIsValid(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().
◆ TransactionIdSetCommitTs()
◆ TransactionIdToCTsPage()
◆ 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];
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()
◆ WriteTruncateXlogRec()
◆ WriteZeroPageXlogRec()
static void WriteZeroPageXlogRec ( int64 pageno) | static |
---|
◆ ZeroCommitTsPage()
static int ZeroCommitTsPage ( int64 pageno, bool writeXlog ) | static |
---|
◆ CommitTsCtlData
◆ commitTsShared
◆ track_commit_timestamp
bool track_commit_timestamp