8000 Refectoring of XTM API · postgrespro/postgres_cluster@4599f99 · GitHub
[go: up one dir, main page]

Skip to content

Commit 4599f99

Browse files
committed
Refectoring of XTM API
1 parent fe853ca commit 4599f99

File tree

12 files changed

+81
-80
lines changed

12 files changed

+81
-80
lines changed

contrib/pg_dtm/pg_dtm.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ static bool DtmGlobalXidAssigned;
8787
static int DtmLocalXidReserve;
8888
static int DtmCurcid;
8989
static Snapshot DtmLastSnapshot;
90-
static TransactionManager DtmTM = { DtmGetTransactionStatus, DtmSetTransactionStatus, DtmGetSnapshot, DtmGetNewTransactionId, DtmGetOldestXmin, TransactionIdIsRunning, DtmGetGlobalTransactionId };
90+
static TransactionManager DtmTM = { DtmGetTransactionStatus, DtmSetTransactionStatus, DtmGetSnapshot, DtmGetNewTransactionId, DtmGetOldestXmin, PgTransactionIdIsInProgress, DtmGetGlobalTransactionId, PgXidInMVCCSnapshot };
9191

9292

9393
#define XTM_TRACE(fmt, ...)
@@ -169,7 +169,7 @@ static void DtmMergeWithGlobalSnapshot(Snapshot dst)
169169
* Check that global and local snapshots are consistent: transactions marked as completed in global snapohsot
170170
* should be completed locally
171171
*/
172-
dst = GetLocalSnapshotData(dst);
172+
dst = PgGetSnapshotData(dst);
173173
for (i = 0; i < dst->xcnt; i++) {
174174
if (TransactionIdIsInDoubt(dst->xip[i])) {
175175
goto GetLocalSnapshot;
@@ -213,7 +213,7 @@ static void DtmMergeWithGlobalSnapshot(Snapshot dst)
213213
*/
214214
static TransactionId DtmGetOldestXmin(Relation rel, bool ignoreVacuum)
215215
{
216-
TransactionId localXmin = GetOldestLocalXmin(rel, ignoreVacuum);
216+
TransactionId localXmin = PgGetOldestXmin(rel, ignoreVacuum);
217217
TransactionId globalXmin = dtm->minXid;
218218
XTM_INFO("XTM: DtmGetOldestXmin localXmin=%d, globalXmin=%d\n", localXmin, globalXmin);
219219

@@ -526,7 +526,7 @@ static Snapshot DtmGetSnapshot(Snapshot snapshot)
526526
* which PRECEDS actual transaction for which Xid is received.
527527
* This transaction doesn't need to take in accountn global snapshot
528528
*/
529-
return GetLocalSnapshotData(snapshot);
529+
return PgGetSnapshotData(snapshot);
530530
}
531531
if (TransactionIdIsValid(DtmNextXid) && snapshot != &CatalogSnapshotData) {
532532
if (!DtmHasGlobalSnapshot && (snapshot != DtmLastSnapshot || DtmCurcid != snapshot->curcid)) {
@@ -543,7 +543,7 @@ static Snapshot DtmGetSnapshot(Snapshot snapshot)
543543
}
544544
} else {
545545
/* For local transactions and catalog snapshots use default GetSnapshotData implementation */
546-
snapshot = GetLocalSnapshotData(snapshot);
546+
snapshot = PgGetSnapshotData(snapshot);
547547
}
548548
DtmUpdateRecentXmin(snapshot);
549549
CurrentTransactionSnapshot = snapshot;
@@ -557,7 +557,7 @@ static XidStatus DtmGetTransactionStatus(TransactionId xid, XLogRecPtr *lsn)
557557
*/
558558
XidStatus status = xid >= ShmemVariableCache->nextXid
559559
? TRANSACTION_STATUS_IN_PROGRESS
560-
: CLOGTransactionIdGetStatus(xid, lsn);
560+
: PgTransactionIdGetStatus(xid, lsn);
561561
XTM_TRACE("XTM: DtmGetTransactionStatus\n");
562562
return status;
563563
}
@@ -569,7 +569,7 @@ static void DtmSetTransactionStatus(TransactionId xid, int nsubxids, Transaction
569569
if (!DtmGlobalXidAssigned && TransactionIdIsValid(DtmNextXid)) {
570570
CurrentTransactionSnapshot = NULL;
571571
if (status == TRANSACTION_STATUS_ABORTED) {
572-
CLOGTransactionIdSetTreeStatus(xid, nsubxids, subxids, status, lsn);
572+
PgTransactionIdSetTreeStatus(xid, nsubxids, subxids, status, lsn);
573573
DtmGlobalSetTransStatus(xid, status, false);
574574
XTM_INFO("Abort transaction %d\n", xid);
575575
return;
@@ -592,7 +592,7 @@ static void DtmSetTransactionStatus(TransactionId xid, int nsubxids, Transaction
592592
status = gs;
593593
}
594594
}
595-
CLOGTransactionIdSetTreeStatus(xid, nsubxids, subxids, status, lsn);
595+
PgTransactionIdSetTreeStatus(xid, nsubxids, subxids, status, lsn);
596596
}
597597

598598
static uint32 dtm_xid_hash_fn(const void *key, Size keysize)

src/backend/access/transam/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ include $(top_builddir)/src/Makefile.global
1515
OBJS = clog.o commit_ts.o multixact.o parallel.o rmgr.o slru.o subtrans.o \
1616
timeline.o transam.o twophase.o twophase_rmgr.o varsup.o \
1717
xact.o xlog.o xlogarchive.o xlogfuncs.o \
18-
xloginsert.o xlogreader.o xlogutils.o
18+
xloginsert.o xlogreader.o xlogutils.o xtm.o
1919

2020
include $(top_srcdir)/src/backend/common.mk
2121

src/backend/access/transam/clog.c

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -44,30 +44,6 @@
4444
#include "miscadmin.h"
4545
#include "pg_trace.h"
4646

47-
static TransactionId GetGlobalTransactionId(void);
48-
49-
TransactionId GetGlobalTransactionId(void)
50-
{
51-
return InvalidTransactionId;
52-
}
53-
54-
TransactionManager DefaultTM = {
55-
CLOGTransactionIdGetStatus,
56-
CLOGTransactionIdSetTreeStatus,
57-
GetLocalSnapshotData,
58-
GetNewLocalTransactionId,
59-
GetOldestLocalXmin,
60-
TransactionIdIsRunning,
61-
GetGlobalTransactionId
62-
};
63-
64-
TransactionManager* TM = &DefaultTM;
65-
66-
TransactionManager* GetTransactionManager(void)
67-
{
68-
return TM;
69-
}
70-
7147
/*
7248
* Defines for CLOG page sizes. A page is the same BLCKSZ as is used
7349
* everywhere else in Postgres.
@@ -178,7 +154,7 @@ TransactionIdSetTreeStatus(TransactionId xid, int nsubxids,
178154
* cache yet.
179155
*/
180156
void
181-
CLOGTransactionIdSetTreeStatus(TransactionId xid, int nsubxids,
157+
PgTransactionIdSetTreeStatus(TransactionId xid, int nsubxids,
182158
TransactionId *subxids, XidStatus status, XLogRecPtr lsn)
183159
{
184160
int pageno = TransactionIdToPage(xid); /* get page of parent */
@@ -428,7 +404,7 @@ TransactionIdGetStatus(TransactionId xid, XLogRecPtr *lsn)
428404
}
429405

430406
XidStatus
431-
CLOGTransactionIdGetStatus(TransactionId xid, XLogRecPtr *lsn)
407+
PgTransactionIdGetStatus(TransactionId xid, XLogRecPtr *lsn)
432408
{
433409
int pageno = TransactionIdToPage(xid);
434410
int byteno = TransactionIdToByte(xid);

src/backend/access/transam/varsup.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ GetNewTransactionId(bool isSubXact)
5151
* issue a warning about XID wrap.
5252
*/
5353
TransactionId
54-
GetNewLocalTransactionId(bool isSubXact)
54+
PgGetNewTransactionId(bool isSubXact)
5555
{
5656
TransactionId xid;
5757

src/backend/access/transam/xtm.c

Lines changed: 42 additions & 0 deletions
< 55E td data-grid-cell-id="diff-643d18582d49fe50bb44c4ffa398b84d36d6347c2223523fa628d82202e6d0a1-empty-8-1" data-selected="false" role="gridcell" style="background-color:var(--diffBlob-additionNum-bgColor, var(--diffBlob-addition-bgColor-num));text-align:center" tabindex="-1" valign="top" class="focusable-grid-cell diff-line-number position-relative left-side">8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*-------------------------------------------------------------------------
2+
*
3+
* xtm.c
4+
* PostgreSQL implementation of transaction manager protocol
5+
*
6+
* This module defines default iplementaiton of PostgreSQL transaction manager protocol
7+
*
+
* Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
9+
* Portions Copyright (c) 1994, Regents of the University of California
10+
*
11+
* src/backend/access/transam/clog.c
12+
*
13+
*-------------------------------------------------------------------------
14+
*/
15+
16+
#include "postgres.h"
17+
18+
#include "access/transam.h"
19+
#include "access/xtm.h"
20+
21+
TransactionId PgGetGlobalTransactionId(void)
22+
{
23+
return InvalidTransactionId;
24+
}
25+
26+
TransactionManager PgTM = {
27+
PgTransactionIdGetStatus,
28+
PgTransactionIdSetTreeStatus,
29+
PgGetSnapshotData,
30+
PgGetNewTransactionId,
31+
PgGetOldestXmin,
32+
PgTransactionIdIsInProgress,
33+
PgGetGlobalTransactionId,
34+
PgXidInMVCCSnapshot
35+
};
36+
37+
TransactionManager* TM = &PgTM;
38+
39+
TransactionManager* GetTransactionManager(void)
40+
{
41+
return TM;
42+
}

src/backend/storage/ipc/procarray.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -995,7 +995,7 @@ TransactionIdIsInProgress(TransactionId xid)
995995
* PGXACT again anyway; see GetNewTransactionId).
996996
*/
997997
bool
998-
TransactionIdIsRunning(TransactionId xid)
998+
PgTransactionIdIsInProgress(TransactionId xid)
999999
{
10001000
static TransactionId *xids = NULL;
10011001
int nxids = 0;
@@ -1311,7 +1311,7 @@ GetOldestXmin(Relation rel, bool ignoreVacuum)
13111311
* GetOldestXmin() move backwards, with no consequences for data integrity.
13121312
*/
13131313
TransactionId
1314-
GetOldestLocalXmin(Relation rel, bool ignoreVacuum)
1314+
PgGetOldestXmin(Relation rel, bool ignoreVacuum)
13151315
{
13161316
ProcArrayStruct *arrayP = procArray;
13171317
TransactionId result;
@@ -1515,7 +1515,7 @@ GetSnapshotData(Snapshot snapshot)
15151515
* not statically allocated (see xip allocation below).
15161516
*/
15171517
Snapshot
1518-
GetLocalSnapshotData(Snapshot snapshot)
1518+
PgGetSnapshotData(Snapshot snapshot)
15191519
{
15201520
ProcArrayStruct *arrayP = procArray;
15211521
TransactionId xmin;

src/backend/utils/time/tqual.c

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
#include "access/subtrans.h"
6767
#include "access/transam.h"
6868
#include "access/xact.h"
69+
#include "access/xtm.h"
6970
#include "access/xlog.h"
7071
#include "storage/bufmgr.h"
7172
#include "storage/procarray.h"
@@ -83,15 +84,6 @@ SnapshotData SnapshotToastData = {HeapTupleSatisfiesToast};
8384
/* local functions */
8485
static bool XidInMVCCSnapshot(TransactionId xid, Snapshot snapshot);
8586

86-
TransactionVisibilityCallback VisibilityCallback;
87-
88-
TransactionVisibilityCallback RegisterTransactionVisibilityCallback(TransactionVisibilityCallback callback)
89-
{
90-
TransactionVisibilityCallback old = VisibilityCallback;
91-
VisibilityCallback = callback;
92-
return old;
93-
}
94-
9587
/*
9688
* SetHintBits()
9789
*
@@ -1485,15 +1477,6 @@ PgXidInMVCCSnapshot(TransactionId xid, Snapshot snapshot)
14851477
{
14861478
uint32 i;
14871479

1488-
if (VisibilityCallback)
1489-
{
1490-
VisibilityCheckResult result = (*VisibilityCallback)(xid);
1491-
if (result != XID_IN_DOUBT)
1492-
{
1493-
return result == XID_INVISIBLE;
1494-
}
1495-
}
1496-
14971480
/*
14981481
* Make a quick range check to eliminate most XIDs without looking at the
14991482
* xip arrays. Note that this is OK even if we convert a subxact XID to

src/include/access/clog.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,6 @@ extern void TransactionIdSetTreeStatus(TransactionId xid, int nsubxids,
3434
TransactionId *subxids, XidStatus status, XLogRecPtr lsn);
3535
extern XidStatus TransactionIdGetStatus(TransactionId xid, XLogRecPtr *lsn);
3636

37-
extern void CLOGTransactionIdSetTreeStatus(TransactionId xid, int nsubxids,
38-
TransactionId *subxids, XidStatus status, XLogRecPtr lsn);
39-
extern XidStatus CLOGTransactionIdGetStatus(TransactionId xid, XLogRecPtr *lsn);
40-
4137
extern Size CLOGShmemBuffers(void);
4238
extern Size CLOGShmemSize(void);
4339
extern void CLOGShmemInit(void);

src/include/access/transam.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@ extern TransactionId TransactionIdLatest(TransactionId mainxid,
169169
extern XLogRecPtr TransactionIdGetCommitLSN(TransactionId xid);
170170

171171
/* in transam/varsup.c */
172-
extern TransactionId GetNewLocalTransactionId(bool isSubXact);
173172
extern TransactionId GetNewTransactionId(bool isSubXact);
174173
extern TransactionId ReadNewTransactionId(void);
175174
extern void SetTransactionIdLimit(TransactionId oldest_datfrozenxid,

src/include/access/xtm.h

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,32 @@ typedef struct
3737

3838
/* Get global transaction XID: returns XID of current transaction if it is global, InvalidTransactionId otherwise */
3939
TransactionId (*GetGlobalTransactionId)(void);
40-
} TransactionManager;
4140

41+
/* Is the given XID still-in-progress according to the snapshot (encapsulation of XidInMVCCSnapshot in tqual.c) */
42+
bool (*IsInSnapshot)(TransactionId xid, Snapshot snapshot);
43+
} TransactionManager;
4244

45+
/* Get pointer to transaction manager: actually returns content of TM variable */
4346
TransactionManager* GetTransactionManager(void);
4447

45-
extern TransactionManager* TM;
46-
extern TransactionManager DefaultTM;
48+
extern TransactionManager* TM; /* Current transaction manager (can be substituted by extensions) */
49+
extern TransactionManager PgTM; /* Standard PostgreSQL transaction manager */
50+
51+
/* Standard PostgreSQL function implementing TM interface */
52+
extern bool PgXidInMVCCSnapshot(TransactionId xid, Snapshot snapshot);
53+
54+
extern void PgTransactionIdSetTreeStatus(TransactionId xid, int nsubxids,
55+
TransactionId *subxids, XidStatus status, XLogRecPtr lsn);
56+
extern XidStatus PgTransactionIdGetStatus(TransactionId xid, XLogRecPtr *lsn);
57+
58+
extern Snapshot PgGetSnapshotData(Snapshot snapshot);
59+
60+
extern TransactionId PgGetOldestXmin(Relation rel, bool ignoreVacuum);
61+
62+
extern bool PgTransactionIdIsInProgress(TransactionId xid);
63+
64+
extern TransactionId PgGetGlobalTransactionId(void);
65+
66+
extern TransactionId PgGetNewTransactionId(bool isSubXact);
4767

4868
#endif

src/include/storage/procarray.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,21 +43,15 @@ extern void ExpireOldKnownAssignedTransactionIds(TransactionId xid);
4343
extern int GetMaxSnapshotXidCount(void);
4444
extern int GetMaxSnapshotSubxidCount(void);
4545

46-
extern Snapshot GetSnapshotData(Snapshot snapshot);
47-
extern Snapshot GetLocalSnapshotData(Snapshot snapshot);
48-
4946
extern bool ProcArrayInstallImportedXmin(TransactionId xmin,
5047
TransactionId sourcexid);
5148
extern bool ProcArrayInstallRestoredXmin(TransactionId xmin, PGPROC *proc);
5249

5350
extern RunningTransactions GetRunningTransactionData(void);
5451

55-
extern bool TransactionIdIsRunning(TransactionId xid);
5652
extern bool TransactionIdIsInProgress(TransactionId xid);
57-
extern bool TransactionIdIsRunning(TransactionId xid);
5853
extern bool TransactionIdIsActive(TransactionId xid);
5954
extern TransactionId GetOldestXmin(Relation rel, bool ignoreVacuum);
60-
extern TransactionId GetOldestLocalXmin(Relation rel, bool ignoreVacuum);
6155
extern TransactionId GetOldestActiveTransactionId(void);
6256
extern TransactionId GetOldestSafeDecodingTransactionId(void);
6357

src/include/utils/tqual.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -102,13 +102,4 @@ extern bool ResolveCminCmaxDuringDecoding(struct HTAB *tuplecid_data,
102102
Buffer buffer,
103103
CommandId *cmin, CommandId *cmax);
104104

105-
typedef enum VisibilityCheckResult {
106-
XID_IN_DOUBT, XID_VISIBLE, XID_INVISIBLE
107-
} VisibilityCheckResult;
108-
109-
typedef VisibilityCheckResult (*TransactionVisibilityCallback)(TransactionId xid);
110-
111-
extern TransactionVisibilityCallback RegisterTransactionVisibilityCallback(TransactionVisibilityCallback callback);
112-
113-
extern TransactionVisibilityCallback VisibilityCallback;
114105
#endif /* TQUAL_H */

0 commit comments

Comments (0)
0