Re: NOTIFY does not work as expected

From: Jeff Janes <jeff(dot)janes(at)gmail(dot)com>
To: Andres Freund <andres(at)anarazel(dot)de>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Andrey <parihaaraka(at)gmail(dot)com>, Pg Bugs <pgsql-bugs(at)postgresql(dot)org>
Subject: Re: NOTIFY does not work as expected
Date: 2018-07-04 22:11:03
Message-ID: CAMkU=1zCfdxGBcm7N=Twr7bz4KTmYZbEhq=f-VaNmP6d4ry-Tw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On Wed, Jul 4, 2018 at 2:30 PM, Andres Freund <andres(at)anarazel(dot)de> wrote:

> Hi,
>
>
> On 2018-07-04 08:50:12 -0400, Jeff Janes wrote:
> > Reading through the comments touched by the commit, it seems obvious what
> > the bug is. It says "cause the processing to occur just before we next
> go
> > idle", but also says "This is called just *after* waiting for a frontend
> > command", which is too late to be "before we next go idle"
>
> I've not looked at this issue in depth yet. So I might be completely off
> base. But I'm confused by your comment - we're doing it *after*,
> because we do a non-blocking read. And the latch will notify us
> (event.events & WL_LATCH_SET) if there was a read.
>

We get a signal while we are busy. We set the flag and the latch. The
latch
wakes us up, but since we are busy (in a transaction, specifically) we don't
do anything. Later, the transaction ends and we are about to go idle, but
no one checks the flag again. We start a read using the latch mechanism,
but
the flag notifyInterruptPending being set true from a now-long-gone signal
is not on
the list of things the latch wakes us for. It is technically a
non-blocking read but from
the perspective if the pending notify message it is a blocking read, unless
another
signal comes along and rescues us.

Cheers,

Jeff

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Grigory Smolkin 2018-07-05 15:05:17 long analyze, libc bug and libicu
Previous Message Andres Freund 2018-07-04 18:30:55 Re: NOTIFY does not work as expected