During online checkpoints, insert XLOG_CHECKPOINT_REDO at redo point.
authorRobert Haas <rhaas@postgresql.org>
Thu, 19 Oct 2023 18:47:29 +0000 (14:47 -0400)
committerRobert Haas <rhaas@postgresql.org>
Thu, 19 Oct 2023 18:47:29 +0000 (14:47 -0400)
commitafd12774ae8957159cf77ba4b3d092691f87af53
tree5d90a995cd7fb1327d6d91ddd73ead58a7f0b750
parent8483a54b7da709c6f381f2dd06085a67ecf669ba
During online checkpoints, insert XLOG_CHECKPOINT_REDO at redo point.

This allows tools that read the WAL sequentially to identify (possible)
redo points when they're reached, rather than only being able to
detect them in retrospect when XLOG_CHECKPOINT_ONLINE is found, possibly
much later in the WAL stream. There are other possible applications as
well; see the discussion links below.

Any redo location that precedes the checkpoint location should now point
to an XLOG_CHECKPOINT_REDO record, so add a cross-check to verify this.

While adjusting the code in CreateCheckPoint() for this patch, I made it
call WALInsertLockAcquireExclusive a bit later than before, since there
appears to be no need for it to be held while checking whether the system
is idle, whether this is an end-of-recovery checkpoint, or what the current
timeline is.

Bump XLOG_PAGE_MAGIC.

Patch by me, based in part on earlier work from Dilip Kumar. Review by
Dilip Kumar, Amit Kapila, Andres Freund, and Michael Paquier.

Discussion: http://postgr.es/m/CA+TgmoYy-Vc6G9QKcAKNksCa29cv__czr+N9X_QCxEfQVpp_8w@mail.gmail.com
Discussion: http://postgr.es/m/20230614194717.jyuw3okxup4cvtbt%40awork3.anarazel.de
Discussion: http://postgr.es/m/CA+hUKG+b2ego8=YNW2Ohe9QmSiReh1-ogrv8V_WZpJTqP3O+2w@mail.gmail.com
contrib/pg_walinspect/expected/pg_walinspect.out
contrib/pg_walinspect/sql/pg_walinspect.sql
src/backend/access/rmgrdesc/xlogdesc.c
src/backend/access/transam/xlog.c
src/backend/access/transam/xlogrecovery.c
src/backend/replication/logical/decode.c
src/include/access/xlog_internal.h
src/include/catalog/pg_control.h
src/tools/pgindent/typedefs.list