postgres.git / summary / log / commit / refs

commit    68cb5af46cd8bb2f6fd25886da5d6045a6a42208
Author:   Michael Paquier <michael@paquier.xyz>
Date:     Tue Jun 20 01:25:27 2023 +0000
First released in: 16.0, 13.12, 14.9, 15.4
Reverted by: 43090e1e7059 (in 13.12), 2634926906de (in 14.9), bd78702ea17e (in 15.4), 8cca660b0bfb (in 16.0)

    Enable archiving in recovery TAP test 009_twophase.pl
    
    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.camel@cybertec.at
    Backpatch-through: 13


src/backend/access/transam/xlog.c | 6 +++++- src/test/recovery/t/009_twophase.pl | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index b2430f617c0..8b0710abe60 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -5689,7 +5689,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 */ diff --git a/src/test/recovery/t/009_twophase.pl b/src/test/recovery/t/009_twophase.pl index e1273fd0f12..64c300db2bb 100644 --- a/src/test/recovery/t/009_twophase.pl +++ b/src/test/recovery/t/009_twophase.pl @@ -32,7 +32,9 @@ sub configure_and_reload # Setup london node my $node_london = PostgreSQL::Test::Cluster->new("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 [parent: 0d369ac65004]