Re: multi-install PostgresNode fails with older postgres versions - Mailing list pgsql-hackers

From Mark Dilger
Subject Re: multi-install PostgresNode fails with older postgres versions
Date
Msg-id 8BAAEFBA-1C0E-4BE9-AEE8-F5978B9BAE76@enterprisedb.com
Whole thread Raw
In response to Re: multi-install PostgresNode fails with older postgres versions  (Mark Dilger <mark.dilger@enterprisedb.com>)
Responses Re: multi-install PostgresNode fails with older postgres versions
List pgsql-hackers

> On Mar 31, 2021, at 1:07 PM, Mark Dilger <mark.dilger@enterprisedb.com> wrote:
>
>
>
>> On Mar 31, 2021, at 1:05 PM, Andrew Dunstan <andrew@dunslane.net> wrote:
>>
>>
>> On 3/31/21 3:48 PM, Alvaro Herrera wrote:
>>> On 2021-Mar-31, Mark Dilger wrote:
>>>
>>>> PostgresNode::start() doesn't work for servers older than version 10,
>>>> either.  If I hack that function to sleep until the postmaster.pid
>>>> file exists, it works, but that is really ugly and is just to prove to
>>>> myself that it is a timing issue.  There were a few commits in the
>>>> version 10 development cycle (cf, commit
>>>> f13ea95f9e473a43ee4e1baeb94daaf83535d37c) which changed how pg_ctl
>>>> works, though I haven't figured out yet exactly what the interaction
>>>> with PostgresNode would be.  I'll keep looking.
>>> Do you need to do "pg_ctl -w" perhaps?
>>
>>
>>
>> Probably. The buildfarm does this unconditionally and has done for a
>> very long time, so maybe we don't need a version test for it.
>
> I put a version test for this and it works for me.  I guess you could do it unconditionally, if you want, but the
conditionis just: 
>
> -       TestLib::system_or_bail('pg_ctl', '-D', $pgdata, '-l', $logfile,
> +       TestLib::system_or_bail('pg_ctl',
> +               $self->older_than_version('10') ? '-w' : (),
> +               '-D', $pgdata, '-l', $logfile,
>                'restart');

I have needed to do a number of these version checks to get PostgresNode working across a variety of versions.
Attachedis a WIP patch set with those changes, and with a framework that exercises PostgresNode and can be extended to
checkother things.  For now, it just checks that init(), start(), safe_psql(), and teardown_node() work. 

With the existing changes to PostgresNode in 0001, the framework in 0002 works for server versions back to 9.3.
Versions9.1 and 9.2 fail on the safe_psql(), and I haven't dug into that far enough yet to explain why.  Versions 8.4
and9.0 fail on the start().  I had trouble getting versions of postgres older than 8.4 to compile on my laptop.  I
haven'tdug far enough into that yet, either. 

To get this running, you need to install the versions you care about and edit
src/test/modules/test_cross_version/version.datwith the names and locations of those installations.  (I committed the
patchwith my local settings, so you can easily compare and edit.)  That should get you to the point where you can run
'makecheck' in the test_cross_version directory. 


—
Mark Dilger
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company




Attachment

pgsql-hackers by date:

Previous
From: Amit Langote
Date:
Subject: Re: making update/delete of inheritance trees scale better
Next
From: Masahiko Sawada
Date:
Subject: Re: Flaky vacuum truncate test in reloptions.sql