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

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

From
Michael Paquier
Date:
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: https://postgr.es/m/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(-)


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

From
Andres Freund
Date:
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: https://postgr.es/m/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



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

From
Michael Paquier
Date:
On Mon, Oct 05, 2020 at 07:38:02PM -0700, Andres Freund wrote:
> My compiler quite justifiably complains about:

Thanks, fixed.
--
Michael

Attachment