On Tue, Feb 26, 2019 at 5:10 PM Robert Haas <robertmh...@gmail.com> wrote:
> Aside from these problems, I think I have spotted a subtle problem in
> 0001. I'll think about that some more and post another update.

0001 turned out to be guarding against the wrong problem.  It supposed
that if we didn't get a coherent view of the system catalogs due to
concurrent DDL, we could just AcceptInvalidationMessages() and retry.
But that turns out to be wrong, because there's a (very) narrow window
after a process removes itself from the ProcArray and before it sends
invalidation messages.  It wasn't difficult to engineer an alternative
solution that works, but unfortunately it's only good enough to handle
the ATTACH case, so this is another thing that will need more thought
for concurrent DETACH.  Anyway, the updated 0001 contains that code
and some explanatory comments.  The rest of the series is
substantially unchanged.

I'm not currently aware of any remaining correctness issues with this
code, although certainly there may be some.  There has been a certain
dearth of volunteers to review any of this.  I do plan to poke at it a
bit to see whether it has any significant performance impact, but not
today.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

Attachment: v4-0004-Reduce-the-lock-level-required-to-attach-a-partit.patch
Description: Binary data

Attachment: v4-0002-Ensure-that-repeated-PartitionDesc-lookups-return.patch
Description: Binary data

Attachment: v4-0001-Teach-RelationBuildPartitionDesc-to-cope-with-con.patch
Description: Binary data

Attachment: v4-0003-Teach-runtime-partition-pruning-to-cope-with-conc.patch
Description: Binary data

Reply via email to