On 3/31/21 10:28 PM, Mark Dilger wrote: > >> On Mar 31, 2021, at 1:07 PM, Mark Dilger <mark.dil...@enterprisedb.com> >> wrote: >> >> >> >>> On Mar 31, 2021, at 1:05 PM, Andrew Dunstan <and...@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 condition is 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. Attached is a WIP patch set with those > changes, and with a framework that exercises PostgresNode and can be extended > to check other 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. Versions 9.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 and 9.0 fail on the start(). I had trouble getting versions of > postgres older than 8.4 to compile on my laptop. I haven't dug 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.dat with the names and locations > of those installations. (I committed the patch with my local settings, so > you can easily compare and edit.) That should get you to the point where you > can run 'make check' in the test_cross_version directory.
I've had a look at the first of these patches. I think it's generally ok, but: - TestLib::system_or_bail('initdb', '-D', $pgdata, '-A', 'trust', '-N', + TestLib::system_or_bail('initdb', '-D', $pgdata, '-A', 'trust', + $self->at_least_version("9.3") ? '-N' : (), @{ $params{extra} }); I'd rather do this in two steps to make it clearer. I still think just doing pg_ctl -w unconditionally would be simpler. Prior to 9.3 "unix_socket_directories" was spelled "unix_socket_directory". We should just set a variable appropriately and use it. That should make the changes around that a whole lot simpler. (c.f. buildfarm code) cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com