On 2022-04-18 Mo 15:46, Mark Dilger wrote:
>
>> On Apr 18, 2022, at 10:59 AM, Andrew Dunstan <and...@dunslane.net> wrote:
>>
>> No, I think we could probably just port the whole of src/test/PostreSQL
>> back if required, and have it live alongside the old modules. Each TAP
>> test is a separate miracle - see comments elsewhere about port
>> assignment in parallel TAP tests.
> I think $last_port_assigned would need to be shared between the two modules.  
> This global safeguard is already a bit buggy, but not sharing it between 
> modules would be far worse.  Currently, if a node which has a port assigned 
> is stopped, and a parallel test creates a new node, this global variable 
> prevents the new node from getting the port already assigned to the old 
> stopped node, except when port assignment wraps around. Without sharing the 
> global, wrap-around need not happen for port collisions.
>
> Or am I reading the code wrong?
>

I don't see anything at all in the current code that involves sharing
$last_port_assigned (or anything else) between parallel tests. The only
reason we don't get lots of collisions there is because each one starts
off at a random port. If you want it shared to guarantee non-collision
we will need far more infrastructure, AFAICS, but that seems quite
separate from the present issue. I have some experience of managing that
- the buildfarm code has some shared state, protected by bunch of locks.

To the best of my knowledge. each TAP test runs in its own process, a
child of prove. And that's just as well because we certainly wouldn't
want other package globals (like the node list) shared.


cheers


andrew


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



Reply via email to