Skip to content

Commit c44e9bc

Browse files
committed
In the pg_upgrade test suite, don't write to src/test/regress.
When this suite runs installcheck, redirect file creations from src/test/regress to src/bin/pg_upgrade/tmp_check/regress. This closes a race condition in "make -j check-world". If the pg_upgrade suite wrote to a given src/test/regress/results file in parallel with the regular src/test/regress invocation writing it, a test failed spuriously. Even without parallelism, in "make -k check-world", the suite finishing second overwrote the other's regression.diffs. This revealed test "largeobject" assuming @abs_builddir@ is getcwd(), so fix that, too. Buildfarm client REL_10, released fifty-four days ago, supports saving regression.diffs from its new location. When an older client reports a pg_upgradeCheck failure, it will no longer include regression.diffs. Back-patch to 9.5, where pg_upgrade moved to src/bin. Reviewed (in earlier versions) by Andrew Dunstan. Discussion: https://postgr.es/m/20181224034411.GA3224776@rfd.leadboat.com
1 parent 8e2b41e commit c44e9bc

File tree

5 files changed

+38
-12
lines changed

5 files changed

+38
-12
lines changed

src/bin/pg_upgrade/test.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,17 @@ BASE_PGDATA=$temp_root/data
109109
PGDATA="$BASE_PGDATA.old"
110110
export PGDATA
111111

112+
# Send installcheck outputs to a private directory. This avoids conflict when
113+
# check-world runs pg_upgrade check concurrently with src/test/regress check.
114+
# To retrieve interesting files after a run, use pattern tmp_check/*/*.diffs.
115+
outputdir="$temp_root/regress"
116+
EXTRA_REGRESS_OPTS="$EXTRA_REGRESS_OPTS --outputdir=$outputdir"
117+
export EXTRA_REGRESS_OPTS
118+
mkdir "$outputdir"
119+
mkdir "$outputdir"/sql
120+
mkdir "$outputdir"/expected
121+
mkdir "$outputdir"/testtablespace
122+
112123
logdir=`pwd`/log
113124
rm -rf "$logdir"
114125
mkdir "$logdir"

src/test/regress/input/largeobject.source

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,12 @@ END;
203203

204204
SELECT lo_export(loid, '@abs_builddir@/results/lotest.txt') FROM lotest_stash_values;
205205

206-
\lo_import 'results/lotest.txt'
206+
\lo_import '@abs_builddir@/results/lotest.txt'
207207

208208
\set newloid :LASTOID
209209

210210
-- just make sure \lo_export does not barf
211-
\lo_export :newloid 'results/lotest2.txt'
211+
\lo_export :newloid '@abs_builddir@/results/lotest2.txt'
212212

213213
-- This is a hack to test that export/import are reversible
214214
-- This uses knowledge about the inner workings of large object mechanism
@@ -223,7 +223,7 @@ TRUNCATE lotest_stash_values;
223223

224224
\lo_unlink :newloid
225225

226-
\lo_import 'results/lotest.txt'
226+
\lo_import '@abs_builddir@/results/lotest.txt'
227227

228228
\set newloid_1 :LASTOID
229229

src/test/regress/output/largeobject.source

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -385,10 +385,10 @@ SELECT lo_export(loid, '@abs_builddir@/results/lotest.txt') FROM lotest_stash_va
385385
1
386386
(1 row)
387387

388-
\lo_import 'results/lotest.txt'
388+
\lo_import '@abs_builddir@/results/lotest.txt'
389389
\set newloid :LASTOID
390390
-- just make sure \lo_export does not barf
391-
\lo_export :newloid 'results/lotest2.txt'
391+
\lo_export :newloid '@abs_builddir@/results/lotest2.txt'
392392
-- This is a hack to test that export/import are reversible
393393
-- This uses knowledge about the inner workings of large object mechanism
394394
-- which should not be used outside it. This makes it a HACK
@@ -407,7 +407,7 @@ SELECT lo_unlink(loid) FROM lotest_stash_values;
407407

