Thread: Re: pgsql: Fix event triggers for partitioned tables

Re: pgsql: Fix event triggers for partitioned tables

From
Michael Paquier
Date:
Hi Alvaro,

On Sat, Oct 06, 2018 at 10:18:46PM +0000, Alvaro Herrera wrote:
> Fix event triggers for partitioned tables
>
> Index DDL cascading on partitioned tables introduced a way for ALTER
> TABLE to be called reentrantly.  This caused an an important deficiency
> in event trigger support to be exposed: on exiting the reentrant call,
> the alter table state object was clobbered, causing a crash when the
> outer alter table tries to finalize its processing.  Fix the crash by
> creating a stack of event trigger state objects.  There are still ways
> to cause things to misbehave (and probably other crashers) with more
> elaborate tricks, but at least it now doesn't crash in the obvious
> scenario.

This commit is producing a warning with my compiler:
event_trigger.c:1764:9: note: in expansion of macro ‘OidIsValid’
  Assert(OidIsValid(currentEventTriggerState->currentCommand));

The fix is obvious because currentCommand is a pointer and not an Oid.
Please see attached.  Should I fix it myself?
--
Michael

Attachment

Re: pgsql: Fix event triggers for partitioned tables

From
Alvaro Herrera
Date:
On 2018-Oct-08, Michael Paquier wrote:

> Hi Alvaro,
> 
> On Sat, Oct 06, 2018 at 10:18:46PM +0000, Alvaro Herrera wrote:
> > Fix event triggers for partitioned tables
> > 
> > Index DDL cascading on partitioned tables introduced a way for ALTER
> > TABLE to be called reentrantly.  This caused an an important deficiency
> > in event trigger support to be exposed: on exiting the reentrant call,
> > the alter table state object was clobbered, causing a crash when the
> > outer alter table tries to finalize its processing.  Fix the crash by
> > creating a stack of event trigger state objects.  There are still ways
> > to cause things to misbehave (and probably other crashers) with more
> > elaborate tricks, but at least it now doesn't crash in the obvious
> > scenario.
> 
> This commit is producing a warning with my compiler:
> event_trigger.c:1764:9: note: in expansion of macro ‘OidIsValid’
>   Assert(OidIsValid(currentEventTriggerState->currentCommand));
> 
> The fix is obvious because currentCommand is a pointer and not an Oid.
> Please see attached.  Should I fix it myself?

If you have a commit ready, please do, thanks.

-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services


Re: pgsql: Fix event triggers for partitioned tables

From
Alvaro Herrera
Date:
On 2018-Oct-08, Alvaro Herrera wrote:

> On 2018-Oct-08, Michael Paquier wrote:
> 
> > The fix is obvious because currentCommand is a pointer and not an Oid.
> > Please see attached.  Should I fix it myself?

Pushed now, thanks.

-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services


Re: pgsql: Fix event triggers for partitioned tables

From
Michael Paquier
Date:
On Mon, Oct 08, 2018 at 10:39:23AM -0300, Alvaro Herrera wrote:
> Pushed now, thanks.

Thanks Alvaro for addressing the issue and back-patching.
--
Michael

Attachment

Re: pgsql: Fix event triggers for partitioned tables

From
Michael Paquier
Date:
On Mon, Oct 08, 2018 at 10:39:23AM -0300, Alvaro Herrera wrote:
> Pushed now, thanks.

Thanks Alvaro for addressing the issue and back-patching.
--
Michael