On 02.12.23 15:06, Bharath Rupireddy wrote:
I enabled this code by compiling with the WAL_DEBUG macro and setting
wal_debug GUC to on. Firstly, the compilation on Windows failed
because XL_ROUTINE was passed inappropriately for XLogReaderAllocate()
used.
This kind of thing could be mostly avoided if we didn't hide all the
WAL_DEBUG behind #ifdefs. For example, in the attached patch, I instead
changed it so that
if (XLOG_DEBUG)
resolves to
if (false)
in the normal case. That way, we don't need to wrap that in #ifdef
WAL_DEBUG, and the compiler can see the disabled code and make sure it
continues to build.
From 93c74462c3e253f3ce9fd1beba1f09290988de8c Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
Date: Wed, 6 Dec 2023 12:22:38 +0100
Subject: [PATCH] Make WAL_DEBUG code harder to break accidentally
---
src/backend/access/transam/generic_xlog.c | 2 --
src/backend/access/transam/xlog.c | 10 ----------
src/backend/access/transam/xlogrecovery.c | 7 -------
src/include/access/xlog.h | 2 ++
4 files changed, 2 insertions(+), 19 deletions(-)
diff --git a/src/backend/access/transam/generic_xlog.c
b/src/backend/access/transam/generic_xlog.c
index abd9e1c749..5b910f1024 100644
--- a/src/backend/access/transam/generic_xlog.c
+++ b/src/backend/access/transam/generic_xlog.c
@@ -248,7 +248,6 @@ computeDelta(PageData *pageData, Page curpage, Page
targetpage)
* If xlog debug is enabled, then check produced delta. Result of delta
* application to curpage should be equivalent to targetpage.
*/
-#ifdef WAL_DEBUG
if (XLOG_DEBUG)
{
PGAlignedBlock tmp;
@@ -260,7 +259,6 @@ computeDelta(PageData *pageData, Page curpage, Page
targetpage)
BLCKSZ - targetUpper) != 0)
elog(ERROR, "result of generic xlog apply does not
match");
}
-#endif
}
/*
diff --git a/src/backend/access/transam/xlog.c
b/src/backend/access/transam/xlog.c
index 2d603d8dee..3a7a38a100 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -644,9 +644,7 @@ static bool updateMinRecoveryPoint = true;
static int MyLockNo = 0;
static bool holdingAllLocks = false;
-#ifdef WAL_DEBUG
static MemoryContext walDebugCxt = NULL;
-#endif
static void CleanupAfterArchiveRecovery(TimeLineID EndOfLogTLI,
XLogRecPtr EndOfLog,
@@ -997,7 +995,6 @@ XLogInsertRecord(XLogRecData *rdata,
}
}
-#ifdef WAL_DEBUG
if (XLOG_DEBUG)
{
static XLogReaderState *debug_reader = NULL;
@@ -1061,7 +1058,6 @@ XLogInsertRecord(XLogRecData *rdata,
pfree(recordBuf.data);
MemoryContextSwitchTo(oldCxt);
}
-#endif
/*
* Update our global variables
@@ -1997,13 +1993,11 @@ AdvanceXLInsertBuffer(XLogRecPtr upto, TimeLineID tli,
bool opportunistic)
}
LWLockRelease(WALBufMappingLock);
-#ifdef WAL_DEBUG
if (XLOG_DEBUG && npages > 0)
{
elog(DEBUG1, "initialized %d pages, up to %X/%X",
npages, LSN_FORMAT_ARGS(NewPageEndPtr));
}
-#endif
}
/*
@@ -2641,13 +2635,11 @@ XLogFlush(XLogRecPtr record)
if (record <= LogwrtResult.Flush)
return;
-#ifdef WAL_DEBUG
if (XLOG_DEBUG)
elog(LOG, "xlog flush request %X/%X; write %X/%X; flush %X/%X",
LSN_FORMAT_ARGS(record),
LSN_FORMAT_ARGS(LogwrtResult.Write),
LSN_FORMAT_ARGS(LogwrtResult.Flush));
-#endif
START_CRIT_SECTION();
@@ -2903,14 +2895,12 @@ XLogBackgroundFlush(void)
WriteRqst.Flush = 0;
}
-#ifdef WAL_DEBUG
if (XLOG_DEBUG)
elog(LOG, "xlog bg flush request write %X/%X; flush: %X/%X,
current is write %X/%X; flush %X/%X",
LSN_FORMAT_ARGS(WriteRqst.Write),
LSN_FORMAT_ARGS(WriteRqst.Flush),
LSN_FORMAT_ARGS(LogwrtResult.Write),
LSN_FORMAT_ARGS(LogwrtResult.Flush));
-#endif
START_CRIT_SECTION();
diff --git a/src/backend/access/transam/xlogrecovery.c
b/src/backend/access/transam/xlogrecovery.c
index c61566666a..26ba990b71 100644
--- a/src/backend/access/transam/xlogrecovery.c
+++ b/src/backend/access/transam/xlogrecovery.c
@@ -396,9 +396,7 @@ static bool read_tablespace_map(List **tablespaces);
static void xlogrecovery_redo(XLogReaderState *record, TimeLineID replayTLI);
static void CheckRecoveryConsistency(void);
static void rm_redo_error_callback(void *arg);
-#ifdef WAL_DEBUG
static void xlog_outrec(StringInfo buf, XLogReaderState *record);
-#endif
static void xlog_block_info(StringInfo buf, XLogReaderState *record);
static void checkTimeLineSwitch(XLogRecPtr lsn, TimeLineID newTLI,
TimeLineID
prevTLI, TimeLineID replayTLI);
@@ -1703,7 +1701,6 @@ PerformWalRecovery(void)
ereport_startup_progress("redo in progress,
elapsed time: %ld.%02d s, current LSN: %X/%X",
LSN_FORMAT_ARGS(xlogreader->ReadRecPtr));
-#ifdef WAL_DEBUG
if (XLOG_DEBUG ||
(record->xl_rmid == RM_XACT_ID &&
trace_recovery_messages <= DEBUG2) ||
(record->xl_rmid != RM_XACT_ID &&
trace_recovery_messages <= DEBUG3))
@@ -1720,7 +1717,6 @@ PerformWalRecovery(void)
elog(LOG, "%s", buf.data);
pfree(buf.data);
}
-#endif
/* Handle interrupt signals of startup process */
HandleStartupProcInterrupts();
@@ -2256,8 +2252,6 @@ xlog_outdesc(StringInfo buf, XLogReaderState *record)
rmgr.rm_desc(buf, record);
}
-#ifdef WAL_DEBUG
-
static void
xlog_outrec(StringInfo buf, XLogReaderState *record)
{
@@ -2270,7 +2264,6 @@ xlog_outrec(StringInfo buf, XLogReaderState *record)
xlog_block_info(buf, record);
}
-#endif /* WAL_DEBUG */
/*
* Returns a string giving information about all the blocks in an
diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h
index a14126d164..698dd79c2d 100644
--- a/src/include/access/xlog.h
+++ b/src/include/access/xlog.h
@@ -125,6 +125,8 @@ extern PGDLLIMPORT int wal_level;
#ifdef WAL_DEBUG
extern PGDLLIMPORT bool XLOG_DEBUG;
+#else
+#define XLOG_DEBUG false
#endif
/*
--
2.43.0