408408
TRUNCATE lotest_stash_values;
409409
\lo_unlink :newloid
410-
\lo_import 'results/lotest.txt'
410+
\lo_import '@abs_builddir@/results/lotest.txt'
411411
\set newloid_1 :LASTOID
412412
SELECT lo_from_bytea(0, lo_get(:newloid_1)) AS newloid_2
413413
\gset

src/test/regress/output/largeobject_1.source

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -385,10 +385,10 @@ SELECT lo_export(loid, '@abs_builddir@/results/lotest.txt') FROM lotest_stash_va
385385
1
386386
(1 row)
387387

388-
\lo_import 'results/lotest.txt'
388+
\lo_import '@abs_builddir@/results/lotest.txt'
389389
\set newloid :LASTOID
390390
-- just make sure \lo_export does not barf
391-
\lo_export :newloid 'results/lotest2.txt'
391+
\lo_export :newloid '@abs_builddir@/results/lotest2.txt'
392392
-- This is a hack to test that export/import are reversible
393393
-- This uses knowledge about the inner workings of large object mechanism
394394
-- which should not be used outside it. This makes it a HACK
@@ -407,7 +407,7 @@ SELECT lo_unlink(loid) FROM lotest_stash_values;
407407

408408
TRUNCATE lotest_stash_values;
409409
\lo_unlink :newloid
410-
\lo_import 'results/lotest.txt'
410+
\lo_import '@abs_builddir@/results/lotest.txt'
411411
\set newloid_1 :LASTOID
412412
SELECT lo_from_bytea(0, lo_get(:newloid_1)) AS newloid_2
413413
\gset

src/tools/msvc/vcregress.pl

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,9 @@
9898

9999
########################################################################
100100

101-
sub installcheck
101+
sub installcheck_internal
102102
{
103-
my $schedule = shift || 'serial';
103+
my ($schedule, @EXTRA_REGRESS_OPTS) = @_;
104104
my @args = (
105105
"../../../$Config/pg_regress/pg_regress",
106106
"--dlpath=.",
@@ -109,11 +109,19 @@ sub installcheck
109109
"--encoding=SQL_ASCII",
110110
"--no-locale");
111111
push(@args, $maxconn) if $maxconn;
112+
push(@args, @EXTRA_REGRESS_OPTS);
112113
system(@args);
113114
my $status = $? >> 8;
114115
exit $status if $status;
115116
}
116117

118+
sub installcheck
119+
{
120+
my $schedule = shift || 'serial';
121+
installcheck_internal($schedule);
122+
return;
123+
}
124+
117125
sub check
118126
{
119127
my $schedule = shift || 'parallel';
@@ -514,6 +522,13 @@ sub upgradecheck
514522
$ENV{PATH} = "$bindir;$ENV{PATH}";
515523
my $data = "$tmp_root/data";
516524
$ENV{PGDATA} = "$data.old";
525+
my $outputdir = "$tmp_root/regress";
526+
my @EXTRA_REGRESS_OPTS = ("--outputdir=$outputdir");
527+
mkdir "$outputdir" || die $!;
528+
mkdir "$outputdir/sql" || die $!;
529+
mkdir "$outputdir/expected" || die $!;
530+
mkdir "$outputdir/testtablespace" || die $!;
531+
517532
my $logdir = "$topdir/src/bin/pg_upgrade/log";
518533
rmtree($logdir);
519534
mkdir $logdir || die $!;
@@ -529,7 +544,7 @@ sub upgradecheck
529544
generate_db('', 91, 127, '');
530545

531546
print "\nSetting up data for upgrading\n\n";
532-
installcheck();
547+
installcheck_internal('serial', @EXTRA_REGRESS_OPTS);
533548

534549
# now we can chdir into the source dir
535550
chdir "$topdir/src/bin/pg_upgrade";

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy