Обсуждение: BF client script runs src/test/modules TAP tests multiple times
I spent some more time poking into why my buildfarm animals seemed
to have gotten markedly slower in the past month or so. One
particular inflection point was the introduction of test_plan_advice.
We knew that would be expensive, since it invokes an extra run of
the core regression tests. On my animal indri, which can do
install-check-C in about 10 or 11 seconds, you'd have expected that
to add ten-ish seconds to the total cycle time. But it added more
than 30 seconds. Investigation shows that what you'd guess from
simple arithmetic is the truth: the BF client script is invoking
that test *three times*. Once from make_misc_check, once from
make_testmodules_install_check with locale "C", and once from
make_testmodules_install_check with locale "en_US.utf8", since
that animal is set up with
locales => [ 'C', 'en_US.UTF-8' ],
I do not think we need this. We should apply the same policy to
src/test/modules as we do to contrib, namely that TAP tests are
run just once during the "make check" phase, not during the "make
installcheck" phases. I've applied the attached to my animals
and it makes for a significant drop in cycle time.
(I've not looked into whether the meson side has a similar issue.)
regards, tom lane
--- run_build.pl~ 2026-04-07 18:34:30.112991218 -0400
+++ run_build.pl 2026-04-07 22:33:56.230330171 -0400
@@ -2228,8 +2228,9 @@ sub make_testmodules_install_check
my @checklog;
unless ($using_msvc)
{
+ # skip TAP tests - they are called elsewhere
my $cmd =
- "cd $pgsql/src/test/modules && $make USE_MODULE_DB=1 installcheck";
+ "cd $pgsql/src/test/modules && $make USE_MODULE_DB=1 TAP_TESTS= installcheck";
@checklog = run_log($cmd);
}
else
On 2026-04-08 We 1:00 AM, Tom Lane wrote:
I spent some more time poking into why my buildfarm animals seemed to have gotten markedly slower in the past month or so. One particular inflection point was the introduction of test_plan_advice. We knew that would be expensive, since it invokes an extra run of the core regression tests. On my animal indri, which can do install-check-C in about 10 or 11 seconds, you'd have expected that to add ten-ish seconds to the total cycle time. But it added more than 30 seconds. Investigation shows that what you'd guess from simple arithmetic is the truth: the BF client script is invoking that test *three times*. Once from make_misc_check, once from make_testmodules_install_check with locale "C", and once from make_testmodules_install_check with locale "en_US.utf8", since that animal is set up with locales => [ 'C', 'en_US.UTF-8' ], I do not think we need this. We should apply the same policy to src/test/modules as we do to contrib, namely that TAP tests are run just once during the "make check" phase, not during the "make installcheck" phases. I've applied the attached to my animals and it makes for a significant drop in cycle time. (I've not looked into whether the meson side has a similar issue.)
Ok, I will try to rationalize this.
cheers
andrew
-- Andrew Dunstan EDB: https://www.enterprisedb.com