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

Commitaf5213a

Browse files
committed
Detect too late snapshot
1 parentf35faf8 commitaf5213a

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

‎contrib/multimaster/multimaster.c‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ static XidStatus DtmGetTransactionStatus(TransactionId xid, XLogRecPtr *lsn);
8888
staticvoidDtmSetTransactionStatus(TransactionIdxid,intnsubxids,TransactionId*subxids,XidStatusstatus,XLogRecPtrlsn);
8989
staticvoidDtmUpdateRecentXmin(Snapshotsnapshot);
9090
staticvoidDtmInitialize(void);
91+
staticvoidDtmSubXactCallback(XactEventevent,void*arg);
9192
staticvoidDtmXactCallback(XactEventevent,void*arg);
9293
staticTransactionIdDtmGetNextXid(void);
9394
staticTransactionIdDtmGetNewTransactionId(boolisSubXact);
@@ -733,6 +734,7 @@ static void DtmInitialize()
733734
dtm->initialized= false;
734735
BgwPoolInit(&dtm->pool,MMExecutor,MMDatabaseName,MMQueueSize);
735736
RegisterXactCallback(DtmXactCallback,NULL);
737+
RegisterSubXactCallback(DtmSubXactCallback,NULL);
736738
}
737739
LWLockRelease(AddinShmemInitLock);
738740

@@ -762,6 +764,12 @@ static void DtmInitialize()
762764
TM=&DtmTM;
763765
}
764766

767+
staticvoid
768+
DtmSubXactCallback(XactEventevent,void*arg)
769+
{
770+
elog(ERROR,"Subtransactions are not currently supported");
771+
}
772+
765773
staticvoid
766774
DtmXactCallback(XactEventevent,void*arg)
767775
{

‎contrib/pg_dtm/pg_dtm.c‎

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ static XidStatus DtmGetTransactionStatus(TransactionId xid, XLogRecPtr *lsn);
7474
staticvoidDtmSetTransactionStatus(TransactionIdxid,intnsubxids,TransactionId*subxids,XidStatusstatus,XLogRecPtrlsn);
7575
staticvoidDtmUpdateRecentXmin(Snapshotsnapshot);
7676
staticvoidDtmInitialize(void);
77+
staticvoidDtmSubXactCallback(XactEventevent,void*arg);
7778
staticvoidDtmXactCallback(XactEventevent,void*arg);
7879
staticTransactionIdDtmGetNextXid(void);
7980
staticTransactionIdDtmGetNewTransactionId(boolisSubXact);
@@ -105,7 +106,6 @@ static SnapshotData DtmSnapshot = { HeapTupleSatisfiesMVCC };
105106
staticboolDtmHasGlobalSnapshot;
106107
staticboolDtmGlobalXidAssigned;
107108
staticintDtmLocalXidReserve;
108-
staticintDtmCurcid;
109109
staticSnapshotDtmLastSnapshot;
110110
staticTransactionManagerDtmTM= {
111111
DtmGetTransactionStatus,
@@ -605,9 +605,9 @@ static Snapshot DtmGetSnapshot(Snapshot snapshot)
605605
}
606606
if (TransactionIdIsValid(DtmNextXid)&&snapshot!=&CatalogSnapshotData)
607607
{
608-
if (!DtmHasGlobalSnapshot&& (snapshot!=DtmLastSnapshot||DtmCurcid!=snapshot->curcid))
608+
if (!DtmHasGlobalSnapshot) {
609609
DtmGlobalGetSnapshot(DtmNextXid,&DtmSnapshot,&dtm->minXid);
610-
DtmCurcid=snapshot->curcid;
610+
}
611611
DtmLastSnapshot=snapshot;
612612
DtmMergeWithGlobalSnapshot(snapshot);
613613
if (!IsolationUsesXactSnapshot())
@@ -717,6 +717,7 @@ static void DtmInitialize()
717717
dtm->nReservedXids=0;
718718
dtm->minXid=InvalidTransactionId;
719719
RegisterXactCallback(DtmXactCallback,NULL);
720+
RegisterSubXactCallback(DtmSubXactCallback,NULL);
720721
}
721722
LWLockRelease(AddinShmemInitLock);
722723

@@ -735,6 +736,12 @@ static void DtmInitialize()
735736
TM=&DtmTM;
736737
}
737738

739+
staticvoid
740+
DtmSubXactCallback(XactEventevent,void*arg)
741+
{
742+
elog(ERROR,"Subtransactions are not currently supported");
743+
}
744+
738745
staticvoid
739746
DtmXactCallback(XactEventevent,void*arg)
740747
{

‎contrib/pg_tsdtm/pg_dtm.c‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ static cid_t dtm_sync(cid_t global_cid)
176176
SpinLockAcquire(&local->lock);
177177
}
178178
#endif
179-
returnglobal_cid;
179+
returnlocal_cid;
180180
}
181181

182182
void
@@ -641,7 +641,10 @@ cid_t DtmLocalAccess(DtmCurrentTrans* x, GlobalTransactionId gtid, cid_t global_
641641
x->is_global= true;
642642
}
643643
SpinLockRelease(&local->lock);
644-
returnlocal_cid;
644+
if (global_cid<local_cid-DtmVacuumDelay*USEC) {
645+
elog(ERROR,"Too old snapshot");
646+
}
647+
returnglobal_cid;
645648
}
646649

647650
voidDtmLocalBeginPrepare(GlobalTransactionIdgtid)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp