Rationalize parallel dump/restore's handling of worker cmd/status messages.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 27 Sep 2016 17:56:04 +0000 (13:56 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 27 Sep 2016 17:56:04 +0000 (13:56 -0400)
commitfb03d08a89e81a68585f17fd8e7f21c618f4e851
treed1169bd63fa6e1459e60d7ef74420b168a757e06
parentb7b8cc0cfcf1c956b752f3e25894f9ad607583b7
Rationalize parallel dump/restore's handling of worker cmd/status messages.

The existing APIs for creating and parsing command and status messages are
rather messy; for example, archive-format modules have to provide code
for constructing command messages, which is entirely pointless since
the code to read them is hard-wired in WaitForCommands() and hence
no format-specific variation is actually possible.  But there's little
foreseeable reason to need format-specific variation anyway.

The situation for status messages is no better; at least those are both
constructed and parsed by format-specific code, but said code is quite
redundant since there's no actual need for format-specific variation.

To add insult to injury, the first API involves returning pointers to
static buffers, which is bad, while the second involves returning pointers
to malloc'd strings, which is safer but randomly inconsistent.

Hence, get rid of the MasterStartParallelItem and MasterEndParallelItem
APIs, and instead write centralized functions that construct and parse
command and status messages.  If we ever do need more flexibility, these
functions can be the standard implementations of format-specific
callback methods, but that's a long way off if it ever happens.

Tom Lane, reviewed by Kevin Grittner

Discussion: <17340.1464465717@sss.pgh.pa.us>
src/bin/pg_dump/parallel.c
src/bin/pg_dump/pg_backup_archiver.h
src/bin/pg_dump/pg_backup_custom.c
src/bin/pg_dump/pg_backup_directory.c
src/bin/pg_dump/pg_backup_tar.c