Re: Extending USE_MODULE_DB to more test suite types
Andrew Dunstan <andrew.dunstan@2ndquadrant.com>
From: Andrew Dunstan <andrew.dunstan@2ndquadrant.com>
To: Noah Misch <noah@leadboat.com>
Cc: PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2019-04-01T17:01:11Z
Lists: pgsql-hackers
On Mon, Apr 1, 2019 at 9:52 AM Noah Misch <noah@leadboat.com> wrote:
>
> Some buildfarm runs have failed like this:
>
> ============== dropping database "pl_regression" ==============
> ERROR: database "pl_regression" is being accessed by other users
> DETAIL: There is 1 other session using the database.
>
> Affected runs:
>
> axolotl │ PLCheck-C │ REL9_5_STABLE │ 2015-08-21 19:29:19 │ https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=axolotl&dt=2015-08-21%2019:29:19
> axolotl │ PLCheck-C │ REL9_6_STABLE │ 2017-03-16 17:43:16 │ https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=axolotl&dt=2017-03-16%2017:43:16
> mandrill │ PLCheck-C │ HEAD │ 2017-05-13 17:14:12 │ https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=mandrill&dt=2017-05-13%2017:14:12
> tern │ PLCheck-C │ HEAD │ 2017-09-05 20:45:17 │ https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=tern&dt=2017-09-05%2020:45:17
> mandrill │ PLCheck-C │ HEAD │ 2017-11-15 13:34:12 │ https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=mandrill&dt=2017-11-15%2013:34:12
> mandrill │ PLCheck-en_US.ISO8859-1 │ REL_10_STABLE │ 2018-03-15 05:24:41 │ https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=mandrill&dt=2018-03-15%2005:24:41
> frogfish │ TestModulesCheck-en_US.utf8 │ REL_11_STABLE │ 2019-01-29 01:32:51 │ https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=frogfish&dt=2019-01-29%2001:32:51
> hornet │ PLCheck-C │ REL_11_STABLE │ 2019-01-29 01:52:29 │ https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=hornet&dt=2019-01-29%2001:52:29
>
> I can reproduce that reliably by combining "make -C src/pl installcheck" with
> this hack:
>
> proc_exit(int code)
> {
> + pg_usleep(7000000);
>
> This happens because dropdb()'s call to CountOtherDBBackends() waits up to 5s
> for the database to become vacant. If the last plpython test backend takes
> more than 5s to exit, the pltcl suite fails. Most test suites are unaffected,
> thanks to USE_MODULE_DB=1 in the buildfarm script. However, PL suites ignore
> USE_MODULE_DB. So do the three src/test/modules directories that contain no C
> code and define $(REGRESS). Isolation suites, too, ignore USE_MODULE_DB.
>
> I would like to fix this as follows. When MODULES and MODULE_big are both
> unset, instead of using a constant string, derive the database name from the
> first element of $(REGRESS) or $(ISOLATION). I considered $(EXTENSION), but
> src/test/modules/commit_ts does not set it. $(REGRESS) and $(ISOLATION) are
> robust; in their absence, a directory simply won't invoke pg_regress to drop
> and/or create a database. I considered introducing a TESTDB_SUFFIX variable
> that src/test/modules directories could define, but that felt like needless
> flexibility. Treat src/pl in a similar fashion. With the attached patch,
> installcheck-world and check-world no longer reuse any database name in a
> given postmaster. Next, I'll mail this buildfarm client patch, after which
> any non-MSVC, v9.5+ (due to ddc2504) buildfarm run would no longer reuse any
> database name in a given postmaster:
>
> --- a/run_build.pl
> +++ b/run_build.pl
> @@ -1677 +1677,2 @@ sub make_pl_install_check
> - @checklog = run_log("cd $pgsql/src/pl && $make installcheck");
> + my $cmd = "cd $pgsql/src/pl && $make USE_MODULE_DB=1 installcheck";
> + @checklog = run_log($cmd);
>
> I plan to back-patch the PostgreSQL patch, to combat buildfarm noise. Perhaps
> someone has test automation that sets USE_MODULE_DB and nonetheless probes the
> exact database name "pl_regression", but I'm not too worried. The original
> rationale for USE_MODULE_DB, in commit ad69bd0, was to facilitate pg_upgrade
> testing. Folks using "make installcheck-world" to populate a cluster for
> pg_upgrade testing will see additional test coverage, which may cause
> additional failures. I'm fine with that, too.
Excellent. Extending use of USE_MODULE_DB has been on my list of
things to do. I'll add the buildfarm patch right away. It should be
harmless before these changes are made.
cheers
andrew
--
Andrew Dunstan https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Commits
-
Handle USE_MODULE_DB for all tests able to use an installed postmaster.
- 624edab58288 9.4.22 landed
- 267d83c7d7d2 9.5.17 landed
- 991a9125351c 9.6.13 landed
- 8541304d5c77 10.8 landed
- 426d93d24429 11.3 landed
- f433394e48af 12.0 landed
-
Add mode where contrib installcheck runs each module in a separately named database.
- ad69bd052f8a 9.3.0 cited