Re: postgres crash on concurrent update of inheritance partitioned table

Oleksii Kliukin <alexk@hintbits.com>

From: Oleksii Kliukin <alexk@hintbits.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Tomas Vondra <tomas.vondra@2ndquadrant.com>, Andres Freund <andres@anarazel.de>, pgsql-bugs@lists.postgresql.org, ildus@adjust.com, Chris Travers <chris.travers@adjust.com>, Nick Babadzhanian <nickb@adjust.com>, julian.schauder@gmx.de
Date: 2020-01-29T09:20:30Z
Lists: pgsql-bugs
Tom Lane <tgl@sss.pgh.pa.us> wrote:

> Tomas Vondra <tomas.vondra@2ndquadrant.com> writes:
>> On Tue, Jan 28, 2020 at 05:17:14PM +0100, Oleksii Kliukin wrote:
>>> We have experienced a few crashes a day since upgrading to pg 12.1 last
>>> week, during the process of updating an inheritance-partitioned table by
>>> several concurrent sessions.
> 
>> Yeah, I can reproduce it too. If I had to guess, I'd say it's another
>> bug due to 
>>     commit 3fb307bc4a76815f96fec28a0d1525ab3fbbcfb4
>>     Author: Andres Freund <andres@anarazel.de>
>>     Date:   Mon Sep 9 05:21:30 2019 -0700
>>     Reorder EPQ work, to fix rowmark related bugs and improve efficiency.
>> which introduced relsubs_done et al, and perhaps did not get the life
>> cycle / resetting right. Not sure.
> 
> Yup, that's it exactly.  EvalPlanQualStart was expecting to reuse
> relsubs_rowmark and relsubs_done, but that storage will be recycled by
> EvalPlanQualEnd because it's in the query context of the recheckestate.
> AFAICS the re-use has no semantic value, so I just got rid of it.

Sounds good, thank you!

Regards,
Oleksii “Alex” Kliukin


Commits

  1. Fix dangling pointer in EvalPlanQual machinery.

  2. Reorder EPQ work, to fix rowmark related bugs and improve efficiency.