summaryrefslogtreecommitdiff
path: root/src/backend/access/heap/heapam.c
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2015-06-26 12:38:24 +0300
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2015-06-26 12:39:22 +0300
commitb6c4b58ac52aa9046c45bd8c2c9fc8925087c8d3 (patch)
treef8e0251f30c086028bdb203b4af995d84f79d8d9 /src/backend/access/heap/heapam.c
parent8364510a463a06375d237de19dcae929e7fb8360 (diff)
Fix a couple of bugs with wal_log_hints.
1. Replay of the WAL record for setting a bit in the visibility map contained an assertion that a full-page image of that record type can only occur with checksums enabled. But it can also happen with wal_log_hints, so remove the assertion. Unlike checksums, wal_log_hints can be changed on the fly, so it would be complicated to figure out if it was enabled at the time that the WAL record was generated. 2. wal_log_hints has the same effect on the locking needed to read the LSN of a page as data checksums. BufferGetLSNAtomic() didn't get the memo. Backpatch to 9.4, where wal_log_hints was added.
Diffstat (limited to 'src/backend/access/heap/heapam.c')
-rw-r--r--src/backend/access/heap/heapam.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 2209db1d96b..2e3b9d2c2b7 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -7413,12 +7413,11 @@ heap_xlog_visible(XLogRecPtr lsn, XLogRecord *record)
ResolveRecoveryConflictWithSnapshot(xlrec->cutoff_xid, xlrec->node);
/*
- * If heap block was backed up, restore it. This can only happen with
- * checksums enabled.
+ * If heap block was backed up, restore it. (This can only happen with
+ * checksums or wal_log_hints enabled).
*/
if (record->xl_info & XLR_BKP_BLOCK(1))
{
- Assert(DataChecksumsEnabled());
(void) RestoreBackupBlock(lsn, record, 1, false, false);
}
else
@@ -7441,11 +7440,11 @@ heap_xlog_visible(XLogRecPtr lsn, XLogRecord *record)
/*
* We don't bump the LSN of the heap page when setting the
- * visibility map bit (unless checksums are enabled, in which case
- * we must), because that would generate an unworkable volume of
- * full-page writes. This exposes us to torn page hazards, but
- * since we're not inspecting the existing page contents in any
- * way, we don't care.
+ * visibility map bit (unless checksums or wal_log_hints is
+ * enabled, in which case we must), because that would generate an
+ * unworkable volume of full-page writes. This exposes us to torn
+ * page hazards, but since we're not inspecting the existing page
+ * contents in any way, we don't care.
*
* However, all operations that clear the visibility map bit *do*
* bump the LSN, and those operations will only be replayed if the