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

Commite1fee28

Browse files
committed
Reset lastOverflowedXid on standby when needed
Currently, lastOverflowedXid is never reset. It's just adjusted on newtransactions known to be overflowed. But if there are no overflowedtransactions for a long time, snapshots could be mistakenly marked assuboverflowed due to wraparound.This commit fixes this issue by resetting lastOverflowedXid when neededaltogether with KnownAssignedXids.Backpatch to all supported versions.Reported-by: Stan HuDiscussion:https://postgr.es/m/CAMBWrQ%3DFp5UAsU_nATY7EMY7NHczG4-DTDU%3DmCvBQZAQ6wa2xQ%40mail.gmail.comAuthor: Kyotaro Horiguchi, Alexander KorotkovReviewed-by: Stan Hu, Simon Riggs, Nikolay Samokhvalov, Andrey Borodin, Dmitry Dolgov
1 parentbf5cdcf commite1fee28

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

‎src/backend/storage/ipc/procarray.c

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3404,24 +3404,41 @@ ExpireTreeKnownAssignedTransactionIds(TransactionId xid, int nsubxids,
34043404

34053405
/*
34063406
* ExpireAllKnownAssignedTransactionIds
3407-
*Remove all entries in KnownAssignedXids
3407+
*Remove all entries in KnownAssignedXids and reset lastOverflowedXid.
34083408
*/
34093409
void
34103410
ExpireAllKnownAssignedTransactionIds(void)
34113411
{
34123412
LWLockAcquire(ProcArrayLock,LW_EXCLUSIVE);
34133413
KnownAssignedXidsRemovePreceding(InvalidTransactionId);
3414+
3415+
/*
3416+
* Reset lastOverflowedXid. Currently, lastOverflowedXid has no use after
3417+
* the call of this function. But do this for unification with what
3418+
* ExpireOldKnownAssignedTransactionIds() do.
3419+
*/
3420+
procArray->lastOverflowedXid=InvalidTransactionId;
34143421
LWLockRelease(ProcArrayLock);
34153422
}
34163423

34173424
/*
34183425
* ExpireOldKnownAssignedTransactionIds
3419-
*Remove KnownAssignedXids entries preceding the given XID
3426+
*Remove KnownAssignedXids entries preceding the given XID and
3427+
*potentially reset lastOverflowedXid.
34203428
*/
34213429
void
34223430
ExpireOldKnownAssignedTransactionIds(TransactionIdxid)
34233431
{
34243432
LWLockAcquire(ProcArrayLock,LW_EXCLUSIVE);
3433+
3434+
/*
3435+
* Reset lastOverflowedXid if we know all transactions that have been
3436+
* possibly running are being gone. Not doing so could cause an incorrect
3437+
* lastOverflowedXid value, which makes extra snapshots be marked as
3438+
* suboverflowed.
3439+
*/
3440+
if (TransactionIdPrecedes(procArray->lastOverflowedXid,xid))
3441+
procArray->lastOverflowedXid=InvalidTransactionId;
34253442
KnownAssignedXidsRemovePreceding(xid);
34263443
LWLockRelease(ProcArrayLock);
34273444
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp