Fixes for compression options of pg_receivewal and refactoring of backup_compression.{c,h} - Mailing list pgsql-hackers

From Michael Paquier
Subject Fixes for compression options of pg_receivewal and refactoring of backup_compression.{c,h}
Date
Msg-id YlPQGNAAa04raObK@paquier.xyz
Whole thread Raw
Responses Re: Fixes for compression options of pg_receivewal and refactoring of backup_compression.{c,h}  (gkokolatos@pm.me)
Re: Fixes for compression options of pg_receivewal and refactoring of backup_compression.{c,h}  (Robert Haas <robertmhaas@gmail.com>)
List pgsql-hackers
Hi all,
(Added Robert and Georgios in CC:)

Since babbbb5 and the introduction of LZ4, I have reworked the way
compression is controlled for pg_receivewal, with two options:
- --compress-method, settable to "gzip", "none" or "lz4".
- --compress, to pass down a compression level, where the allowed
range is 1-9.  If passing down 0, we'd get an error rather than
implying no compression, contrary to what we did in ~14.

I initially thought that this was fine as-is, but then Robert and
others have worked on client/server compression for pg_basebackup,
introducing a much better design with centralized APIs where one can
use METHOD:DETAIL for as compression value, where DETAIL is a
comma-separated list of keyword=value (keyword = "level" or
"workers"), with centralized checks and an extensible design.

This is something I think we had better fix before beta1, because now
we have binaries that use an inconsistent set of options.  So,
attached is a patch set aimed at rework this option set from the
ground, taking advantage of the recent work done by Robert and others
for pg_basebackup:
- 0001 is a simple rename of backup_compression.{c,h} to
compression.{c,h}, removing anything related to base backups from
that.  One extra reason behind this renaming is that I would like to
use this infra for pg_dump, but that's material for 16~.
- 0002 removes WalCompressionMethod, replacing it by
pg_compress_algorithm as these are the same enums.  Robert complained
about the confusion that WalCompressionMethod could lead to as this
could be used for the compression of data, and not only WAL.  I have
renamed some variables to be more consistent, while on it.
- 0003 is the actual option rework for pg_receivewal.  This takes
advantage of 0001, leading to the result of removing --compress-method
and replacing it with --compress, taking care of the backward
compatibility problems for an integer value, aka 0 implies no
compression and val > 0 implies gzip.  One bonus reason to switch to
that is that this would make the addition of zstd for pg_receivewal
easier in the future.

I am going to add an open item for this stuff.  Comments or thoughts?

Thanks,
--
Michael

Attachment

pgsql-hackers by date:

Previous
From: Thomas Munro
Date:
Subject: Re: pgsql: Add TAP test for archive_cleanup_command and recovery_end_comman
Next
From: Michael Paquier
Date:
Subject: Re: Outdated copyright year in parse_jsontable.c