Re: [PATCH] Expose checkpoint reason to completion log messages.
Michael Banck <mbanck@gmx.net>
From: Michael Banck <mbanck@gmx.net>
To: Soumya S Murali <soumyamurali.work@gmail.com>
Cc: Fujii Masao <masao.fujii@gmail.com>, VASUKI M <vasukianand0119@gmail.com>, Andres Freund <andres@anarazel.de>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Álvaro Herrera <alvherre@kurilemu.de>, melanieplageman@gmail.com, juanjo.santamaria@gmail.com
Date: 2026-01-12T10:26:58Z
Lists: pgsql-hackers
Hi,
On Mon, Jan 12, 2026 at 12:53:54PM +0530, Soumya S Murali wrote:
> Based on the feedback received, I have reworked and implemented a
> helper function so that both checkpoint start and completion messages
> use the same wording and would remain in sync, extending the same
> reason reporting to restart points for completeness and better
> observability, ensuring consistent terminology with existing log
> output, had removed the previous use of global state and instead
> passed checkpoint flags explicitly and have fixed formatting and
> whitespace issues noted during review.
> Also, I have tested and validated the logic successfully. I have
> attached the updated patch for further review.
> Kindly review the patch and let me know the feedback.
>
> Regards,
> Soumya
> From 30e3c62695a643daf96ffca3b504a79d2a761f77 Mon Sep 17 00:00:00 2001
> From: Soumya <soumyamurali.work@gmail.com>
> Date: Mon, 12 Jan 2026 12:36:29 +0530
> Subject: [PATCH] Expose checkpoint reason in completion log messages
>
> ---
> src/backend/access/transam/xlog.c | 78 ++++++++++++++++-------
> src/test/recovery/t/019_replslot_limit.pl | 2 +-
> 2 files changed, 55 insertions(+), 25 deletions(-)
>
> diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
> index 22d0a2e8c3..63d1e56ca1 100644
> --- a/src/backend/access/transam/xlog.c
> +++ b/src/backend/access/transam/xlog.c
> @@ -6714,6 +6714,49 @@ ShutdownXLOG(int code, Datum arg)
> }
> }
>
> +/*
> +* Format checkpoint reason flags consistently for log messages.
> +* The returned string is suitable for inclusion after
> +* "checkpoint starting:" or inside "checkpoint complete (...)".
> +*/
Indentation of the comment is wrong here, the asterisks should be all on
the same column.
> +static const char *
> +CheckpointReasonString(int flags)
> +{
> + static char buf[128];
> + bool first = true;
pgindent complains about the above line as well:
| {
| static char buf[128];
|- bool first = true;
|+ bool first = true;
|
| buf[0] = '\0';
> + buf[0] = '\0';
> +
> +#define APPEND_REASON(str) \
> + do { \
> + if (!first) \
> + strcat(buf, " "); \
> + strcat(buf, (str)); \
> + first = false; \
> + } while (0)
Those ending backslashes also don't seem to line up when 4-space tabs
are set. But pgindent doesn't change them so maybe it is correct as-is?
I am also not sure whether the above is current best-practise for
Postgres code, I'd have to look deeper (or maybe somebody else can
review this).
> + if (flags & CHECKPOINT_IS_SHUTDOWN)
> + APPEND_REASON("shutdown");
> + if (flags & CHECKPOINT_END_OF_RECOVERY)
> + APPEND_REASON("end-of-recovery");
> + if (flags & CHECKPOINT_FAST)
> + APPEND_REASON("fast");
> + if (flags & CHECKPOINT_FORCE)
> + APPEND_REASON("force");
> + if (flags & CHECKPOINT_WAIT)
> + APPEND_REASON("wait");
> + if (flags & CHECKPOINT_CAUSE_XLOG)
> + APPEND_REASON("wal");
> + if (flags & CHECKPOINT_CAUSE_TIME)
> + APPEND_REASON("time");
> + if (flags & CHECKPOINT_FLUSH_UNLOGGED)
> + APPEND_REASON("flush-unlogged");
> +
> +#undef APPEND_REASON
> +
> + return buf;
I am still not sure whether this will be a regression for translation of
those strings.
Otherwise, the patch looks sane to me.
Michael
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Log checkpoint request flags in checkpoint completion messages.
- 5b93a5987bd7 19 (unreleased) landed