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

Commit6bb3f5a

Browse files
committed
Fix merging of active snapshot
1 parent8ed9197 commit6bb3f5a

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

‎contrib/pg_xtm/pg_dtm.c‎

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ static TransactionId DtmGetNextXid(void);
7373
staticTransactionIdDtmGetNewTransactionId(boolisSubXact);
7474
staticTransactionIdDtmGetOldestXmin(Relationrel,boolignoreVacuum);
7575

76-
staticboolTransactionIdIsInDtmSnapshot(TransactionIdxid);
76+
staticboolTransactionIdIsInSnapshot(TransactionIdxid,Snapshotsnapshot);
7777
staticboolTransactionIdIsInDoubt(TransactionIdxid);
7878

7979
staticvoiddtm_shmem_startup(void);
@@ -119,18 +119,18 @@ static void DumpSnapshot(Snapshot s, char *name)
119119
XTM_INFO("%s\n",buf);
120120
}
121121

122-
staticboolTransactionIdIsInDtmSnapshot(TransactionIdxid)
122+
staticboolTransactionIdIsInSnapshot(TransactionIdxid,Snapshotsnapshot)
123123
{
124-
returnxid >=DtmSnapshot.xmax
125-
||bsearch(&xid,DtmSnapshot.xip,DtmSnapshot.xcnt,sizeof(TransactionId),xidComparator)!=NULL;
124+
returnxid >=snapshot->xmax
125+
||bsearch(&xid,snapshot->xip,snapshot->xcnt,sizeof(TransactionId),xidComparator)!=NULL;
126126
}
127127

128128

129129
staticboolTransactionIdIsInDoubt(TransactionIdxid)
130130
{
131131
boolinDoubt;
132132

133-
if (!TransactionIdIsInDtmSnapshot(xid)) {
133+
if (!TransactionIdIsInSnapshot(xid,&DtmSnapshot)) {
134134
LWLockAcquire(dtm->hashLock,LW_SHARED);
135135
inDoubt=hash_search(xid_in_doubt,&xid,HASH_FIND,NULL)!=NULL;
136136
LWLockRelease(dtm->hashLock);
@@ -175,8 +175,23 @@ static void DtmMergeSnapshots(Snapshot dst, Snapshot src)
175175

176176
staticvoidDtmMergeWithActiveSnapshot(Snapshotdst)
177177
{
178+
inti,j;
179+
XLogRecPtrlsn;
180+
Snapshotsrc=&dtm->activeSnapshot;
181+
178182
LWLockAcquire(dtm->xidLock,LW_EXCLUSIVE);
179-
DtmMergeSnapshots(dst,&dtm->activeSnapshot);
183+
for (i=0,j=0;i<src->xcnt;i++) {
184+
if (!TransactionIdIsInSnapshot(src->xip[i],dst)
185+
&&DtmGetTransactionStatus(src->xip[i],&lsn)==TRANSACTION_STATUS_IN_PROGRESS)
186+
{
187+
src->xip[j++]=src->xip[i];
188+
}
189+
}
190+
src->xcnt=j;
191+
if (j!=0) {
192+
src->xmin=src->xip[0];
193+
DtmMergeSnapshots(dst,src);
194+
}
180195
LWLockRelease(dtm->xidLock);
181196
}
182197

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp