pgsql: Add block information in error context of WAL REDO apply loop

Started by Michael Paquieralmost 6 years ago3 messagescomitters
Jump to latest
#1Michael Paquier
michael@paquier.xyz

Add block information in error context of WAL REDO apply loop

Providing this information can be useful for example when diagnosing
problems related to recovery conflicts or for recovery issues without
having to go through the output generated by pg_waldump to get some
information about the blocks a WAL record works on.

The block information is printed in the same format as pg_waldump. This
already existed in xlog.c for debugging purposes with -DWAL_DEBUG, so
adding the block information in the callback has required just a small
refactoring.

Author: Bertrand Drouvot
Reviewed-by: Michael Paquier, Masahiko Sawada
Discussion: /messages/by-id/c31e2cba-efda-762c-f4ad-5c25e5dac3d0@amazon.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/9d0bd95fa90a7243047a74e29f265296a9fc556d

Modified Files
--------------
src/backend/access/transam/xlog.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)

#2Andres Freund
andres@anarazel.de
In reply to: Michael Paquier (#1)
Re: pgsql: Add block information in error context of WAL REDO apply loop

Hi,

On 2020-10-02 00:41:12 +0000, Michael Paquier wrote:

Add block information in error context of WAL REDO apply loop

Providing this information can be useful for example when diagnosing
problems related to recovery conflicts or for recovery issues without
having to go through the output generated by pg_waldump to get some
information about the blocks a WAL record works on.

The block information is printed in the same format as pg_waldump. This
already existed in xlog.c for debugging purposes with -DWAL_DEBUG, so
adding the block information in the callback has required just a small
refactoring.

Author: Bertrand Drouvot
Reviewed-by: Michael Paquier, Masahiko Sawada
Discussion: /messages/by-id/c31e2cba-efda-762c-f4ad-5c25e5dac3d0@amazon.com

My compiler quite justifiably complains about:

+#endif                          /* WAL_DEBUG */
+
+/*
+ * Returns a string giving information about all the blocks in an
+ * XLogRecord.
+ */
+static void
+xlog_block_info(StringInfo buf, XLogReaderState *record)
+{
+    int         block_id;
+
     /* decode block references */
     for (block_id = 0; block_id <= record->max_block_id; block_id++)
     {
@@ -10284,7 +10298,6 @@ xlog_outrec(StringInfo buf, XLogReaderState *record)
             appendStringInfoString(buf, " FPW");
     }
 }
-#endif                          /* WAL_DEBUG */

because as far as I can see there's no remaining use of block_id in
xlog_outrec() after this change.

Greetings,

Andres Freund

#3Michael Paquier
michael@paquier.xyz
In reply to: Andres Freund (#2)
Re: pgsql: Add block information in error context of WAL REDO apply loop

On Mon, Oct 05, 2020 at 07:38:02PM -0700, Andres Freund wrote:

My compiler quite justifiably complains about:

Thanks, fixed.
--
Michael