pgsql: Modify tqueue infrastructure to support transient record types. - Mailing list pgsql-committers

From Robert Haas
Subject pgsql: Modify tqueue infrastructure to support transient record types.
Date
Msg-id E1Zup2H-0005I7-R0@gemulon.postgresql.org
Whole thread Raw
Responses Re: pgsql: Modify tqueue infrastructure to support transient record types.  (Kevin Grittner <kgrittn@ymail.com>)
Re: pgsql: Modify tqueue infrastructure to support transient record types.  (Amit Kapila <amit.kapila16@gmail.com>)
Re: pgsql: Modify tqueue infrastructure to support transient record types.  (Amit Kapila <amit.kapila16@gmail.com>)
List pgsql-committers
Modify tqueue infrastructure to support transient record types.

Commit 4a4e6893aa080b9094dadbe0e65f8a75fee41ac6, which introduced this
mechanism, failed to account for the fact that the RECORD pseudo-type
uses transient typmods that are only meaningful within a single
backend.  Transferring such tuples without modification between two
cooperating backends does not work.  This commit installs a system
for passing the tuple descriptors over the same shm_mq being used to
send the tuples themselves.  The two sides might not assign the same
transient typmod to any given tuple descriptor, so we must also
substitute the appropriate receiver-side typmod for the one used by
the sender.  That adds some CPU overhead, but still seems better than
being unable to pass records between cooperating parallel processes.

Along the way, move the logic for handling multiple tuple queues from
tqueue.c to nodeGather.c; tqueue.c now provides a TupleQueueReader,
which reads from a single queue, rather than a TupleQueueFunnel, which
potentially reads from multiple queues.  This change was suggested
previously as a way to make sure that nodeGather.c rather than tqueue.c
had policy control over the order in which to read from queues, but
it wasn't clear to me until now how good an idea it was.  typmod
mapping needs to be performed separately for each queue, and it is
much simpler if the tqueue.c code handles that and leaves multiplexing
multiple queues to higher layers of the stack.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/6e71dd7ce9766582da453f493bc371d64977282f

Modified Files
--------------
src/backend/executor/nodeGather.c |  138 ++++--
src/backend/executor/tqueue.c     |  983 ++++++++++++++++++++++++++++++++-----
src/include/executor/tqueue.h     |   12 +-
src/include/nodes/execnodes.h     |    4 +-
src/tools/pgindent/typedefs.list  |    2 +-
5 files changed, 986 insertions(+), 153 deletions(-)


pgsql-committers by date:

Previous
From: Robert Haas
Date:
Subject: pgsql: Remove unnecessary cast in previous commit.
Next
From: Robert Haas
Date:
Subject: pgsql: When completing ALTER INDEX .. SET, add an equals sign also.