Improve error messages for some callers of XLogReadRecord()
authorMichael Paquier
Wed, 10 Nov 2021 03:00:33 +0000 (12:00 +0900)
committerMichael Paquier
Wed, 10 Nov 2021 03:00:33 +0000 (12:00 +0900)
A couple of code paths related to logical decoding (WAL sender, slot
advancing, etc.) use XLogReadRecord(), feeding on error messages
generated by walreader.c on a failure.  All those messages have no
context, making it harder to spot from where an error could come even if
these should not happen.  All the other callers of XLogReadRecord() do
that already.

Reviewed-by: Kyotaro Horiguchi
Discussion: https://postgr.es/m/[email protected]

src/backend/replication/logical/logical.c
src/backend/replication/logical/logicalfuncs.c
src/backend/replication/slotfuncs.c
src/backend/replication/walsender.c

index aae0ae5b8aaba01d4fdc37edc87381d7eb194dfc..b7d95215764d77a19884bf36004d80c01c568da3 100644 (file)
@@ -605,9 +605,9 @@ DecodingContextFindStartpoint(LogicalDecodingContext *ctx)
        /* the read_page callback waits for new WAL */
        record = XLogReadRecord(ctx->reader, &err);
        if (err)
-           elog(ERROR, "%s", err);
+           elog(ERROR, "could not find logical decoding starting point: %s", err);
        if (!record)
-           elog(ERROR, "no record found"); /* shouldn't happen */
+           elog(ERROR, "could not find logical decoding starting point");
 
        LogicalDecodingProcessRecord(ctx, ctx->reader);
 
index 2609a0a71048bcea357100baa9df32eabafb1ab5..6cd2279a2e3eb497202fcf7ee79cf2e72b8f3ba8 100644 (file)
@@ -276,7 +276,7 @@ pg_logical_slot_get_changes_guts(FunctionCallInfo fcinfo, bool confirm, bool bin
 
            record = XLogReadRecord(ctx->reader, &errm);
            if (errm)
-               elog(ERROR, "%s", errm);
+               elog(ERROR, "could not find record for logical decoding: %s", errm);
 
            /*
             * The {begin_txn,change,commit_txn}_wrapper callbacks above will
index a80298ba53dea2966c6c17a57733611e365c4e23..46175b7007051d6766e9a1c4c99663e4d25cb680 100644 (file)
@@ -529,7 +529,8 @@ pg_logical_replication_slot_advance(XLogRecPtr moveto)
             */
            record = XLogReadRecord(ctx->reader, &errm);
            if (errm)
-               elog(ERROR, "%s", errm);
+               elog(ERROR, "could not find record while advancing replication slot: %s",
+                    errm);
 
            /*
             * Process the record.  Storage-level changes are ignored in
index fff7dfc64098fe63ca7ec6eeed6bace9757565ad..7950afb173c7e119efa3c1b85e9ddd7fb6b431a0 100644 (file)
@@ -2979,7 +2979,8 @@ XLogSendLogical(void)
 
    /* xlog record was invalid */
    if (errm != NULL)
-       elog(ERROR, "%s", errm);
+       elog(ERROR, "could not find record while sending logically-decoded data: %s",
+            errm);
 
    if (record != NULL)
    {