Thread: pgsql: Remove command checks in tests of pg_basebackup and pg_receivewa

pgsql: Remove command checks in tests of pg_basebackup and pg_receivewa

From
Michael Paquier
Date:
Remove command checks in tests of pg_basebackup and pg_receivewal

The TAP tests of those commands have been checking if commands of "gzip"
and "lz4" existed by launching them with an extra --version.  Based on
the buildfarm, this is not required for "gzip" as the command always
exists.  Since 1d084fb, "lz4" has a ./configure check doing the same
thing.

Reported-by: Andres Freund
Discussion: https://postgr.es/m/20220212220643.ozuvq2k4cjkcnr2v@alap3.anarazel.de
Discussion: https://postgr.es/m/Ygm2ADakjlqGc2Ro@paquier.xyz

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/a4e1deb42b378650aaa2bcb3897caad9fe895957

Modified Files
--------------
src/bin/pg_basebackup/t/010_pg_basebackup.pl |  5 ++---
src/bin/pg_basebackup/t/020_pg_receivewal.pl | 10 ++++------
2 files changed, 6 insertions(+), 9 deletions(-)


Re: pgsql: Remove command checks in tests of pg_basebackup and pg_receivewa

From
Andrew Dunstan
Date:
On 2022-02-14 Mo 23:41, Michael Paquier wrote:
> Remove command checks in tests of pg_basebackup and pg_receivewal
>
> The TAP tests of those commands have been checking if commands of "gzip"
> and "lz4" existed by launching them with an extra --version.  Based on
> the buildfarm, this is not required for "gzip" as the command always
> exists.  Since 1d084fb, "lz4" has a ./configure check doing the same
> thing.
>
> Reported-by: Andres Freund
> Discussion: https://postgr.es/m/20220212220643.ozuvq2k4cjkcnr2v@alap3.anarazel.de
> Discussion: https://postgr.es/m/Ygm2ADakjlqGc2Ro@paquier.xyz
>


This appears to have been misconceived, at least in the case of MSVC
builds, as I have just discovered. It is entirely possible to have the
lz4 libraries installed and build with them but not have the .exe, and
unlike the configure case the MSVC build system doesn't conduct any test
for it, resulting in a nasty looking TAP test failure. I assume similar
failures are possible with zstd and maybe gzip.


cheers


andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com




Re: pgsql: Remove command checks in tests of pg_basebackup and pg_receivewa

From
Michael Paquier
Date:
On Sat, Apr 30, 2022 at 04:52:54PM -0400, Andrew Dunstan wrote:
> This appears to have been misconceived, at least in the case of MSVC
> builds, as I have just discovered. It is entirely possible to have the
> lz4 libraries installed and build with them but not have the .exe, and
> unlike the configure case the MSVC build system doesn't conduct any test
> for it, resulting in a nasty looking TAP test failure. I assume similar
> failures are possible with zstd and maybe gzip.

Okay, we could change the code of vcregress.pl so as the different ENV
commands (tar, zstd, lz4 or gzip) are assigned as follows for the sake
of the tests:
- If a ENV value is available, trust the environment/user and rely on
it.
- If a ENV value is not available, try to look for it in the
environment by launching a simple $command --version (-version should
be fine across all the commands currently in need of coverage?).
-- On failure, set ENV{command} to an empty string.
-- On success, set ENV{command} = "$command"

Does something like this look better to you?
--
Michael

Attachment

Re: pgsql: Remove command checks in tests of pg_basebackup and pg_receivewa

From
Andrew Dunstan
Date:
On 2022-05-01 Su 09:15, Michael Paquier wrote:
> On Sat, Apr 30, 2022 at 04:52:54PM -0400, Andrew Dunstan wrote:
>> This appears to have been misconceived, at least in the case of MSVC
>> builds, as I have just discovered. It is entirely possible to have the
>> lz4 libraries installed and build with them but not have the .exe, and
>> unlike the configure case the MSVC build system doesn't conduct any test
>> for it, resulting in a nasty looking TAP test failure. I assume similar
>> failures are possible with zstd and maybe gzip.
> Okay, we could change the code of vcregress.pl so as the different ENV
> commands (tar, zstd, lz4 or gzip) are assigned as follows for the sake
> of the tests:
> - If a ENV value is available, trust the environment/user and rely on
> it.
> - If a ENV value is not available, try to look for it in the
> environment by launching a simple $command --version (-version should
> be fine across all the commands currently in need of coverage?).
> -- On failure, set ENV{command} to an empty string.
> -- On success, set ENV{command} = "$command"
>
> Does something like this look better to you?


IIRC we know that tar will be available on Windows.

I don't think we should do that check for every time we call
vc_regress.pl, that seems wasteful. Maybe do it if the command is one
that might require these commands, which I think would be bincheck or
taptest. And/Or stash some status somewhere?


cheers


andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com




Re: pgsql: Remove command checks in tests of pg_basebackup and pg_receivewa

From
Michael Paquier
Date:
On Sun, May 01, 2022 at 10:18:37AM -0400, Andrew Dunstan wrote:
> IIRC we know that tar will be available on Windows.

What about gzip?  Are the binaries and the libraries split into
different packages for this package manager on Windows?  We've never
assumed that this is possible on ./configure, but it would make sense
to make MSVC able to manage this case.

> I don't think we should do that check for every time we call
> vc_regress.pl, that seems wasteful. Maybe do it if the command is one
> that might require these commands, which I think would be bincheck or
> taptest. And/Or stash some status somewhere?

