Unix latch implementation that wakes on postmaster death - Mailing list pgsql-hackers

From Peter Geoghegan
Subject Unix latch implementation that wakes on postmaster death
Date
Msg-id BANLkTin0_5oC766Z4S4ws=pXzfduqAKXaQ@mail.gmail.com
Whole thread Raw
Responses Re: Unix latch implementation that wakes on postmaster death  (Robert Haas <robertmhaas@gmail.com>)
Re: Unix latch implementation that wakes on postmaster death  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Attached is a patch that builds upon Florian Pflug's earlier proof of
concept program for monitoring the postmaster. The code creates a
non-blocking pipe in the postmaster that child processes block on
using a select() call. This all occurs in the latch code, which now
monitors postmaster death, but only for clients that request it (and,
almost invariably in addition to monitoring other things, like having
a timeout occur or a latch set).

I've implemented an interface originally sketched by Heikki that
allows clients to specify events to wake on, and to see what event
actually caused the wakeup when we're done by bitwise AND'ing the
returned int against various new bitmasks.

I've included my existing changes to the archiver as a convenience to
anyone that wants to quickly see the effects of the patch in action;
even though we don't have a tight loop that polls PostmasterIsAlive()
every second, we still wake up on postmaster death, so there is no
potential denial of service as previously described by Tom. This can
be easily observed by sending the postmaster SIGKILL while the
archiver is on - the archiver immediately finishes. Note that I've
deferred changing the existing call sites of WaitLatch()/
WaitLatchOrSocket(), except to make them use the new interface. Just
as before, they don't ask to be woken on postmaster death, even though
in some cases they probably should. Whether or not they should and how
they should are questions for another day though.

I expect that this patch will be split into two separate patches: The
latch patch (complete with currently missing win32 implementation) and
the archiver patch. For now, I'd like to hear thoughts on how I've
implemented the extra latch functionality.

How should I be handling the EXEC_BACKEND case?

--
Peter Geoghegan       http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training and Services

Attachment

pgsql-hackers by date:

Previous
From: Dimitri Fontaine
Date:
Subject: Re: Formatting Curmudgeons WAS: MMAP Buffers
Next
From: Robert Haas
Date:
Subject: Re: Unix latch implementation that wakes on postmaster death