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

Commit7bf713d

Browse files
committed
Fix theoretical torn page hazard.
The original report was concerned with a possible inconsistencybetween the heap and the visibility map, which I was unable toconfirm. The concern has been retracted.However, there did seem to be a torn page hazard when usingchecksums. By not setting the heap page LSN during redo, theprotections of minRecoveryPoint were bypassed. Fixed, along with amisleading comment.It may have been impossible to hit this problem in practice, becauseit would require a page tear between the checksum and the flags, so Iam marking this as a theoretical risk. But, as discussed, it didviolate expectations about the page LSN, so it may have otherconsequences.Backpatch to all supported versions.Reported-by: Konstantin KnizhnikReviewed-by: Konstantin KnizhnikDiscussion:https://postgr.es/m/fed17dac-8cb8-4f5b-d462-1bb4908c029e@garret.ruBackpatch-through: 11
1 parent9c1a4fc commit7bf713d

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

‎src/backend/access/heap/heapam.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8823,8 +8823,7 @@ heap_xlog_visible(XLogReaderState *record)
88238823
/*
88248824
* We don't bump the LSN of the heap page when setting the visibility
88258825
* map bit (unless checksums or wal_hint_bits is enabled, in which
8826-
* case we must), because that would generate an unworkable volume of
8827-
* full-page writes. This exposes us to torn page hazards, but since
8826+
* case we must). This exposes us to torn page hazards, but since
88288827
* we're not inspecting the existing page contents in any way, we
88298828
* don't care.
88308829
*
@@ -8838,6 +8837,9 @@ heap_xlog_visible(XLogReaderState *record)
88388837

88398838
PageSetAllVisible(page);
88408839

8840+
if (XLogHintBitIsNeeded())
8841+
PageSetLSN(page,lsn);
8842+
88418843
MarkBufferDirty(buffer);
88428844
}
88438845
elseif (action==BLK_RESTORED)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp