On 10/07/2015 09:27 AM, Michael Paquier wrote: > On Wed, Oct 7, 2015 at 7:51 AM, Michael Paquier > <michael.paqu...@gmail.com> wrote: >> On Wed, Oct 7, 2015 at 7:43 AM, Michael Paquier >> <michael.paqu...@gmail.com> wrote: >>> On Wed, Oct 7, 2015 at 5:58 AM, Robert Haas wrote: >>>> On Sat, Oct 3, 2015 at 7:38 AM, Michael Paquier wrote: >>>> It seems that these days 'make check' creates a directory in /tmp >>>> called /tmp/pg_regress-RANDOMSTUFF. Listening on TCP ports is >>>> disabled, and the socket goes inside this directory with a name like >>>> .s.PGSQL.PORT. You can connect with psql -h >>>> /tmp/pg_regress-RANDOMSTUFF -p PORT, but not over TCP. This basically >>>> removes the risk of TCP port number collisions, as well as the risk of >>>> your temporary instance being hijacked by a malicious user on the same >>>> machine. >>> >>> Right, that's for example /var/folders/ on OSX, and this is defined >>> once per test run via $tempdir_short. PGHOST is set to that as well. >> >> Er, mistake here. That's actually once per standard_initdb, except >> that all the tests I have included in my patch run it just once to >> create a master node. It seems that it would be wiser to set one >> socket dir per node then, remove the port assignment stuff, and use >> tempdir_short as a key to define a node as well as in the connection >> string to this node. I'll update the patch later today... > > So, my conclusion regarding multiple calls of make_master is that we > should not allow to do it. On Unix/Linux we could have a separate unix > socket directory for each node, but not on Windows where > listen_addresses is set to look after 127.0.0.1. On Unix/Linux, PGHOST > is set by the master node to a tempdir once and for all. Hence, to > make the code more consistent, I think that we should keep the port > lookup machinery here. An updated patch is attached. >
If parallel tests are supported, get_free_port is still racy even with last_port_found because it's: 1) process-local. 2) even if it were shared, there's the race window between the available-check and the listen() I mentioned upthread. If parallel tests are explicitly disallowed, a comment to that effect (and a note on things known to break) might help someone down the road. Also, the removal of poll_query_until from pg_rewind looks suspiciously like a copy-paste gone bad. Pardon if I'm missing something. Amir -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers