Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4599f99

Browse files
committed
Refectoring of XTM API
1 parentfe853ca commit4599f99

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
staticintDtmLocalXidReserve;
8888
staticintDtmCurcid;
8989
staticSnapshotDtmLastSnapshot;
90-
staticTransactionManagerDtmTM= {DtmGetTransactionStatus,DtmSetTransactionStatus,DtmGetSnapshot,DtmGetNewTransactionId,DtmGetOldestXmin,TransactionIdIsRunning,DtmGetGlobalTransactionId };
90+
staticTransactionManagerDtmTM= {DtmGetTransactionStatus,DtmSetTransactionStatus,DtmGetSnapshot,DtmGetNewTransactionId,DtmGetOldestXmin,PgTransactionIdIsInProgress,DtmGetGlobalTransactionId,PgXidInMVCCSnapshot };
9191

9292

9393
#defineXTM_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
gotoGetLocalSnapshot;
@@ -213,7 +213,7 @@ static void DtmMergeWithGlobalSnapshot(Snapshot dst)
213213
*/
214214
staticTransactionIdDtmGetOldestXmin(Relationrel,boolignoreVacuum)
215215
{
216-
TransactionIdlocalXmin=GetOldestLocalXmin(rel,ignoreVacuum);
216+
TransactionIdlocalXmin=PgGetOldestXmin(rel,ignoreVacuum);
217217
TransactionIdglobalXmin=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-
returnGetLocalSnapshotData(snapshot);
529+
returnPgGetSnapshotData(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
XidStatusstatus=xid >=ShmemVariableCache->nextXid
559559
?TRANSACTION_STATUS_IN_PROGRESS
560-
:CLOGTransactionIdGetStatus(xid,lsn);
560+
:PgTransactionIdGetStatus(xid,lsn);
561561
XTM_TRACE("XTM: DtmGetTransactionStatus\n");
562562
returnstatus;
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
staticuint32dtm_xid_hash_fn(constvoid*key,Sizekeysize)

‎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-
staticTransactionIdGetGlobalTransactionId(void);
48-
49-
TransactionIdGetGlobalTransactionId(void)
50-
{
51-
returnInvalidTransactionId;
52-
}
53-
54-
TransactionManagerDefaultTM= {
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-
returnTM;
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(TransactionIdxid,intnsubxids,
157+
PgTransactionIdSetTreeStatus(TransactionIdxid,intnsubxids,
182158
TransactionId*subxids,XidStatusstatus,XLogRecPtrlsn)
183159
{
184160
intpageno=TransactionIdToPage(xid);/* get page of parent */
@@ -428,7 +404,7 @@ TransactionIdGetStatus(TransactionId xid, XLogRecPtr *lsn)
428404
}
429405

430406
XidStatus
431-
CLOGTransactionIdGetStatus(TransactionIdxid,XLogRecPtr*lsn)
407+
PgTransactionIdGetStatus(TransactionIdxid,XLogRecPtr*lsn)
432408
{
433409
intpageno=TransactionIdToPage(xid);
434410
intbyteno=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(boolisSubXact)
54+
PgGetNewTransactionId(boolisSubXact)
5555
{
5656
TransactionIdxid;
5757

‎src/backend/access/transam/xtm.c‎

Lines changed: 42 additions & 0 deletions
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+
*
8+
* 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+
TransactionIdPgGetGlobalTransactionId(void)
22+
{
23+
returnInvalidTransactionId;
24+
}
25+
26+
TransactionManagerPgTM= {
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+
returnTM;
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(TransactionIdxid)
998+
PgTransactionIdIsInProgress(TransactionIdxid)
999999
{
10001000
staticTransactionId*xids=NULL;
10011001
intnxids=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(Relationrel,boolignoreVacuum)
1314+
PgGetOldestXmin(Relationrel,boolignoreVacuum)
13151315
{
13161316
ProcArrayStruct*arrayP=procArray;
13171317
TransactionIdresult;
@@ -1515,7 +1515,7 @@ GetSnapshotData(Snapshot snapshot)
15151515
* not statically allocated (see xip allocation below).
15161516
*/
15171517
Snapshot
1518-
GetLocalSnapshotData(Snapshotsnapshot)
1518+
PgGetSnapshotData(Snapshotsnapshot)
15191519
{
15201520
ProcArrayStruct*arrayP=procArray;
15211521
TransactionIdxmin;

‎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
staticboolXidInMVCCSnapshot(TransactionIdxid,Snapshotsnapshot);
8586

86-
TransactionVisibilityCallbackVisibilityCallback;
87-
88-
TransactionVisibilityCallbackRegisterTransactionVisibilityCallback(TransactionVisibilityCallbackcallback)
89-
{
90-
TransactionVisibilityCallbackold=VisibilityCallback;
91-
VisibilityCallback=callback;
92-
returnold;
93-
}
94-
9587
/*
9688
* SetHintBits()
9789
*
@@ -1485,15 +1477,6 @@ PgXidInMVCCSnapshot(TransactionId xid, Snapshot snapshot)
14851477
{
14861478
uint32i;
14871479

1488-
if (VisibilityCallback)
1489-
{
1490-
VisibilityCheckResultresult= (*VisibilityCallback)(xid);
1491-
if (result!=XID_IN_DOUBT)
1492-
{
1493-
returnresult==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,XidStatusstatus,XLogRecPtrlsn);
3535
externXidStatusTransactionIdGetStatus(TransactionIdxid,XLogRecPtr*lsn);
3636

37-
externvoidCLOGTransactionIdSetTreeStatus(TransactionIdxid,intnsubxids,
38-
TransactionId*subxids,XidStatusstatus,XLogRecPtrlsn);
39-
externXidStatusCLOGTransactionIdGetStatus(TransactionIdxid,XLogRecPtr*lsn);
40-
4137
externSizeCLOGShmemBuffers(void);
4238
externSizeCLOGShmemSize(void);
4339
externvoidCLOGShmemInit(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
externXLogRecPtrTransactionIdGetCommitLSN(TransactionIdxid);
170170

171171
/* in transam/varsup.c */
172-
externTransactionIdGetNewLocalTransactionId(boolisSubXact);
173172
externTransactionIdGetNewTransactionId(boolisSubXact);
174173
externTransactionIdReadNewTransactionId(void);
175174
externvoidSetTransactionIdLimit(TransactionIdoldest_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)(TransactionIdxid,Snapshotsnapshot);
43+
}TransactionManager;
4244

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

45-
externTransactionManager*TM;
46-
externTransactionManagerDefaultTM;
48+
externTransactionManager*TM;/* Current transaction manager (can be substituted by extensions) */
49+
externTransactionManagerPgTM;/* Standard PostgreSQL transaction manager */
50+
51+
/* Standard PostgreSQL function implementing TM interface */
52+
externboolPgXidInMVCCSnapshot(TransactionIdxid,Snapshotsnapshot);
53+
54+
externvoidPgTransactionIdSetTreeStatus(TransactionIdxid,intnsubxids,
55+
TransactionId*subxids,XidStatusstatus,XLogRecPtrlsn);
56+
externXidStatusPgTransactionIdGetStatus(TransactionIdxid,XLogRecPtr*lsn);
57+
58+
externSnapshotPgGetSnapshotData(Snapshotsnapshot);
59+
60+
externTransactionIdPgGetOldestXmin(Relationrel,boolignoreVacuum);
61+
62+
externboolPgTransactionIdIsInProgress(TransactionIdxid);
63+
64+
externTransactionIdPgGetGlobalTransactionId(void);
65+
66+
externTransactionIdPgGetNewTransactionId(boolisSubXact);
4767

4868
#endif

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp