aboutsummaryrefslogtreecommitdiff
path: root/src/backend/access/transam/xlog.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access/transam/xlog.c')
-rw-r--r--src/backend/access/transam/xlog.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 655563a3d84..3dc00499bfb 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.268 2007/04/30 21:01:52 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.269 2007/05/20 21:08:19 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -784,6 +784,19 @@ begin:;
}
/*
+ * If we backed up any full blocks and online backup is not in progress,
+ * mark the backup blocks as removable. This allows the WAL archiver to
+ * know whether it is safe to compress archived WAL data by transforming
+ * full-block records into the non-full-block format.
+ *
+ * Note: we could just set the flag whenever !forcePageWrites, but
+ * defining it like this leaves the info bit free for some potential
+ * other use in records without any backup blocks.
+ */
+ if ((info & XLR_BKP_BLOCK_MASK) && !Insert->forcePageWrites)
+ info |= XLR_BKP_REMOVABLE;
+
+ /*
* If there isn't enough space on the current XLOG page for a record
* header, advance to the next page (leaving the unused space as zeroes).
*/
@@ -5868,6 +5881,10 @@ xlog_redo(XLogRecPtr lsn, XLogRecord *record)
RecoveryRestartPoint(&checkPoint);
}
+ else if (info == XLOG_NOOP)
+ {
+ /* nothing to do here */
+ }
else if (info == XLOG_SWITCH)
{
/* nothing to do here */
@@ -5894,6 +5911,10 @@ xlog_desc(StringInfo buf, uint8 xl_info, char *rec)
checkpoint->nextMultiOffset,
(info == XLOG_CHECKPOINT_SHUTDOWN) ? "shutdown" : "online");
}
+ else if (info == XLOG_NOOP)
+ {
+ appendStringInfo(buf, "xlog no-op");
+ }
else if (info == XLOG_NEXTOID)
{
Oid nextOid;