pgsql: Add a debugging option to stress-test outfuncs.c and readfuncs.c

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Add a debugging option to stress-test outfuncs.c and readfuncs.c
Date: 2018-09-18 21:12:08
Message-ID: E1g2NI0-0007PV-2r@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Add a debugging option to stress-test outfuncs.c and readfuncs.c.

In the normal course of operation, query trees will be serialized only if
they are stored as views or rules; and plan trees will be serialized only
if they get passed to parallel-query workers. This leaves an awful lot of
opportunity for bugs/oversights to not get detected, as indeed we've just
been reminded of the hard way.

To improve matters, this patch adds a new compile option
WRITE_READ_PARSE_PLAN_TREES, which is modeled on the longstanding option
COPY_PARSE_PLAN_TREES; but instead of passing all parse and plan trees
through copyObject, it passes them through nodeToString + stringToNode.
Enabling this option in a buildfarm animal or two will catch problems
at least for cases that are exercised by the regression tests.

A small problem with this idea is that readfuncs.c historically has
discarded location fields, on the reasonable grounds that parse
locations in a retrieved view are not relevant to the current query.
But doing that in WRITE_READ_PARSE_PLAN_TREES breaks pg_stat_statements,
and it could cause problems for future improvements that might try to
report error locations at runtime. To fix that, provide a variant
behavior in readfuncs.c that makes it restore location fields when
told to.

In passing, const-ify the string arguments of stringToNode and its
subsidiary functions, just because it annoyed me that they weren't
const already.

Discussion: https://postgr.es/m/17114.1537138992@sss.pgh.pa.us

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/d0cfc3d6a44af1756ca5be8cb2414da7b8bf20d5

Modified Files
--------------
src/backend/nodes/read.c | 68 ++++++++++++++++++++++++++++------
src/backend/nodes/readfuncs.c | 31 +++++++++++-----
src/backend/parser/parse_relation.c | 1 -
src/backend/tcop/postgres.c | 74 ++++++++++++++++++++++++++++++++++++-
src/include/nodes/nodes.h | 5 ++-
src/include/nodes/readfuncs.h | 13 +++++--
src/include/pg_config_manual.h | 7 ++++
7 files changed, 170 insertions(+), 29 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2018-09-18 21:34:23 pgsql: Revert "Allow concurrent-safe open() and fopen() in frontend cod
Previous Message Tom Lane 2018-09-18 19:08:37 pgsql: Fix some minor issues exposed by outfuncs/readfuncs testing.