Enable archiving in recovery TAP test 009_twophase.pl
authorMichael Paquier <[email protected]>
Tue, 20 Jun 2023 01:25:45 +0000 (10:25 +0900)
committerMichael Paquier <[email protected]>
Tue, 20 Jun 2023 01:25:45 +0000 (10:25 +0900)
This is a follow-up of f663b00, that has been committed to v13 and v14,
tweaking the TAP test for two-phase transactions so as it provides
coverage for the bug that has been fixed.  This change is done in its
own commit for clarity, as v15 and HEAD did not show the problematic
behavior, still missed coverage for it.

While on it, this adds a comment about the dependency of the last
partial segment rename and RecoverPreparedTransactions() at the end of
recovery, as that can be easy to miss.

Author: Michael Paquier
Reviewed-by: Kyotaro Horiguchi
Discussion: https://postgr.es/m/743b9b45a2d4013bd90b6a5cba8d6faeb717ee34[email protected]
Backpatch-through: 13

src/backend/access/transam/xlog.c
src/test/recovery/t/009_twophase.pl

index fcc04e4acf81316d03f2ee4cce7bbd605af74dda..a5d56690aec8ac5e05728fdc8e014e98ca3821a9 100644 (file)
@@ -8049,7 +8049,11 @@ StartupXLOG(void)
    TrimCLOG();
    TrimMultiXact();
 
-   /* Reload shared-memory state for prepared transactions */
+   /*
+    * Reload shared-memory state for prepared transactions.  This needs to
+    * happen before renaming the last partial segment of the old timeline as
+    * it may be possible that we have to recovery some transactions from it.
+    */
    RecoverPreparedTransactions();
 
    /* Shut down xlogreader */
index 900d181788c9ae644a3883f9f3bf7c36fce4dced..cf2f345269fe05d98f8d7e3b96d1dec8e0b93b94 100644 (file)
@@ -32,7 +32,9 @@ sub configure_and_reload
 
 # Setup london node
 my $node_london = get_new_node("london");
-$node_london->init(allows_streaming => 1);
+# Archiving is used to provide coverage with the creation of .partial segments
+# done at the end of recovery and the recovery of two-phase transactions.
+$node_london->init(allows_streaming => 1, has_archiving => 1);
 $node_london->append_conf(
    'postgresql.conf', qq(
    max_prepared_transactions = 10