Re: select_parallel test failure: gather sometimes losing tuples (maybe during rescans)?
Robert Haas <robertmhaas@gmail.com>
From: Robert Haas <robertmhaas@gmail.com>
To: Thomas Munro <thomas.munro@enterprisedb.com>
Cc: Tomas Vondra <tomas.vondra@2ndquadrant.com>,
Andres Freund <andres@anarazel.de>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Pg Hackers <pgsql-hackers@postgresql.org>
Date: 2018-03-05T20:17:16Z
Lists: pgsql-hackers
On Sun, Mar 4, 2018 at 4:46 PM, Thomas Munro <thomas.munro@enterprisedb.com> wrote: > Thanks! Here are a couple of patches. I'm not sure which I prefer. > The "pessimistic" one looks simpler and is probably the way to go, but > the "optimistic" one avoids doing an extra read until it has actually > run out of data and seen mq_detached == true. > > I realised that the pg_write_barrier() added to > shm_mq_detach_internal() from the earlier demonstration/hack patch was > not needed... I had a notion that SpinLockAcquire() might not include > a strong enough barrier (unlike SpinLockRelease()), but after reading > s_lock.h I think it's not needed (since you get either TAS() or a > syscall-based slow path, both expected to include a full fence). I > haven't personally tested this on a weak memory order system. The optimistic approach seems a little bit less likely to slow this down on systems where barriers are expensive, so I committed that one. Thanks for debugging this; I hope this fixes it, but I guess we'll see. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Commits
-
shm_mq: Fix detach race condition.
- 42d7074ebb83 11.0 landed
-
shm_mq: Have the receiver set the sender's less frequently.
- 497171d3e2aa 11.0 cited
-
shm_mq: Reduce spinlock usage.
- 34db06ef9a1d 11.0 cited
-
Report an ERROR if a parallel worker fails to start properly.
- 2badb5afb89c 11.0 cited