Skip to content

Commit 81035a7

Browse files
knizhnikkelvich
authored andcommitted
Restore rule for getting global snapshot
1 parent 6e97853 commit 81035a7

File tree

3 files changed

+7
-3
lines changed

3 files changed

+7
-3
lines changed

contrib/multimaster/multimaster.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ static TransactionId DtmNextXid;
123123
static SnapshotData DtmSnapshot = { HeapTupleSatisfiesMVCC };
124124
static bool DtmHasGlobalSnapshot;
125125
static int DtmLocalXidReserve;
126+
static CommandId DtmCurcid;
126127
static Snapshot DtmLastSnapshot;
127128
static TransactionManager DtmTM = {
128129
DtmGetTransactionStatus,
@@ -630,11 +631,12 @@ static Snapshot DtmGetSnapshot(Snapshot snapshot)
630631
{
631632
if (TransactionIdIsValid(DtmNextXid) && snapshot != &CatalogSnapshotData)
632633
{
633-
if (!DtmHasGlobalSnapshot) {
634+
if (!DtmHasGlobalSnapshot && (snapshot != DtmLastSnapshot || DtmCurcid != GetCurrentCommandId(false))) {
634635
DtmGlobalGetSnapshot(DtmNextXid, &DtmSnapshot, &dtm->minXid);
635636
}
636637
DtmLastSnapshot = snapshot;
637638
DtmMergeWithGlobalSnapshot(snapshot);
639+
DtmCurcid = snapshot->curcid;
638640
if (!IsolationUsesXactSnapshot())
639641
{
640642
/* Use single global snapshot during all transaction for repeatable read isolation level,

contrib/pg_dtm/pg_dtm.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ static SnapshotData DtmSnapshot = { HeapTupleSatisfiesMVCC };
107107
static bool DtmHasGlobalSnapshot;
108108
static bool DtmGlobalXidAssigned;
109109
static int DtmLocalXidReserve;
110+
static CommandId DtmCurcid;
110111
static Snapshot DtmLastSnapshot;
111112
static TransactionManager DtmTM = {
112113
DtmGetTransactionStatus,
@@ -600,7 +601,6 @@ DtmGetNewTransactionId(bool isSubXact)
600601
return xid;
601602
}
602603

603-
604604
static Snapshot DtmGetSnapshot(Snapshot snapshot)
605605
{
606606
if (DtmGlobalXidAssigned)
@@ -613,11 +613,13 @@ static Snapshot DtmGetSnapshot(Snapshot snapshot)
613613
}
614614
if (TransactionIdIsValid(DtmNextXid) && snapshot != &CatalogSnapshotData)
615615
{
616+
// if (!DtmHasGlobalSnapshot && (snapshot != DtmLastSnapshot || DtmCurcid != GetCurrentCommandId(false))) {
616617
if (!DtmHasGlobalSnapshot) {
617618
ArbiterGetSnapshot(DtmNextXid, &DtmSnapshot, &dtm->minXid);
618619
}
619620
DtmLastSnapshot = snapshot;
620621
DtmMergeWithGlobalSnapshot(snapshot);
622+
DtmCurcid = snapshot->curcid;
621623
if (!IsolationUsesXactSnapshot())
622624
{
623625
/* Use single global snapshot during all transaction for repeatable read isolation level,

contrib/pg_dtm/tests/dtmbench.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ struct config
7070
nWriters = 10;
7171
nIterations = 1000;
7272
nAccounts = 1000;
73-
isolationLevel = "read committed";
73+
isolationLevel = "repeatable read";//"read committed";
7474
}
7575
};
7676

0 commit comments

Comments
 (0)