pgsql: Pass extra data to bgworkers, and use this to fix parallel conte

From: Robert Haas <rhaas(at)postgresql(dot)org>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Pass extra data to bgworkers, and use this to fix parallel conte
Date: 2015-11-05 17:21:26
Message-ID: E1ZuOE2-0003lm-TS@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Pass extra data to bgworkers, and use this to fix parallel contexts.

Up until now, the total amount of data that could be passed to a
background worker at startup was one datum, which can be a small as
4 bytes on some systems. That's enough to pass a dsm_handle or an
array index, but not much else. Add a bgw_extra flag to the
BackgroundWorker struct, allowing up to 128 bytes to be passed to
a new worker on any platform.

Use this to fix a problem I recently discovered with the parallel
context machinery added in 9.5: the master assigns each worker an
array index, and each worker subsequently assigns itself an array
index, and there's nothing to guarantee that the two sets of indexes
match, leading to chaos.

Normally, I would not back-patch the change to add bgw_extra, since it
is basically a feature addition. However, since 9.5 is still in beta
and there seems to be no other sensible way to repair the broken
parallel context machinery, back-patch to 9.5. Existing background
worker code can ignore the bgw_extra field without a problem, but
might need to be recompiled since the structure size has changed.

Report and patch by me. Review by Amit Kapila.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/64b2e7ad917a9a7814904d0f6dbde52cefbcfa00

Modified Files
--------------
doc/src/sgml/bgworker.sgml | 8 ++++++++
src/backend/access/transam/parallel.c | 24 +++++++-----------------
src/backend/postmaster/bgworker.c | 1 +
src/include/postmaster/bgworker.h | 2 ++
4 files changed, 18 insertions(+), 17 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2015-11-05 18:52:59 pgsql: Fix memory leaks in PL/Python.
Previous Message Tom Lane 2015-11-05 15:46:26 pgsql: Improve implementation of GEQO's init_tour() function.