Improve stability of subscription/029_on_error.pl
authorMichael Paquier <[email protected]>
Fri, 24 May 2024 02:21:27 +0000 (11:21 +0900)
committerMichael Paquier <[email protected]>
Fri, 24 May 2024 02:21:27 +0000 (11:21 +0900)
This test was failing when using wal_debug=on and -DWAL_DEBUG because of
additional log entries that made the test grab an LSN not mapping with
the error expected in the test.

Previously the test would look for the first matching line to get the
LSN to skip up to.  This is improved by having the test scan the logs
with a regexp that checks for the expected ERROR string, ensuring that
the wanted LSN comes from the correct context.

Backpatch down to 15 where this test has been introduced.

Author: Ian Ilyasov
Discussion: https://postgr.es/m/GV1P251MB100415F17E6B2FDD7188777ECDE32@GV1P251MB1004.EURP251.PROD.OUTLOOK.COM
Backpatch-through: 15

src/test/subscription/t/029_on_error.pl

index 7d6fb66985ae24543851a5d315d5bcd585ee6a41..4d83b461c2d6d22168a6b444d23ad473f3ca81ed 100644 (file)
@@ -26,10 +26,11 @@ sub test_skip_lsn
        "SELECT subenabled = FALSE FROM pg_subscription WHERE subname = 'sub'"
    );
 
-   # Get the finish LSN of the error transaction.
+   # Get the finish LSN of the error transaction, mapping the expected
+   # ERROR with its CONTEXT when retrieving this information.
    my $contents = slurp_file($node_subscriber->logfile, $offset);
    $contents =~
-     qr/processing remote data for replication origin \"pg_\d+\" during message type "INSERT" for replication target relation "public.tbl" in transaction \d+, finished at ([[:xdigit:]]+\/[[:xdigit:]]+)/
+     qr/duplicate key value violates unique constraint "tbl_pkey".*\n.*DETAIL:.*\n.*CONTEXT:.* for replication target relation "public.tbl" in transaction \d+, finished at ([[:xdigit:]]+\/[[:xdigit:]]+)/m
      or die "could not get error-LSN";
    my $lsn = $1;