Mostly.  We also care about gzip in contrib/basebackup_to_shell/,
though contribcheck does not run the TAP tests of contrib/ modules.
As you say, setting up those variables in bincheck and taptest would
be enough.
--
Michael

Attachment

Re: pgsql: Remove command checks in tests of pg_basebackup and pg_receivewa

From
Andrew Dunstan
Date:
On 2022-05-02 Mo 03:06, Michael Paquier wrote:
> On Sun, May 01, 2022 at 10:18:37AM -0400, Andrew Dunstan wrote:
>> IIRC we know that tar will be available on Windows.
> What about gzip?  Are the binaries and the libraries split into
> different packages for this package manager on Windows?  We've never
> assumed that this is possible on ./configure, but it would make sense
> to make MSVC able to manage this case.


vcpkg doesn't install any.exe files AFAICS, just DLLs, headers, .lib
files etc.


>
>> I don't think we should do that check for every time we call
>> vc_regress.pl, that seems wasteful. Maybe do it if the command is one
>> that might require these commands, which I think would be bincheck or
>> taptest. And/Or stash some status somewhere?
> Mostly.  We also care about gzip in contrib/basebackup_to_shell/,
> though contribcheck does not run the TAP tests of contrib/ modules.
> As you say, setting up those variables in bincheck and taptest would
> be enough.


That would be a start. Maybe meson will us get rid of some of this mess ...


cheers


andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com




Re: pgsql: Remove command checks in tests of pg_basebackup and pg_receivewa

From
Michael Paquier
Date:
On Fri, May 06, 2022 at 10:12:36AM -0400, Andrew Dunstan wrote:
> On 2022-05-02 Mo 03:06, Michael Paquier wrote:
> vcpkg doesn't install any.exe files AFAICS, just DLLs, headers, .lib
> files etc.

Okay, thanks for confirming.

>>> I don't think we should do that check for every time we call
>>> vc_regress.pl, that seems wasteful. Maybe do it if the command is one
>>> that might require these commands, which I think would be bincheck or
>>> taptest. And/Or stash some status somewhere?
>>
>> Mostly.  We also care about gzip in contrib/basebackup_to_shell/,
>> though contribcheck does not run the TAP tests of contrib/ modules.
>> As you say, setting up those variables in bincheck and taptest would
>> be enough.
>
> That would be a start. Maybe meson will us get rid of some of this mess ...

Let's do that for now then as we need a middle ground for HEAD.  I'll
come up with something at the beginning of next week.
--
Michael

Attachment

Re: pgsql: Remove command checks in tests of pg_basebackup and pg_receivewa

From
Michael Paquier
Date:
Hi Andrew,

On Sat, May 07, 2022 at 09:13:48AM +0900, Michael Paquier wrote:
> Let's do that for now then as we need a middle ground for HEAD.  I'll
> come up with something at the beginning of next week.

And here you go as of the attached to show the idea.  The CI is able
to execute and detect the default commands for lz4, gzip and zstd,
while one of my boxes without any of those commands would ignore them.
What do you think?
--
Michael

Attachment

Re: pgsql: Remove command checks in tests of pg_basebackup and pg_receivewa

From
Andrew Dunstan
Date:
On 2022-05-09 Mo 01:28, Michael Paquier wrote:
> Hi Andrew,
>
> On Sat, May 07, 2022 at 09:13:48AM +0900, Michael Paquier wrote:
>> Let's do that for now then as we need a middle ground for HEAD.  I'll
>> come up with something at the beginning of next week.
> And here you go as of the attached to show the idea.  The CI is able
> to execute and detect the default commands for lz4, gzip and zstd,
> while one of my boxes without any of those commands would ignore them.
> What do you think?


The system() call should include redirection, since we only case about
the return code.


I would just write this


+    if ($rc != 0)
+    {
+        # Execution of the default command failed, so reset its
+        # environment value.
+        $ENV{$envname} = '';
+        return;
+    }
+
+    # Set the environment to the default as it exists.
+    $ENV{$envname} = $envdefault;
+    return;


as

    $ENV{$envname} = $envdefault if $rc == 0;

   

There should be no need to set it to the empty string in case if
failure, we already know it's undefined.


Otherwise looks good.


cheers


andrew


--
Andrew Dunstan
EDB: https://www.enterprisedb.com




Re: pgsql: Remove command checks in tests of pg_basebackup and pg_receivewa

From
Michael Paquier
Date:
On Mon, May 09, 2022 at 10:10:27AM -0400, Andrew Dunstan wrote:
> The system() call should include redirection, since we only case about
> the return code.

Okay, done using File::Spec::devnull.

> I would just write this
>
> as
>
>     $ENV{$envname} = $envdefault if $rc == 0;
>
> There should be no need to set it to the empty string in case if
> failure, we already know it's undefined.

This needs to be adjusted on all the stable branches, so I'll do that
once this week's version is tagged.  Attached is an updated patch for
now.
--
Michael

Attachment

Re: pgsql: Remove command checks in tests of pg_basebackup and pg_receivewa

From
Michael Paquier
Date:
On Tue, May 10, 2022 at 09:57:29AM +0900, Michael Paquier wrote:
> This needs to be adjusted on all the stable branches, so I'll do that
> once this week's version is tagged.  Attached is an updated patch for
> now.

The tags have been pushed, so done now.
--
Michael

Attachment