From 42e44f3b3830cbc051a5d83956546e2ef553b047 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 18 Apr 2022 10:18:34 +0900 Subject: [PATCH] Handle compression level in pg_receivewal for LZ4 The new option set of pg_receivewal introduced in 042a923 to control the compression method makes it now easy to pass down various options, including the compression level. The change to be able to do is simple, and requires one LZ4F_preferences_t fed to LZ4F_compressBegin(). Note that LZ4F_INIT_PREFERENCES could be used to initialize the contents of LZ4F_preferences_t as required by LZ4, but this is only available since v1.8.3. memset()'ing its structure to 0 is enough. Discussion: https://postgr.es/m/YlPQGNAAa04raObK@paquier.xyz --- src/bin/pg_basebackup/walmethods.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/bin/pg_basebackup/walmethods.c b/src/bin/pg_basebackup/walmethods.c index d5bcc208a97..cc292718da9 100644 --- a/src/bin/pg_basebackup/walmethods.c +++ b/src/bin/pg_basebackup/walmethods.c @@ -165,6 +165,7 @@ dir_open_for_write(const char *pathname, const char *temp_suffix, size_t pad_to_ { size_t ctx_out; size_t header_size; + LZ4F_preferences_t prefs; ctx_out = LZ4F_createCompressionContext(&ctx, LZ4F_VERSION); if (LZ4F_isError(ctx_out)) @@ -177,8 +178,12 @@ dir_open_for_write(const char *pathname, const char *temp_suffix, size_t pad_to_ lz4bufsize = LZ4F_compressBound(LZ4_IN_SIZE, NULL); lz4buf = pg_malloc0(lz4bufsize); + /* assign the compression level, default is 0 */ + memset(&prefs, 0, sizeof(prefs)); + prefs.compressionLevel = dir_data->compression_level; + /* add the header */ - header_size = LZ4F_compressBegin(ctx, lz4buf, lz4bufsize, NULL); + header_size = LZ4F_compressBegin(ctx, lz4buf, lz4bufsize, &prefs); if (LZ4F_isError(header_size)) { dir_data->lasterrstring = LZ4F_getErrorName(header_size); -- 2.47.2