pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Improve detection of child-process SIGPIPE failures.
Date: Sun, 16 Dec 2018 19:52:06 +0000
Message-ID: <E1gYcSM-0008Ox-NZ@gemulon.postgresql.org> (raw)

Improve detection of child-process SIGPIPE failures.

Commit ffa4cbd62 added logic to detect SIGPIPE failure of a COPY child
process, but it only worked correctly if the SIGPIPE occurred in the
immediate child process.  Depending on the shell in use and the
complexity of the shell command string, we might instead get back
an exit code of 128 + SIGPIPE, representing a shell error exit
reporting SIGPIPE in the child process.

We could just hack up ClosePipeToProgram() to add the extra case,
but it seems like this is a fairly general issue deserving a more
general and better-documented solution.  I chose to add a couple
of functions in src/common/wait_error.c, which is a natural place
to know about wait-result encodings, that will test for either a
specific child-process signal type or any child-process signal failure.
Then, adjust other places that were doing ad-hoc tests of this type
to use the common functions.

In RestoreArchivedFile, this fixes a race condition affecting whether
the process will report an error or just silently proc_exit(1): before,
that depended on whether the intermediate shell got SIGTERM'd itself
or reported a child process failing on SIGTERM.

Like the previous patch, back-patch to v10; we could go further
but there seems no real need to.

Per report from Erik Rijkers.

Discussion: https://postgr.es/m/f3683f87ab1701bea5d86a7742b22432@xs4all.nl

Branch
------
REL_10_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/34010ac2fa187ce032a7b243c829c7ef5f047e20

Modified Files
--------------
src/backend/access/transam/xlogarchive.c | 20 ++++-----------
src/backend/commands/copy.c              |  3 +--
src/backend/postmaster/pgarch.c          | 10 +++-----
src/common/wait_error.c                  | 43 ++++++++++++++++++++++++++++++++
src/include/port.h                       |  2 ++
5 files changed, 55 insertions(+), 23 deletions(-)



view thread (3+ messages)  latest in thread

Message-ID: <E1gYcSM-0008Ox-NZ@gemulon.postgresql.org>
Permalink:  ../E1gYcSM-0008Ox-NZ@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1gYcSM-0008Ox-NZ@gemulon.postgresql.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-committers@postgresql.org
  Cc: tgl@sss.pgh.pa.us, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: Improve detection of child-process SIGPIPE failures.
  In-Reply-To: <E1gYcSM-0008Ox-NZ@gemulon.postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox