diff options
author | Michael Paquier <michael@paquier.xyz> | 2024-02-21 13:28:51 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2024-02-21 13:28:51 +0900 |
commit | ff9e1e764fcce9a34467d614611a34d4d2a91b50 (patch) | |
tree | 03082e29c8e4b236e135fca88f675e7a1bc31a2e /src/test/perl/PostgreSQL/Test/Cluster.pm | |
parent | 75bcba6cbd2a6f62752d7917d9a3c0a52f8605c9 (diff) | |
download | postgresql-ff9e1e764fcce9a34467d614611a34d4d2a91b50.tar.gz postgresql-ff9e1e764fcce9a34467d614611a34d4d2a91b50.zip |
Add option force_initdb to PostgreSQL::Test::Cluster:init()
This option is useful to bypass the default behavior of init() which
would create the data folder of a new cluster by copying it from a
template previously initdb'd, if any. Copying the data folder is much
cheaper than running initdb, but some tests may want to force that. For
example, one scenario of pg_combinebackup updated in this commit needs a
different system ID for two nodes.
Previously, this could only be achieved by unsetting
$ENV{'INITDB_TEMPLATE'}, which could become a problem in complex node
setups by making tests less efficient.
Author: Amul Sul
Reviewed-by: Robert Haas, Michael Paquier
Discussion: https://postgr.es/m/Zc1tX9lLonLGu6oH@paquier.xyz
Diffstat (limited to 'src/test/perl/PostgreSQL/Test/Cluster.pm')
-rw-r--r-- | src/test/perl/PostgreSQL/Test/Cluster.pm | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/test/perl/PostgreSQL/Test/Cluster.pm b/src/test/perl/PostgreSQL/Test/Cluster.pm index cfaf91ec639..44c1bb5afd0 100644 --- a/src/test/perl/PostgreSQL/Test/Cluster.pm +++ b/src/test/perl/PostgreSQL/Test/Cluster.pm @@ -503,6 +503,9 @@ parameter allows_streaming => 'logical' or 'physical' (passing 1 will also suffice for physical replication) depending on type of replication that should be enabled. This is disabled by default. +force_initdb => 1 will force the initialization of the cluster with a new +initdb rather than copying the data folder from a template. + The new node is set up in a fast but unsafe configuration where fsync is disabled. @@ -518,6 +521,7 @@ sub init local %ENV = $self->_get_env(); $params{allows_streaming} = 0 unless defined $params{allows_streaming}; + $params{force_initdb} = 0 unless defined $params{force_initdb}; $params{has_archiving} = 0 unless defined $params{has_archiving}; my $initdb_extra_opts_env = $ENV{PG_TEST_INITDB_EXTRA_OPTS}; @@ -529,14 +533,17 @@ sub init mkdir $self->backup_dir; mkdir $self->archive_dir; - # If available and if there aren't any parameters, use a previously - # initdb'd cluster as a template by copying it. For a lot of tests, that's - # substantially cheaper. Do so only if there aren't parameters, it doesn't - # seem worth figuring out whether they affect compatibility. + # If available, if there aren't any parameters and if force_initdb is + # disabled, use a previously initdb'd cluster as a template by copying it. + # For a lot of tests, that's substantially cheaper. It does not seem + # worth figuring out whether extra parameters affect compatibility, so + # initdb is forced if any are defined. # # There's very similar code in pg_regress.c, but we can't easily # deduplicate it until we require perl at build time. - if (defined $params{extra} or !defined $ENV{INITDB_TEMPLATE}) + if ( $params{force_initdb} + or defined $params{extra} + or !defined $ENV{INITDB_TEMPLATE}) { note("initializing database system by running initdb"); PostgreSQL::Test::Utils::system_or_bail('initdb', '-D', $pgdata, '-A', |