On Sun, Dec 30, 2018 at 10:32:31AM -0500, Andrew Dunstan wrote:
> On 12/30/18 12:53 AM, Noah Misch wrote:
> > 2. stats_temp_directory is incompatible with TAP suites that start more than
> >    one node simultaneously.

> The obvious quick fix would be to have PostgresNode.pm set this to the
> default after inserting the TEMP_CONFIG file.

I'd like to get $SUBJECT in place for variables other than
stats_temp_directory, using your quick fix idea.  Attached.  When its time
comes, your stats_temp_directory work can delete that section.
diff --git a/src/bin/pg_ctl/t/001_start_stop.pl 
b/src/bin/pg_ctl/t/001_start_stop.pl
index 50a57d0..a1143e3 100644
--- a/src/bin/pg_ctl/t/001_start_stop.pl
+++ b/src/bin/pg_ctl/t/001_start_stop.pl
@@ -24,6 +24,8 @@ command_ok([ $ENV{PG_REGRESS}, '--config-auth', 
"$tempdir/data" ],
        'configure authentication');
 open my $conf, '>>', "$tempdir/data/postgresql.conf";
 print $conf "fsync = off\n";
+print $conf TestLib::slurp_file($ENV{TEMP_CONFIG})
+  if defined $ENV{TEMP_CONFIG};
 if (!$windows_os)
 {
        print $conf "listen_addresses = ''\n";
diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm
index 81deed9..f576336 100644
--- a/src/test/perl/PostgresNode.pm
+++ b/src/test/perl/PostgresNode.pm
@@ -447,7 +447,17 @@ sub init
        print $conf "log_statement = all\n";
        print $conf "log_replication_commands = on\n";
        print $conf "wal_retrieve_retry_interval = '500ms'\n";
-       print $conf "port = $port\n";
+
+       # If a setting tends to affect whether tests pass or fail, print it 
after
+       # TEMP_CONFIG.  Otherwise, print it before TEMP_CONFIG, thereby 
permitting
+       # overrides.  Settings that merely improve performance or ease debugging
+       # belong before TEMP_CONFIG.
+       print $conf TestLib::slurp_file($ENV{TEMP_CONFIG})
+         if defined $ENV{TEMP_CONFIG};
+
+       # XXX Neutralize any stats_temp_directory in TEMP_CONFIG.  Nodes running
+       # concurrently must not share a stats_temp_directory.
+       print $conf "stats_temp_directory = 'pg_stat_tmp'\n";
 
        if ($params{allows_streaming})
        {
@@ -473,6 +483,7 @@ sub init
                print $conf "max_wal_senders = 0\n";
        }
 
+       print $conf "port = $port\n";
        if ($TestLib::windows_os)
        {
                print $conf "listen_addresses = '$host'\n";

Reply via email to