diff --git a/build/lib/pgBackRestBuild/Config/Data.pm b/build/lib/pgBackRestBuild/Config/Data.pm index a6786c334..ab4800235 100644 --- a/build/lib/pgBackRestBuild/Config/Data.pm +++ b/build/lib/pgBackRestBuild/Config/Data.pm @@ -169,6 +169,8 @@ use constant CFGOPT_DB_TIMEOUT => 'db-timeo push @EXPORT, qw(CFGOPT_DB_TIMEOUT); use constant CFGOPT_COMPRESS => 'compress'; push @EXPORT, qw(CFGOPT_COMPRESS); +use constant CFGOPT_COMPRESS_TYPE => 'compress-type'; + push @EXPORT, qw(CFGOPT_COMPRESS_TYPE); use constant CFGOPT_COMPRESS_LEVEL => 'compress-level'; push @EXPORT, qw(CFGOPT_COMPRESS_LEVEL); use constant CFGOPT_COMPRESS_LEVEL_NETWORK => 'compress-level-network'; @@ -1152,6 +1154,7 @@ my %hConfigDefine = }, }, + # Option is deprecated and should not be referenced outside of cfgLoadUpdateOption(). &CFGOPT_COMPRESS => { &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, @@ -1164,11 +1167,24 @@ my %hConfigDefine = } }, + &CFGOPT_COMPRESS_TYPE => + { + &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, + &CFGDEF_TYPE => CFGDEF_TYPE_STRING, + &CFGDEF_DEFAULT => 'gz', + &CFGDEF_ALLOW_LIST => + [ + 'none', + 'gz', + ], + &CFGDEF_COMMAND => CFGOPT_COMPRESS, + }, + &CFGOPT_COMPRESS_LEVEL => { &CFGDEF_SECTION => CFGDEF_SECTION_GLOBAL, &CFGDEF_TYPE => CFGDEF_TYPE_INTEGER, - &CFGDEF_DEFAULT => 6, + &CFGDEF_REQUIRED => false, &CFGDEF_ALLOW_RANGE => [CFGDEF_DEFAULT_COMPRESS_LEVEL_MIN, CFGDEF_DEFAULT_COMPRESS_LEVEL_MAX], &CFGDEF_COMMAND => CFGOPT_COMPRESS, }, diff --git a/doc/xml/reference.xml b/doc/xml/reference.xml index 714c7d31e..4266fe7d3 100644 --- a/doc/xml/reference.xml +++ b/doc/xml/reference.xml @@ -126,18 +126,32 @@ - Use gzip file compression. + Use file compression. - Backup files are compatible with command-line gzip tools. + Backup files are compatible with command-line compression tools. + + This option is now deprecated. The compress-type option should be used instead. + + n + + + + + File compression type. + + The following compression types are supported: + n - Compression level for stored files. + File compression level. - Sets the zlib level to be used for file compression when compress=y. + Sets the level to be used for file compression when compress-type does not equal none or compress=y (deprecated). 0-9 9 @@ -145,9 +159,9 @@ - Compression level for network transfer when compress=n. + Network compression level. - Sets the zlib level to be used for protocol compression when compress=n and the database cluster is not on the same host as the repository. Protocol compression is used to reduce network traffic but can be disabled by setting compress-level-network=0. When compress=y the compress-level-network setting is ignored and compress-level is used instead so that the file is only compressed once. SSH compression is always disabled. + Sets the network compression level when compress-type=none and the command is not run on the same host as the repository. Compression is used to reduce network traffic but can be disabled by setting compress-level-network=0. When compress-type does not equal none the compress-level-network setting is ignored and compress-level is used instead so that the file is only compressed once. SSH compression is always disabled. 0-9 1 diff --git a/doc/xml/release.xml b/doc/xml/release.xml index 4331a6886..c9e6bef41 100644 --- a/doc/xml/release.xml +++ b/doc/xml/release.xml @@ -27,6 +27,14 @@ + + + + + +

Add infrastructure for multiple compression type support.

+
+ diff --git a/lib/pgBackRest/LibCAuto.pm b/lib/pgBackRest/LibCAuto.pm index 46ccc8da6..40f2abb29 100644 --- a/lib/pgBackRest/LibCAuto.pm +++ b/lib/pgBackRest/LibCAuto.pm @@ -11,6 +11,9 @@ sub libcAutoConstant { return { + CFGOPTVAL_COMPRESS_TYPE_NONE => 'none', + CFGOPTVAL_COMPRESS_TYPE_GZ => 'gz', + CFGOPTVAL_INFO_OUTPUT_TEXT => 'text', CFGOPTVAL_INFO_OUTPUT_JSON => 'json', @@ -78,6 +81,8 @@ sub libcAutoExportTag { config => [ + 'CFGOPTVAL_COMPRESS_TYPE_NONE', + 'CFGOPTVAL_COMPRESS_TYPE_GZ', 'CFGOPTVAL_INFO_OUTPUT_TEXT', 'CFGOPTVAL_INFO_OUTPUT_JSON', 'CFGOPTVAL_LS_OUTPUT_TEXT', @@ -139,6 +144,7 @@ sub libcAutoExportTag 'CFGOPT_COMPRESS', 'CFGOPT_COMPRESS_LEVEL', 'CFGOPT_COMPRESS_LEVEL_NETWORK', + 'CFGOPT_COMPRESS_TYPE', 'CFGOPT_CONFIG', 'CFGOPT_CONFIG_INCLUDE_PATH', 'CFGOPT_CONFIG_PATH', diff --git a/lib/pgBackRest/Manifest.pm b/lib/pgBackRest/Manifest.pm index 7bbd97400..d48fe0a35 100644 --- a/lib/pgBackRest/Manifest.pm +++ b/lib/pgBackRest/Manifest.pm @@ -108,6 +108,8 @@ use constant MANIFEST_KEY_CHECKSUM_PAGE => 'option-' push @EXPORT, qw(MANIFEST_KEY_CHECKSUM_PAGE); use constant MANIFEST_KEY_COMPRESS => 'option-' . cfgOptionName(CFGOPT_COMPRESS); push @EXPORT, qw(MANIFEST_KEY_COMPRESS); +use constant MANIFEST_KEY_COMPRESS_TYPE => 'option-' . cfgOptionName(CFGOPT_COMPRESS_TYPE); + push @EXPORT, qw(MANIFEST_KEY_COMPRESS_TYPE); use constant MANIFEST_KEY_COMPRESS_LEVEL => 'option-' . cfgOptionName(CFGOPT_COMPRESS_LEVEL); push @EXPORT, qw(MANIFEST_KEY_COMPRESS_LEVEL); use constant MANIFEST_KEY_COMPRESS_LEVEL_NETWORK => 'option-' . cfgOptionName(CFGOPT_COMPRESS_LEVEL_NETWORK); diff --git a/libc/Makefile.PL b/libc/Makefile.PL index fae5f175c..60cd546fc 100644 --- a/libc/Makefile.PL +++ b/libc/Makefile.PL @@ -46,6 +46,7 @@ my @stryCFile = 'common/compress/gz/common.c', 'common/compress/gz/compress.c', 'common/compress/gz/decompress.c', + 'common/compress/helper.c', 'common/crypto/cipherBlock.c', 'common/crypto/common.c', 'common/crypto/hash.c', diff --git a/src/Makefile.in b/src/Makefile.in index 329acf8c9..00d6134d4 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -75,6 +75,7 @@ SRCS = \ command/stanza/delete.c \ command/stanza/upgrade.c \ command/storage/list.c \ + common/compress/helper.c \ common/compress/gz/common.c \ common/compress/gz/compress.c \ common/compress/gz/decompress.c \ @@ -212,46 +213,46 @@ clean: #################################################################################################################################### # Compile rules #################################################################################################################################### -command/archive/common.o: command/archive/common.c build.auto.h command/archive/common.h common/assert.h common/debug.h common/error.auto.h common/error.h common/fork.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h common/wait.h config/config.auto.h config/config.h config/define.auto.h config/define.h postgres/version.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h +command/archive/common.o: command/archive/common.c build.auto.h command/archive/common.h common/assert.h common/compress/helper.h common/debug.h common/error.auto.h common/error.h common/fork.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h common/wait.h config/config.auto.h config/config.h config/define.auto.h config/define.h postgres/version.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/archive/common.c -o command/archive/common.o -command/archive/get/file.o: command/archive/get/file.c build.auto.h command/archive/common.h command/archive/get/file.h command/control/common.h common/assert.h common/compress/gz/common.h common/compress/gz/decompress.h common/crypto/cipherBlock.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h info/info.h info/infoArchive.h info/infoPg.h postgres/interface.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h +command/archive/get/file.o: command/archive/get/file.c build.auto.h command/archive/common.h command/archive/get/file.h command/control/common.h common/assert.h common/compress/helper.h common/crypto/cipherBlock.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h info/info.h info/infoArchive.h info/infoPg.h postgres/interface.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/archive/get/file.c -o command/archive/get/file.o -command/archive/get/get.o: command/archive/get/get.c build.auto.h command/archive/common.h command/archive/get/file.h command/archive/get/protocol.h command/command.h common/assert.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h common/wait.h config/config.auto.h config/config.h config/define.auto.h config/define.h config/exec.h postgres/interface.h protocol/client.h protocol/command.h protocol/helper.h protocol/parallel.h protocol/parallelJob.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h +command/archive/get/get.o: command/archive/get/get.c build.auto.h command/archive/common.h command/archive/get/file.h command/archive/get/protocol.h command/command.h common/assert.h common/compress/helper.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h common/wait.h config/config.auto.h config/config.h config/define.auto.h config/define.h config/exec.h postgres/interface.h protocol/client.h protocol/command.h protocol/helper.h protocol/parallel.h protocol/parallelJob.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/archive/get/get.c -o command/archive/get/get.o command/archive/get/protocol.o: command/archive/get/protocol.c build.auto.h command/archive/get/file.h command/archive/get/protocol.h common/assert.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/io.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/archive/get/protocol.c -o command/archive/get/protocol.o -command/archive/push/file.o: command/archive/push/file.c build.auto.h command/archive/common.h command/archive/push/file.h command/control/common.h common/assert.h common/compress/gz/common.h common/compress/gz/compress.h common/crypto/cipherBlock.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/io.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h postgres/interface.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h +command/archive/push/file.o: command/archive/push/file.c build.auto.h command/archive/common.h command/archive/push/file.h command/control/common.h common/assert.h common/compress/helper.h common/crypto/cipherBlock.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/io.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h postgres/interface.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/archive/push/file.c -o command/archive/push/file.o -command/archive/push/protocol.o: command/archive/push/protocol.c build.auto.h command/archive/push/file.h command/archive/push/protocol.h common/assert.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/io.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h +command/archive/push/protocol.o: command/archive/push/protocol.c build.auto.h command/archive/push/file.h command/archive/push/protocol.h common/assert.h common/compress/helper.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/io.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/archive/push/protocol.c -o command/archive/push/protocol.o -command/archive/push/push.o: command/archive/push/push.c build.auto.h command/archive/common.h command/archive/push/file.h command/archive/push/protocol.h command/command.h command/control/common.h common/assert.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h common/wait.h config/config.auto.h config/config.h config/define.auto.h config/define.h config/exec.h info/info.h info/infoArchive.h info/infoPg.h postgres/interface.h protocol/client.h protocol/command.h protocol/helper.h protocol/parallel.h protocol/parallelJob.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h +command/archive/push/push.o: command/archive/push/push.c build.auto.h command/archive/common.h command/archive/push/file.h command/archive/push/protocol.h command/command.h command/control/common.h common/assert.h common/compress/helper.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h common/wait.h config/config.auto.h config/config.h config/define.auto.h config/define.h config/exec.h info/info.h info/infoArchive.h info/infoPg.h postgres/interface.h protocol/client.h protocol/command.h protocol/helper.h protocol/parallel.h protocol/parallelJob.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/archive/push/push.c -o command/archive/push/push.o -command/backup/backup.o: command/backup/backup.c build.auto.h command/archive/common.h command/backup/backup.h command/backup/common.h command/backup/file.h command/backup/protocol.h command/check/common.h command/control/common.h command/stanza/common.h common/assert.h common/compress/gz/common.h common/compress/gz/compress.h common/compress/gz/decompress.h common/crypto/cipherBlock.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/filter/size.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h db/db.h db/helper.h info/info.h info/infoArchive.h info/infoBackup.h info/infoPg.h info/manifest.h postgres/client.h postgres/interface.h postgres/version.h protocol/client.h protocol/command.h protocol/helper.h protocol/parallel.h protocol/parallelJob.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h version.h +command/backup/backup.o: command/backup/backup.c build.auto.h command/archive/common.h command/backup/backup.h command/backup/common.h command/backup/file.h command/backup/protocol.h command/check/common.h command/control/common.h command/stanza/common.h common/assert.h common/compress/helper.h common/crypto/cipherBlock.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/filter/size.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h db/db.h db/helper.h info/info.h info/infoArchive.h info/infoBackup.h info/infoPg.h info/manifest.h postgres/client.h postgres/interface.h postgres/version.h protocol/client.h protocol/command.h protocol/helper.h protocol/parallel.h protocol/parallelJob.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h version.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/backup/backup.c -o command/backup/backup.o command/backup/common.o: command/backup/common.c build.auto.h command/backup/common.h common/assert.h common/debug.h common/error.auto.h common/error.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/type/buffer.h common/type/convert.h common/type/string.h common/type/stringz.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/backup/common.c -o command/backup/common.o -command/backup/file.o: command/backup/file.c build.auto.h command/backup/file.h command/backup/pageChecksum.h common/assert.h common/compress/gz/common.h common/compress/gz/compress.h common/compress/gz/decompress.h common/crypto/cipherBlock.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/filter/size.h common/io/io.h common/io/read.h common/io/write.h common/log.h common/logLevel.h common/memContext.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h postgres/interface.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h +command/backup/file.o: command/backup/file.c build.auto.h command/backup/file.h command/backup/pageChecksum.h common/assert.h common/compress/helper.h common/crypto/cipherBlock.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/filter/size.h common/io/io.h common/io/read.h common/io/write.h common/log.h common/logLevel.h common/memContext.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h postgres/interface.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/backup/file.c -o command/backup/file.o command/backup/pageChecksum.o: command/backup/pageChecksum.c build.auto.h command/backup/pageChecksum.h common/assert.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/filter.intern.h common/io/filter/group.h common/io/read.h common/io/write.h common/log.h common/logLevel.h common/macro.h common/memContext.h common/object.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h postgres/interface.h postgres/interface/static.auto.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/backup/pageChecksum.c -o command/backup/pageChecksum.o -command/backup/protocol.o: command/backup/protocol.c build.auto.h command/backup/file.h command/backup/protocol.h common/assert.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/io.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h +command/backup/protocol.o: command/backup/protocol.c build.auto.h command/backup/file.h command/backup/protocol.h common/assert.h common/compress/helper.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/io.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/backup/protocol.c -o command/backup/protocol.o -command/check/check.o: command/check/check.c build.auto.h command/archive/common.h command/check/check.h command/check/common.h common/assert.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h db/db.h db/helper.h info/info.h info/infoArchive.h info/infoPg.h postgres/client.h postgres/interface.h protocol/client.h protocol/command.h protocol/helper.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h +command/check/check.o: command/check/check.c build.auto.h command/archive/common.h command/check/check.h command/check/common.h common/assert.h common/compress/helper.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h db/db.h db/helper.h info/info.h info/infoArchive.h info/infoPg.h postgres/client.h postgres/interface.h protocol/client.h protocol/command.h protocol/helper.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/check/check.c -o command/check/check.o -command/check/common.o: command/check/common.c build.auto.h command/backup/common.h command/check/common.h common/assert.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h db/db.h db/helper.h info/info.h info/infoArchive.h info/infoBackup.h info/infoPg.h info/manifest.h postgres/client.h postgres/interface.h protocol/client.h protocol/command.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h version.h +command/check/common.o: command/check/common.c build.auto.h command/backup/common.h command/check/common.h common/assert.h common/compress/helper.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h db/db.h db/helper.h info/info.h info/infoArchive.h info/infoBackup.h info/infoPg.h info/manifest.h postgres/client.h postgres/interface.h protocol/client.h protocol/command.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h version.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/check/common.c -o command/check/common.o command/command.o: command/command.c build.auto.h common/assert.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/http/client.h common/io/http/header.h common/io/http/query.h common/io/read.h common/io/tls/client.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h version.h @@ -266,13 +267,13 @@ command/control/start.o: command/control/start.c build.auto.h command/control/co command/control/stop.o: command/control/stop.c build.auto.h command/control/common.h common/assert.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/read.intern.h common/io/write.h common/io/write.intern.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h storage/helper.h storage/info.h storage/read.h storage/read.intern.h storage/storage.h storage/storage.intern.h storage/write.h storage/write.intern.h version.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/control/stop.c -o command/control/stop.o -command/expire/expire.o: command/expire/expire.c build.auto.h command/archive/common.h command/backup/common.h common/assert.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h info/info.h info/infoArchive.h info/infoBackup.h info/infoPg.h info/manifest.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h +command/expire/expire.o: command/expire/expire.c build.auto.h command/archive/common.h command/backup/common.h common/assert.h common/compress/helper.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h info/info.h info/infoArchive.h info/infoBackup.h info/infoPg.h info/manifest.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/expire/expire.c -o command/expire/expire.o command/help/help.o: command/help/help.c build.auto.h common/assert.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/handleWrite.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h version.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/help/help.c -o command/help/help.o -command/info/info.o: command/info/info.c build.auto.h command/archive/common.h command/backup/common.h command/info/info.h common/assert.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/handleWrite.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/json.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h info/info.h info/infoArchive.h info/infoBackup.h info/infoPg.h info/manifest.h postgres/interface.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h +command/info/info.o: command/info/info.c build.auto.h command/archive/common.h command/backup/common.h command/info/info.h common/assert.h common/compress/helper.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/handleWrite.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/json.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h info/info.h info/infoArchive.h info/infoBackup.h info/infoPg.h info/manifest.h postgres/interface.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/info/info.c -o command/info/info.o command/local/local.o: command/local/local.c build.auto.h command/archive/get/protocol.h command/archive/push/protocol.h command/backup/protocol.h command/restore/protocol.h common/assert.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/handleRead.h common/io/handleWrite.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h config/protocol.h protocol/client.h protocol/command.h protocol/helper.h protocol/server.h @@ -281,25 +282,25 @@ command/local/local.o: command/local/local.c build.auto.h command/archive/get/pr command/remote/remote.o: command/remote/remote.c build.auto.h command/control/common.h common/assert.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/handleRead.h common/io/handleWrite.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h config/protocol.h db/protocol.h protocol/client.h protocol/command.h protocol/helper.h protocol/server.h storage/remote/protocol.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/remote/remote.c -o command/remote/remote.o -command/restore/file.o: command/restore/file.c build.auto.h command/restore/file.h common/assert.h common/compress/gz/common.h common/compress/gz/decompress.h common/crypto/cipherBlock.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/filter/size.h common/io/io.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h +command/restore/file.o: command/restore/file.c build.auto.h command/restore/file.h common/assert.h common/compress/helper.h common/crypto/cipherBlock.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/filter/size.h common/io/io.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/restore/file.c -o command/restore/file.o -command/restore/protocol.o: command/restore/protocol.c build.auto.h command/restore/file.h command/restore/protocol.h common/assert.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/io.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h +command/restore/protocol.o: command/restore/protocol.c build.auto.h command/restore/file.h command/restore/protocol.h common/assert.h common/compress/helper.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/io.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/restore/protocol.c -o command/restore/protocol.o -command/restore/restore.o: command/restore/restore.c build.auto.h command/backup/common.h command/restore/protocol.h command/restore/restore.h common/assert.h common/crypto/cipherBlock.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/io/write.intern.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h common/user.h config/config.auto.h config/config.h config/define.auto.h config/define.h config/exec.h info/info.h info/infoBackup.h info/infoPg.h info/manifest.h postgres/interface.h postgres/version.h protocol/client.h protocol/command.h protocol/helper.h protocol/parallel.h protocol/parallelJob.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h storage/write.intern.h version.h +command/restore/restore.o: command/restore/restore.c build.auto.h command/backup/common.h command/restore/protocol.h command/restore/restore.h common/assert.h common/compress/helper.h common/crypto/cipherBlock.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/io/write.intern.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h common/user.h config/config.auto.h config/config.h config/define.auto.h config/define.h config/exec.h info/info.h info/infoBackup.h info/infoPg.h info/manifest.h postgres/interface.h postgres/version.h protocol/client.h protocol/command.h protocol/helper.h protocol/parallel.h protocol/parallelJob.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h storage/write.intern.h version.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/restore/restore.c -o command/restore/restore.o command/stanza/common.o: command/stanza/common.c build.auto.h command/check/common.h common/assert.h common/crypto/common.h common/debug.h common/encode.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h db/db.h db/helper.h info/info.h info/infoPg.h postgres/client.h postgres/interface.h postgres/version.h protocol/client.h protocol/command.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/stanza/common.c -o command/stanza/common.o -command/stanza/create.o: command/stanza/create.c build.auto.h command/backup/common.h command/check/common.h command/control/common.h command/stanza/common.h command/stanza/create.h common/assert.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h db/db.h info/info.h info/infoArchive.h info/infoBackup.h info/infoPg.h info/manifest.h postgres/client.h postgres/interface.h postgres/version.h protocol/client.h protocol/command.h protocol/helper.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h +command/stanza/create.o: command/stanza/create.c build.auto.h command/backup/common.h command/check/common.h command/control/common.h command/stanza/common.h command/stanza/create.h common/assert.h common/compress/helper.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h db/db.h info/info.h info/infoArchive.h info/infoBackup.h info/infoPg.h info/manifest.h postgres/client.h postgres/interface.h postgres/version.h protocol/client.h protocol/command.h protocol/helper.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/stanza/create.c -o command/stanza/create.o -command/stanza/delete.o: command/stanza/delete.c build.auto.h command/backup/common.h command/control/common.h command/stanza/delete.h common/assert.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h info/info.h info/infoArchive.h info/infoBackup.h info/infoPg.h info/manifest.h postgres/interface.h protocol/client.h protocol/command.h protocol/helper.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h +command/stanza/delete.o: command/stanza/delete.c build.auto.h command/backup/common.h command/control/common.h command/stanza/delete.h common/assert.h common/compress/helper.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h info/info.h info/infoArchive.h info/infoBackup.h info/infoPg.h info/manifest.h postgres/interface.h protocol/client.h protocol/command.h protocol/helper.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/stanza/delete.c -o command/stanza/delete.o -command/stanza/upgrade.o: command/stanza/upgrade.c build.auto.h command/backup/common.h command/check/common.h command/control/common.h command/stanza/common.h command/stanza/upgrade.h common/assert.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h db/db.h info/info.h info/infoArchive.h info/infoBackup.h info/infoPg.h info/manifest.h postgres/client.h postgres/interface.h postgres/version.h protocol/client.h protocol/command.h protocol/helper.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h +command/stanza/upgrade.o: command/stanza/upgrade.c build.auto.h command/backup/common.h command/check/common.h command/control/common.h command/stanza/common.h command/stanza/upgrade.h common/assert.h common/compress/helper.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h db/db.h info/info.h info/infoArchive.h info/infoBackup.h info/infoPg.h info/manifest.h postgres/client.h postgres/interface.h postgres/version.h protocol/client.h protocol/command.h protocol/helper.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c command/stanza/upgrade.c -o command/stanza/upgrade.o command/storage/list.o: command/storage/list.c build.auto.h common/assert.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/handleWrite.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/json.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h @@ -314,6 +315,9 @@ common/compress/gz/compress.o: common/compress/gz/compress.c build.auto.h common common/compress/gz/decompress.o: common/compress/gz/decompress.c build.auto.h common/assert.h common/compress/gz/common.h common/compress/gz/decompress.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/filter.intern.h common/log.h common/logLevel.h common/macro.h common/memContext.h common/object.h common/stackTrace.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c common/compress/gz/decompress.c -o common/compress/gz/decompress.o +common/compress/helper.o: common/compress/helper.c build.auto.h common/assert.h common/compress/gz/common.h common/compress/gz/compress.h common/compress/gz/decompress.h common/compress/helper.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/string.h common/type/stringz.h common/type/variant.h common/type/variantList.h version.h + $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c common/compress/helper.c -o common/compress/helper.o + common/crypto/cipherBlock.o: common/crypto/cipherBlock.c build.auto.h common/assert.h common/crypto/cipherBlock.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/filter.intern.h common/io/filter/group.h common/log.h common/logLevel.h common/macro.h common/memContext.h common/object.h common/stackTrace.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c common/crypto/cipherBlock.c -o common/crypto/cipherBlock.o @@ -467,7 +471,7 @@ config/define.o: config/define.c build.auto.h common/assert.h common/debug.h com config/exec.o: config/exec.c build.auto.h common/assert.h common/debug.h common/error.auto.h common/error.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h config/exec.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c config/exec.c -o config/exec.o -config/load.o: config/load.c build.auto.h command/command.h common/assert.h common/debug.h common/error.auto.h common/error.h common/io/io.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h config/load.h config/parse.h +config/load.o: config/load.c build.auto.h command/command.h common/assert.h common/compress/helper.h common/compress/helper.intern.h common/debug.h common/error.auto.h common/error.h common/io/io.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h config/load.h config/parse.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c config/load.c -o config/load.o config/parse.o: config/parse.c build.auto.h common/assert.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h config/parse.auto.c config/parse.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h version.h @@ -491,13 +495,13 @@ info/info.o: info/info.c build.auto.h common/assert.h common/crypto/hash.h commo info/infoArchive.o: info/infoArchive.c build.auto.h common/assert.h common/crypto/cipherBlock.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/log.h common/logLevel.h common/macro.h common/memContext.h common/object.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h info/info.h info/infoArchive.h info/infoPg.h postgres/interface.h postgres/version.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c info/infoArchive.c -o info/infoArchive.o -info/infoBackup.o: info/infoBackup.c build.auto.h command/backup/common.h common/assert.h common/crypto/cipherBlock.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/log.h common/logLevel.h common/macro.h common/memContext.h common/object.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/json.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h info/info.h info/infoBackup.h info/infoPg.h info/manifest.h postgres/interface.h postgres/version.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h version.h +info/infoBackup.o: info/infoBackup.c build.auto.h command/backup/common.h common/assert.h common/compress/helper.h common/crypto/cipherBlock.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/log.h common/logLevel.h common/macro.h common/memContext.h common/object.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/json.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h info/info.h info/infoBackup.h info/infoPg.h info/manifest.h postgres/interface.h postgres/version.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h version.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c info/infoBackup.c -o info/infoBackup.o info/infoPg.o: info/infoPg.c build.auto.h common/assert.h common/crypto/common.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/log.h common/logLevel.h common/macro.h common/memContext.h common/object.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/json.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h info/info.h info/infoPg.h postgres/interface.h postgres/version.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c info/infoPg.c -o info/infoPg.o -info/manifest.o: info/manifest.c build.auto.h command/backup/common.h common/assert.h common/crypto/cipherBlock.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/log.h common/logLevel.h common/macro.h common/memContext.h common/object.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/json.h common/type/keyValue.h common/type/list.h common/type/mcv.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h info/info.h info/manifest.h postgres/interface.h postgres/version.h storage/info.h storage/read.h storage/storage.h storage/write.h version.h +info/manifest.o: info/manifest.c build.auto.h command/backup/common.h common/assert.h common/compress/helper.h common/crypto/cipherBlock.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/ini.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/log.h common/logLevel.h common/macro.h common/memContext.h common/object.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/json.h common/type/keyValue.h common/type/list.h common/type/mcv.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h info/info.h info/manifest.h postgres/interface.h postgres/version.h storage/info.h storage/read.h storage/storage.h storage/write.h version.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c info/manifest.c -o info/manifest.o main.o: main.c build.auto.h command/archive/get/get.h command/archive/push/push.h command/backup/backup.h command/check/check.h command/command.h command/control/start.h command/control/stop.h command/expire/expire.h command/help/help.h command/info/info.h command/local/local.h command/remote/remote.h command/restore/restore.h command/stanza/create.h command/stanza/delete.h command/stanza/upgrade.h command/storage/list.h common/assert.h common/debug.h common/error.auto.h common/error.h common/exit.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/write.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h config/load.h postgres/interface.h storage/helper.h storage/info.h storage/read.h storage/storage.h storage/write.h version.h @@ -584,16 +588,16 @@ storage/posix/write.o: storage/posix/write.c build.auto.h common/assert.h common storage/read.o: storage/read.c build.auto.h common/assert.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/read.intern.h common/log.h common/logLevel.h common/macro.h common/memContext.h common/object.h common/stackTrace.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/string.h common/type/stringz.h common/type/variant.h common/type/variantList.h storage/read.h storage/read.intern.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c storage/read.c -o storage/read.o -storage/remote/protocol.o: storage/remote/protocol.c build.auto.h command/backup/pageChecksum.h common/assert.h common/compress/gz/compress.h common/compress/gz/decompress.h common/crypto/cipherBlock.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/filter/sink.h common/io/filter/size.h common/io/io.h common/io/read.h common/io/read.intern.h common/io/write.h common/io/write.intern.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/json.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h protocol/client.h protocol/command.h protocol/helper.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/read.intern.h storage/remote/protocol.h storage/storage.h storage/storage.intern.h storage/write.h storage/write.intern.h version.h +storage/remote/protocol.o: storage/remote/protocol.c build.auto.h command/backup/pageChecksum.h common/assert.h common/compress/helper.h common/crypto/cipherBlock.h common/crypto/common.h common/crypto/hash.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/filter/sink.h common/io/filter/size.h common/io/io.h common/io/read.h common/io/read.intern.h common/io/write.h common/io/write.intern.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/regExp.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/json.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h protocol/client.h protocol/command.h protocol/helper.h protocol/server.h storage/helper.h storage/info.h storage/read.h storage/read.intern.h storage/remote/protocol.h storage/storage.h storage/storage.intern.h storage/write.h storage/write.intern.h version.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c storage/remote/protocol.c -o storage/remote/protocol.o -storage/remote/read.o: storage/remote/read.c build.auto.h common/assert.h common/compress/gz/compress.h common/compress/gz/decompress.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/read.intern.h common/io/write.h common/io/write.intern.h common/log.h common/logLevel.h common/macro.h common/memContext.h common/object.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h protocol/client.h protocol/command.h protocol/server.h storage/info.h storage/read.h storage/read.intern.h storage/remote/protocol.h storage/remote/read.h storage/remote/storage.h storage/remote/storage.intern.h storage/storage.h storage/storage.intern.h storage/write.h storage/write.intern.h version.h +storage/remote/read.o: storage/remote/read.c build.auto.h common/assert.h common/compress/helper.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/read.intern.h common/io/write.h common/io/write.intern.h common/log.h common/logLevel.h common/macro.h common/memContext.h common/object.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h protocol/client.h protocol/command.h protocol/server.h storage/info.h storage/read.h storage/read.intern.h storage/remote/protocol.h storage/remote/read.h storage/remote/storage.h storage/remote/storage.intern.h storage/storage.h storage/storage.intern.h storage/write.h storage/write.intern.h version.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c storage/remote/read.c -o storage/remote/read.o storage/remote/storage.o: storage/remote/storage.c build.auto.h common/assert.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/read.intern.h common/io/write.h common/io/write.intern.h common/log.h common/logLevel.h common/macro.h common/memContext.h common/object.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/json.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h protocol/client.h protocol/command.h protocol/server.h storage/info.h storage/read.h storage/read.intern.h storage/remote/protocol.h storage/remote/read.h storage/remote/storage.h storage/remote/storage.intern.h storage/remote/write.h storage/storage.h storage/storage.intern.h storage/write.h storage/write.intern.h version.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c storage/remote/storage.c -o storage/remote/storage.o -storage/remote/write.o: storage/remote/write.c build.auto.h common/assert.h common/compress/gz/compress.h common/compress/gz/decompress.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/read.intern.h common/io/write.h common/io/write.intern.h common/log.h common/logLevel.h common/macro.h common/memContext.h common/object.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h protocol/client.h protocol/command.h protocol/server.h storage/info.h storage/read.h storage/read.intern.h storage/remote/protocol.h storage/remote/storage.h storage/remote/storage.intern.h storage/remote/write.h storage/storage.h storage/storage.intern.h storage/write.h storage/write.intern.h version.h +storage/remote/write.o: storage/remote/write.c build.auto.h common/assert.h common/compress/helper.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/read.h common/io/read.intern.h common/io/write.h common/io/write.intern.h common/log.h common/logLevel.h common/macro.h common/memContext.h common/object.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h protocol/client.h protocol/command.h protocol/server.h storage/info.h storage/read.h storage/read.intern.h storage/remote/protocol.h storage/remote/storage.h storage/remote/storage.intern.h storage/remote/write.h storage/storage.h storage/storage.intern.h storage/write.h storage/write.intern.h version.h $(CC) $(CPPFLAGS) $(CFLAGS) $(CMAKE) -c storage/remote/write.c -o storage/remote/write.o storage/s3/read.o: storage/s3/read.c build.auto.h common/assert.h common/debug.h common/error.auto.h common/error.h common/io/filter/filter.h common/io/filter/group.h common/io/http/client.h common/io/http/header.h common/io/http/query.h common/io/read.h common/io/read.intern.h common/io/write.h common/io/write.intern.h common/log.h common/logLevel.h common/macro.h common/memContext.h common/object.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/list.h common/type/param.h common/type/string.h common/type/stringList.h common/type/stringz.h common/type/variant.h common/type/variantList.h storage/info.h storage/read.h storage/read.intern.h storage/s3/read.h storage/s3/storage.h storage/s3/storage.intern.h storage/storage.h storage/storage.intern.h storage/write.h storage/write.intern.h version.h diff --git a/src/command/archive/common.c b/src/command/archive/common.c index afb2451ed..2555100e2 100644 --- a/src/command/archive/common.c +++ b/src/command/archive/common.c @@ -415,7 +415,7 @@ walSegmentFind(const Storage *storage, const String *archiveId, const String *wa // Get a list of all WAL segments that match StringList *list = storageListP( storage, strNewFmt(STORAGE_REPO_ARCHIVE "/%s/%s", strPtr(archiveId), strPtr(strSubN(walSegment, 0, 16))), - .expression = strNewFmt("^%s%s-[0-f]{40}(\\.gz){0,1}$", strPtr(strSubN(walSegment, 0, 24)), + .expression = strNewFmt("^%s%s-[0-f]{40}" COMPRESS_TYPE_REGEXP "{0,1}$", strPtr(strSubN(walSegment, 0, 24)), walIsPartial(walSegment) ? WAL_SEGMENT_PARTIAL_EXT : ""), .nullOnMissing = true); // If there are results diff --git a/src/command/archive/common.h b/src/command/archive/common.h index a1588f6e3..ba8f7a5c7 100644 --- a/src/command/archive/common.h +++ b/src/command/archive/common.h @@ -17,6 +17,7 @@ typedef enum archiveModeGet, } ArchiveMode; +#include "common/compress/helper.h" #include "common/type/stringList.h" #include "storage/storage.h" @@ -52,7 +53,7 @@ WAL segment constants // WAL segment directory/file #define WAL_SEGMENT_DIR_REGEXP "^[0-F]{16}$" STRING_DECLARE(WAL_SEGMENT_DIR_REGEXP_STR); -#define WAL_SEGMENT_FILE_REGEXP "^[0-F]{24}-[0-f]{40}(\\.gz){0,1}$" +#define WAL_SEGMENT_FILE_REGEXP "^[0-F]{24}-[0-f]{40}" COMPRESS_TYPE_REGEXP "{0,1}$" STRING_DECLARE(WAL_SEGMENT_FILE_REGEXP_STR); /*********************************************************************************************************************************** diff --git a/src/command/archive/get/file.c b/src/command/archive/get/file.c index b403c5b94..2b1e71f17 100644 --- a/src/command/archive/get/file.c +++ b/src/command/archive/get/file.c @@ -6,8 +6,7 @@ Archive Get File #include "command/archive/get/file.h" #include "command/archive/common.h" #include "command/control/common.h" -#include "common/compress/gz/common.h" -#include "common/compress/gz/decompress.h" +#include "common/compress/helper.h" #include "common/crypto/cipherBlock.h" #include "common/debug.h" #include "common/io/filter/group.h" @@ -160,9 +159,11 @@ archiveGetFile( } // If file is compressed then add the decompression filter - if (strEndsWithZ(archiveGetCheckResult.archiveFileActual, "." GZ_EXT)) + CompressType compressType = compressTypeFromName(archiveGetCheckResult.archiveFileActual); + + if (compressType != compressTypeNone) { - ioFilterGroupAdd(ioWriteFilterGroup(storageWriteIo(destination)), gzDecompressNew()); + ioFilterGroupAdd(ioWriteFilterGroup(storageWriteIo(destination)), decompressFilter(compressType)); compressible = false; } diff --git a/src/command/archive/push/file.c b/src/command/archive/push/file.c index b12f54e9b..60a73f499 100644 --- a/src/command/archive/push/file.c +++ b/src/command/archive/push/file.c @@ -6,8 +6,6 @@ Archive Push File #include "command/archive/push/file.h" #include "command/archive/common.h" #include "command/control/common.h" -#include "common/compress/gz/common.h" -#include "common/compress/gz/compress.h" #include "common/crypto/cipherBlock.h" #include "common/crypto/hash.h" #include "common/debug.h" @@ -24,7 +22,7 @@ Copy a file from the source to the archive String * archivePushFile( const String *walSource, const String *archiveId, unsigned int pgVersion, uint64_t pgSystemId, const String *archiveFile, - CipherType cipherType, const String *cipherPass, bool compress, int compressLevel) + CipherType cipherType, const String *cipherPass, CompressType compressType, int compressLevel) { FUNCTION_LOG_BEGIN(logLevelDebug); FUNCTION_LOG_PARAM(STRING, walSource); @@ -34,7 +32,7 @@ archivePushFile( FUNCTION_LOG_PARAM(STRING, archiveFile); FUNCTION_LOG_PARAM(ENUM, cipherType); FUNCTION_TEST_PARAM(STRING, cipherPass); - FUNCTION_LOG_PARAM(BOOL, compress); + FUNCTION_LOG_PARAM(ENUM, compressType); FUNCTION_LOG_PARAM(INT, compressLevel); FUNCTION_LOG_END(); @@ -114,10 +112,10 @@ archivePushFile( bool compressible = true; // If the file will be compressed then add compression filter - if (isSegment && compress) + if (isSegment && compressType != compressTypeNone) { - strCat(archiveDestination, "." GZ_EXT); - ioFilterGroupAdd(ioReadFilterGroup(storageReadIo(source)), gzCompressNew(compressLevel)); + compressExtCat(archiveDestination, compressType); + ioFilterGroupAdd(ioReadFilterGroup(storageReadIo(source)), compressFilter(compressType, compressLevel)); compressible = false; } diff --git a/src/command/archive/push/file.h b/src/command/archive/push/file.h index 1d529f539..cba37ac67 100644 --- a/src/command/archive/push/file.h +++ b/src/command/archive/push/file.h @@ -4,6 +4,7 @@ Archive Push File #ifndef COMMAND_ARCHIVE_PUSH_FILE_H #define COMMAND_ARCHIVE_PUSH_FILE_H +#include "common/compress/helper.h" #include "common/crypto/common.h" #include "common/type/string.h" #include "storage/storage.h" @@ -13,6 +14,6 @@ Functions ***********************************************************************************************************************************/ String *archivePushFile( const String *walSource, const String *archiveId, unsigned int pgVersion, uint64_t pgSystemId, const String *archiveFile, - CipherType cipherType, const String *cipherPass, bool compress, int compressLevel); + CipherType cipherType, const String *cipherPass, CompressType compressType, int compressLevel); #endif diff --git a/src/command/archive/push/protocol.c b/src/command/archive/push/protocol.c index 530affbd3..12beb14e0 100644 --- a/src/command/archive/push/protocol.c +++ b/src/command/archive/push/protocol.c @@ -48,7 +48,7 @@ archivePushProtocol(const String *command, const VariantList *paramList, Protoco varStr(varLstGet(paramList, 0)), varStr(varLstGet(paramList, 1)), varUIntForce(varLstGet(paramList, 2)), varUInt64(varLstGet(paramList, 3)), varStr(varLstGet(paramList, 4)), (CipherType)varUIntForce(varLstGet(paramList, 5)), varStr(varLstGet(paramList, 6)), - varBool(varLstGet(paramList, 7)), varIntForce(varLstGet(paramList, 8))))); + (CompressType)varUIntForce(varLstGet(paramList, 7)), varIntForce(varLstGet(paramList, 8))))); } else found = false; diff --git a/src/command/archive/push/push.c b/src/command/archive/push/push.c index 8e36c5b98..0a4541929 100644 --- a/src/command/archive/push/push.c +++ b/src/command/archive/push/push.c @@ -11,6 +11,7 @@ Archive Push Command #include "command/archive/push/protocol.h" #include "command/command.h" #include "command/control/common.h" +#include "common/compress/helper.h" #include "common/debug.h" #include "common/log.h" #include "common/memContext.h" @@ -359,7 +360,7 @@ cmdArchivePush(void) String *warning = archivePushFile( walFile, archiveInfo.archiveId, archiveInfo.pgVersion, archiveInfo.pgSystemId, archiveFile, cipherType(cfgOptionStr(cfgOptRepoCipherType)), archiveInfo.archiveCipherPass, - cfgOptionBool(cfgOptCompress), cfgOptionInt(cfgOptCompressLevel)); + compressTypeEnum(cfgOptionStr(cfgOptCompressType)), cfgOptionInt(cfgOptCompressLevel)); // If a warning was returned then log it if (warning != NULL) @@ -384,7 +385,7 @@ typedef struct ArchivePushAsyncData const StringList *walFileList; // List of wal files to process unsigned int walFileIdx; // Current index in the list to be processed CipherType cipherType; // Cipher type - bool compress; // Compress wal files + CompressType compressType; // Type of compression for WAL segments int compressLevel; // Compression level for wal files ArchivePushCheckResult archiveInfo; // Archive info } ArchivePushAsyncData; @@ -415,7 +416,7 @@ static ProtocolParallelJob *archivePushAsyncCallback(void *data, unsigned int cl protocolCommandParamAdd(command, VARSTR(walFile)); protocolCommandParamAdd(command, VARUINT(jobData->cipherType)); protocolCommandParamAdd(command, VARSTR(jobData->archiveInfo.archiveCipherPass)); - protocolCommandParamAdd(command, VARBOOL(jobData->compress)); + protocolCommandParamAdd(command, VARUINT(jobData->compressType)); protocolCommandParamAdd(command, VARINT(jobData->compressLevel)); FUNCTION_TEST_RETURN(protocolParallelJobNew(VARSTR(walFile), command)); @@ -445,7 +446,7 @@ cmdArchivePushAsync(void) ArchivePushAsyncData jobData = { .walPath = strLstGet(commandParam, 0), - .compress = cfgOptionBool(cfgOptCompress), + .compressType = compressTypeEnum(cfgOptionStr(cfgOptCompressType)), .compressLevel = cfgOptionInt(cfgOptCompressLevel), }; diff --git a/src/command/backup/backup.c b/src/command/backup/backup.c index 1ed138462..8a729d6f7 100644 --- a/src/command/backup/backup.c +++ b/src/command/backup/backup.c @@ -17,9 +17,7 @@ Backup Command #include "command/check/common.h" #include "command/stanza/common.h" #include "common/crypto/cipherBlock.h" -#include "common/compress/gz/common.h" -#include "common/compress/gz/compress.h" -#include "common/compress/gz/decompress.h" +#include "common/compress/helper.h" #include "common/debug.h" #include "common/io/filter/size.h" #include "common/log.h" @@ -124,8 +122,9 @@ backupLabelCreate(BackupType type, const String *backupLabelPrior, time_t timest storageRepo(), strNewFmt(STORAGE_REPO_BACKUP "/" BACKUP_PATH_HISTORY "/%s", strPtr(strLstGet(historyYearList, 0))), .expression = strNewFmt( - "%s\\.manifest\\." GZ_EXT "$", - strPtr(backupRegExpP(.full = true, .differential = true, .incremental = true, .noAnchorEnd = true)))), + "%s\\.manifest\\.%s$", + strPtr(backupRegExpP(.full = true, .differential = true, .incremental = true, .noAnchorEnd = true)), + strPtr(compressTypeStr(compressTypeGz)))), sortOrderDesc); if (strLstSize(historyList) > 0) @@ -397,14 +396,27 @@ backupBuildIncrPrior(const InfoBackup *infoBackup) "last backup label = %s, version = %s", strPtr(manifestData(result)->backupLabel), strPtr(manifestData(result)->backrestVersion)); - // Warn if compress option changed - if (cfgOptionBool(cfgOptCompress) != manifestPriorData->backupOptionCompress) + // Warn if compress-type option changed + if (compressTypeEnum(cfgOptionStr(cfgOptCompressType)) != manifestPriorData->backupOptionCompressType) { LOG_WARN_FMT( - "%s backup cannot alter compress option to '%s', reset to value in %s", - strPtr(cfgOptionStr(cfgOptType)), cvtBoolToConstZ(cfgOptionBool(cfgOptCompress)), - strPtr(backupLabelPrior)); - cfgOptionSet(cfgOptCompress, cfgSourceParam, VARBOOL(manifestPriorData->backupOptionCompress)); + "%s backup cannot alter " CFGOPT_COMPRESS_TYPE " option to '%s', reset to value in %s", + strPtr(cfgOptionStr(cfgOptType)), + strPtr(compressTypeStr(compressTypeEnum(cfgOptionStr(cfgOptCompressType)))), strPtr(backupLabelPrior)); + + // Set the compression type back to whatever was in the prior backup. This is not strictly needed since we + // could store compression type on a per file basis, but it seems simplest and safest for now. + cfgOptionSet( + cfgOptCompressType, cfgSourceParam, VARSTR(compressTypeStr(manifestPriorData->backupOptionCompressType))); + + // There's a small chance that the prior manifest is old enough that backupOptionCompressLevel was not recorded. + // There's an even smaller chance that the user will also alter compression-type in this this scenario right + // after upgrading to a newer version. Because we judge this combination of events to be nearly impossible just + // assert here so no test coverage is needed. + CHECK(manifestPriorData->backupOptionCompressLevel != NULL); + + // Set the compression level back to whatever was in the prior backup + cfgOptionSet(cfgOptCompressLevel, cfgSourceParam, manifestPriorData->backupOptionCompressLevel); } // Warn if hardlink option changed ??? Doesn't seem like this is needed? Hardlinks are always to a directory that @@ -502,7 +514,7 @@ typedef struct BackupResumeData { Manifest *manifest; // New manifest const Manifest *manifestResume; // Resumed manifest - const bool compressed; // Is the backup compressed? + const CompressType compressType; // Backup compression type const bool delta; // Is this a delta backup? const String *backupPath; // Path to the current level of the backup being cleaned const String *manifestParentName; // Parent manifest name used to construct manifest name @@ -573,9 +585,11 @@ void backupResumeCallback(void *data, const StorageInfo *info) // ------------------------------------------------------------------------------------------------------------------------- case storageTypeFile: { - // If the backup is compressed then strip off the extension before doing the lookup - if (resumeData->compressed) - manifestName = strSubN(manifestName, 0, strSize(manifestName) - sizeof(GZ_EXT)); + // If the file is compressed then strip off the extension before doing the lookup + CompressType fileCompressType = compressTypeFromName(manifestName); + + if (fileCompressType != compressTypeNone) + manifestName = compressExtStrip(manifestName, fileCompressType); // Find the file in both manifests const ManifestFile *file = manifestFileFindDefault(resumeData->manifest, manifestName, NULL); @@ -584,7 +598,9 @@ void backupResumeCallback(void *data, const StorageInfo *info) // Check if the file can be resumed or must be removed const char *removeReason = NULL; - if (file == NULL) + if (fileCompressType != resumeData->compressType) + removeReason = "mismatched compression type"; + else if (file == NULL) removeReason = "missing in manifest"; else if (file->reference != NULL) removeReason = "reference in manifest"; @@ -713,12 +729,12 @@ backupResumeFind(const Manifest *manifest, const String *cipherPassBackup) strPtr(manifestData(manifest)->backupLabelPrior) : ""); } // Check compression. Compression can't be changed between backups so resume won't work either. - else if (manifestResumeData->backupOptionCompress != cfgOptionBool(cfgOptCompress)) + else if (manifestResumeData->backupOptionCompressType != compressTypeEnum(cfgOptionStr(cfgOptCompressType))) { reason = strNewFmt( "new compression '%s' does not match resumable compression '%s'", - cvtBoolToConstZ(cfgOptionBool(cfgOptCompress)), - cvtBoolToConstZ(manifestResumeData->backupOptionCompress)); + strPtr(compressTypeStr(compressTypeEnum(cfgOptionStr(cfgOptCompressType)))), + strPtr(compressTypeStr(manifestResumeData->backupOptionCompressType))); } else usable = true; @@ -788,7 +804,7 @@ backupResume(Manifest *manifest, const String *cipherPassBackup) { .manifest = manifest, .manifestResume = manifestResume, - .compressed = cfgOptionBool(cfgOptCompress), + .compressType = compressTypeEnum(cfgOptionStr(cfgOptCompressType)), .delta = cfgOptionBool(cfgOptDelta), .backupPath = strNewFmt(STORAGE_REPO_BACKUP "/%s", strPtr(manifestData(manifest)->backupLabel)), }; @@ -918,13 +934,13 @@ backupFilePut(BackupData *backupData, Manifest *manifest, const String *name, ti { // Create file const String *manifestName = strNewFmt(MANIFEST_TARGET_PGDATA "/%s", strPtr(name)); - bool compress = cfgOptionBool(cfgOptCompress); + CompressType compressType = compressTypeEnum(cfgOptionStr(cfgOptCompressType)); StorageWrite *write = storageNewWriteP( storageRepoWrite(), strNewFmt( STORAGE_REPO_BACKUP "/%s/%s%s", strPtr(manifestData(manifest)->backupLabel), strPtr(manifestName), - compress ? "." GZ_EXT : ""), + strPtr(compressExtStr(compressType))), .compressible = true); IoFilterGroup *filterGroup = ioWriteFilterGroup(storageWriteIo(write)); @@ -933,8 +949,11 @@ backupFilePut(BackupData *backupData, Manifest *manifest, const String *name, ti ioFilterGroupAdd(filterGroup, cryptoHashNew(HASH_TYPE_SHA1_STR)); // Add compression - if (compress) - ioFilterGroupAdd(ioWriteFilterGroup(storageWriteIo(write)), gzCompressNew((int)cfgOptionUInt(cfgOptCompressLevel))); + if (compressType != compressTypeNone) + { + ioFilterGroupAdd( + ioWriteFilterGroup(storageWriteIo(write)), compressFilter(compressType, cfgOptionInt(cfgOptCompressLevel))); + } // Add encryption filter if required cipherBlockFilterGroupAdd( @@ -1418,8 +1437,8 @@ typedef struct BackupJobData const String *const backupLabel; // Backup label (defines the backup path) const bool backupStandby; // Backup from standby const String *const cipherSubPass; // Passphrase used to encrypt files in the backup - const bool compress; // Is the backup compressed? - const unsigned int compressLevel; // Compress level if backup is compressed + const CompressType compressType; // Backup compression type + const int compressLevel; // Compress level if backup is compressed const bool delta; // Is this a checksum delta backup? const uint64_t lsnStart; // Starting lsn for the backup @@ -1469,8 +1488,8 @@ static ProtocolParallelJob *backupJobCallback(void *data, unsigned int clientIdx protocolCommandParamAdd(command, VARUINT64(jobData->lsnStart)); protocolCommandParamAdd(command, VARSTR(file->name)); protocolCommandParamAdd(command, VARBOOL(file->reference != NULL)); - protocolCommandParamAdd(command, VARBOOL(jobData->compress)); - protocolCommandParamAdd(command, VARUINT(jobData->compressLevel)); + protocolCommandParamAdd(command, VARUINT(jobData->compressType)); + protocolCommandParamAdd(command, VARINT(jobData->compressLevel)); protocolCommandParamAdd(command, VARSTR(jobData->backupLabel)); protocolCommandParamAdd(command, VARBOOL(jobData->delta)); protocolCommandParamAdd(command, VARSTR(jobData->cipherSubPass)); @@ -1561,8 +1580,8 @@ backupProcess(BackupData *backupData, Manifest *manifest, const String *lsnStart { .backupLabel = backupLabel, .backupStandby = backupStandby, - .compress = cfgOptionBool(cfgOptCompress), - .compressLevel = cfgOptionUInt(cfgOptCompressLevel), + .compressType = compressTypeEnum(cfgOptionStr(cfgOptCompressType)), + .compressLevel = cfgOptionInt(cfgOptCompressLevel), .cipherSubPass = manifestCipherSubPass(manifest), .delta = cfgOptionBool(cfgOptDelta), .lsnStart = cfgOptionBool(cfgOptOnline) ? pgLsnFromStr(lsnStart) : 0xFFFFFFFFFFFFFFFF, @@ -1646,7 +1665,7 @@ backupProcess(BackupData *backupData, Manifest *manifest, const String *lsnStart manifestFileRemove(manifest, strLstGet(fileRemove, fileRemoveIdx)); // Log references or create hardlinks for all files - const char *const compressExt = jobData.compress ? "." GZ_EXT : ""; + const char *const compressExt = strPtr(compressExtStr(jobData.compressType)); for (unsigned int fileIdx = 0; fileIdx < manifestFileTotal(manifest); fileIdx++) { @@ -1751,8 +1770,9 @@ backupArchiveCheckCopy(Manifest *manifest, unsigned int walSegmentSize, const St if (cfgOptionBool(cfgOptArchiveCopy)) { - // Is the archive file compressed? - bool archiveCompressed = strEndsWithZ(archiveFile, "." GZ_EXT); + // Get compression type of the WAL segment and backup + CompressType archiveCompressType = compressTypeFromName(archiveFile); + CompressType backupCompressType = compressTypeEnum(cfgOptionStr(cfgOptCompressType)); // Open the archive file StorageRead *read = storageNewReadP( @@ -1764,13 +1784,14 @@ backupArchiveCheckCopy(Manifest *manifest, unsigned int walSegmentSize, const St filterGroup, cipherType(cfgOptionStr(cfgOptRepoCipherType)), cipherModeDecrypt, infoArchiveCipherPass(infoArchive)); - // Compress or decompress if archive and backup do not have the same compression settings - if (archiveCompressed != cfgOptionBool(cfgOptCompress)) + // Compress/decompress if archive and backup do not have the same compression settings + if (archiveCompressType != backupCompressType) { - if (archiveCompressed) - ioFilterGroupAdd(ioReadFilterGroup(storageReadIo(read)), gzDecompressNew()); - else - ioFilterGroupAdd(filterGroup, gzCompressNew(cfgOptionInt(cfgOptCompressLevel))); + if (archiveCompressType != compressTypeNone) + ioFilterGroupAdd(filterGroup, decompressFilter(archiveCompressType)); + + if (backupCompressType != compressTypeNone) + ioFilterGroupAdd(filterGroup, compressFilter(backupCompressType, cfgOptionInt(cfgOptCompressLevel))); } // Encrypt with backup key if encrypted @@ -1791,7 +1812,7 @@ backupArchiveCheckCopy(Manifest *manifest, unsigned int walSegmentSize, const St storageRepoWrite(), strNewFmt( STORAGE_REPO_BACKUP "/%s/%s%s", strPtr(manifestData(manifest)->backupLabel), strPtr(manifestName), - cfgOptionBool(cfgOptCompress) ? "." GZ_EXT : ""))); + strPtr(compressExtStr(compressTypeEnum(cfgOptionStr(cfgOptCompressType))))))); // Add to manifest ManifestFile file = @@ -1861,10 +1882,10 @@ backupComplete(InfoBackup *const infoBackup, Manifest *const manifest) StorageWrite *manifestWrite = storageNewWriteP( storageRepoWrite(), strNewFmt( - STORAGE_REPO_BACKUP "/" BACKUP_PATH_HISTORY "/%s/%s.manifest." GZ_EXT, strPtr(strSubN(backupLabel, 0, 4)), - strPtr(backupLabel))); + STORAGE_REPO_BACKUP "/" BACKUP_PATH_HISTORY "/%s/%s.manifest%s", strPtr(strSubN(backupLabel, 0, 4)), + strPtr(backupLabel), strPtr(compressExtStr(compressTypeGz)))); - ioFilterGroupAdd(ioWriteFilterGroup(storageWriteIo(manifestWrite)), gzCompressNew(9)); + ioFilterGroupAdd(ioWriteFilterGroup(storageWriteIo(manifestWrite)), compressFilter(compressTypeGz, 9)); cipherBlockFilterGroupAdd( ioWriteFilterGroup(storageWriteIo(manifestWrite)), cipherType(cfgOptionStr(cfgOptRepoCipherType)), cipherModeEncrypt, @@ -1949,7 +1970,8 @@ cmdBackup(void) strLstNewVarLst(cfgOptionLst(cfgOptExclude)), backupStartResult.tablespaceList); // Validate the manifest using the copy start time - manifestBuildValidate(manifest, cfgOptionBool(cfgOptDelta), backupTime(backupData, true), cfgOptionBool(cfgOptCompress)); + manifestBuildValidate( + manifest, cfgOptionBool(cfgOptDelta), backupTime(backupData, true), compressTypeEnum(cfgOptionStr(cfgOptCompressType))); // Build an incremental backup if type is not full (manifestPrior will be freed in this call) if (!backupBuildIncr(infoBackup, manifest, manifestPrior, backupStartResult.walSegmentName)) diff --git a/src/command/backup/file.c b/src/command/backup/file.c index dab92a4a6..bd07a6a6f 100644 --- a/src/command/backup/file.c +++ b/src/command/backup/file.c @@ -7,9 +7,6 @@ Backup File #include "command/backup/file.h" #include "command/backup/pageChecksum.h" -#include "common/compress/gz/common.h" -#include "common/compress/gz/compress.h" -#include "common/compress/gz/decompress.h" #include "common/crypto/cipherBlock.h" #include "common/crypto/hash.h" #include "common/debug.h" @@ -42,8 +39,8 @@ Copy a file from the PostgreSQL data directory to the repository BackupFileResult backupFile( const String *pgFile, bool pgFileIgnoreMissing, uint64_t pgFileSize, const String *pgFileChecksum, bool pgFileChecksumPage, - uint64_t pgFileChecksumPageLsnLimit, const String *repoFile, bool repoFileHasReference, bool repoFileCompress, - unsigned int repoFileCompressLevel, const String *backupLabel, bool delta, CipherType cipherType, const String *cipherPass) + uint64_t pgFileChecksumPageLsnLimit, const String *repoFile, bool repoFileHasReference, CompressType repoFileCompressType, + int repoFileCompressLevel, const String *backupLabel, bool delta, CipherType cipherType, const String *cipherPass) { FUNCTION_LOG_BEGIN(logLevelDebug); FUNCTION_LOG_PARAM(STRING, pgFile); // Database file to copy to the repo @@ -54,8 +51,8 @@ backupFile( FUNCTION_LOG_PARAM(UINT64, pgFileChecksumPageLsnLimit); // Upper LSN limit to which page checksums must be valid FUNCTION_LOG_PARAM(STRING, repoFile); // Destination in the repo to copy the pg file FUNCTION_LOG_PARAM(BOOL, repoFileHasReference); // Does the repo file exist in a prior backup in the set? - FUNCTION_LOG_PARAM(BOOL, repoFileCompress); // Compress destination file - FUNCTION_LOG_PARAM(UINT, repoFileCompressLevel); // Compression level for destination file + FUNCTION_LOG_PARAM(ENUM, repoFileCompressType); // Compress type for repo file + FUNCTION_LOG_PARAM(INT, repoFileCompressLevel); // Compression level for repo file FUNCTION_LOG_PARAM(STRING, backupLabel); // Label of current backup FUNCTION_LOG_PARAM(BOOL, delta); // Is the delta option on? FUNCTION_LOG_PARAM(ENUM, cipherType); // Encryption type @@ -74,7 +71,7 @@ backupFile( { // Generate complete repo path and add compression extension if needed const String *repoPathFile = strNewFmt( - STORAGE_REPO_BACKUP "/%s/%s%s", strPtr(backupLabel), strPtr(repoFile), repoFileCompress ? "." GZ_EXT : ""); + STORAGE_REPO_BACKUP "/%s/%s%s", strPtr(backupLabel), strPtr(repoFile), strPtr(compressExtStr(repoFileCompressType))); // If checksum is defined then the file needs to be checked. If delta option then check the DB and possibly the repo, else // just check the repo. @@ -148,8 +145,9 @@ backupFile( ioReadFilterGroup(read), cipherBlockNew(cipherModeDecrypt, cipherType, BUFSTR(cipherPass), NULL)); } - if (repoFileCompress) - ioFilterGroupAdd(ioReadFilterGroup(read), gzDecompressNew()); + // Decompress the file if compressed + if (repoFileCompressType != compressTypeNone) + ioFilterGroupAdd(ioReadFilterGroup(read), decompressFilter(repoFileCompressType)); ioFilterGroupAdd(ioReadFilterGroup(read), cryptoHashNew(HASH_TYPE_SHA1_STR)); ioFilterGroupAdd(ioReadFilterGroup(read), ioSizeNew()); @@ -190,7 +188,7 @@ backupFile( if (result.backupCopyResult == backupCopyResultCopy || result.backupCopyResult == backupCopyResultReCopy) { // Is the file compressible during the copy? - bool compressible = !repoFileCompress && cipherType == cipherTypeNone; + bool compressible = repoFileCompressType == compressTypeNone && cipherType == cipherTypeNone; // Setup pg file for read StorageRead *read = storageNewReadP( @@ -207,8 +205,11 @@ backupFile( } // Add compression - if (repoFileCompress) - ioFilterGroupAdd(ioReadFilterGroup(storageReadIo(read)), gzCompressNew((int)repoFileCompressLevel)); + if (repoFileCompressType != compressTypeNone) + { + ioFilterGroupAdd( + ioReadFilterGroup(storageReadIo(read)), compressFilter(repoFileCompressType, repoFileCompressLevel)); + } // If there is a cipher then add the encrypt filter if (cipherType != cipherTypeNone) diff --git a/src/command/backup/file.h b/src/command/backup/file.h index a6e7c9a81..0cdcc0a92 100644 --- a/src/command/backup/file.h +++ b/src/command/backup/file.h @@ -4,6 +4,7 @@ Backup File #ifndef COMMAND_BACKUP_FILE_H #define COMMAND_BACKUP_FILE_H +#include "common/compress/helper.h" #include "common/crypto/common.h" #include "common/type/keyValue.h" @@ -33,8 +34,8 @@ typedef struct BackupFileResult BackupFileResult backupFile( const String *pgFile, bool pgFileIgnoreMissing, uint64_t pgFileSize, const String *pgFileChecksum, bool pgFileChecksumPage, - uint64_t pgFileChecksumPageLsnLimit, const String *repoFile, bool repoFileHasReference, bool repoFileCompress, - unsigned int repoFileCompressLevel, const String *backupLabel, bool delta, CipherType cipherType, const String *cipherPass); + uint64_t pgFileChecksumPageLsnLimit, const String *repoFile, bool repoFileHasReference, CompressType repoFileCompressType, + int repoFileCompressLevel, const String *backupLabel, bool delta, CipherType cipherType, const String *cipherPass); /*********************************************************************************************************************************** Macros for function logging diff --git a/src/command/backup/protocol.c b/src/command/backup/protocol.c index 7631056c5..c8638a466 100644 --- a/src/command/backup/protocol.c +++ b/src/command/backup/protocol.c @@ -43,8 +43,8 @@ backupProtocol(const String *command, const VariantList *paramList, ProtocolServ varStr(varLstGet(paramList, 0)), varBool(varLstGet(paramList, 1)), varUInt64(varLstGet(paramList, 2)), varStr(varLstGet(paramList, 3)), varBool(varLstGet(paramList, 4)), varUInt64(varLstGet(paramList, 5)), varStr(varLstGet(paramList, 6)), - varBool(varLstGet(paramList, 7)), varBool(varLstGet(paramList, 8)), varUIntForce(varLstGet(paramList, 9)), - varStr(varLstGet(paramList, 10)), varBool(varLstGet(paramList, 11)), + varBool(varLstGet(paramList, 7)), (CompressType)varUIntForce(varLstGet(paramList, 8)), + varIntForce(varLstGet(paramList, 9)), varStr(varLstGet(paramList, 10)), varBool(varLstGet(paramList, 11)), varStr(varLstGet(paramList, 12)) == NULL ? cipherTypeNone : cipherTypeAes256Cbc, varStr(varLstGet(paramList, 12))); // Return backup result diff --git a/src/command/restore/file.c b/src/command/restore/file.c index b7df1ebd8..c5f882d41 100644 --- a/src/command/restore/file.c +++ b/src/command/restore/file.c @@ -8,8 +8,6 @@ Restore File #include #include "command/restore/file.h" -#include "common/compress/gz/common.h" -#include "common/compress/gz/decompress.h" #include "common/crypto/cipherBlock.h" #include "common/crypto/hash.h" #include "common/debug.h" @@ -25,7 +23,7 @@ Copy a file from the backup to the specified destination ***********************************************************************************************************************************/ bool restoreFile( - const String *repoFile, const String *repoFileReference, bool repoFileCompressed, const String *pgFile, + const String *repoFile, const String *repoFileReference, CompressType repoFileCompressType, const String *pgFile, const String *pgFileChecksum, bool pgFileZero, uint64_t pgFileSize, time_t pgFileModified, mode_t pgFileMode, const String *pgFileUser, const String *pgFileGroup, time_t copyTimeBegin, bool delta, bool deltaForce, const String *cipherPass) @@ -33,7 +31,7 @@ restoreFile( FUNCTION_LOG_BEGIN(logLevelDebug); FUNCTION_LOG_PARAM(STRING, repoFile); FUNCTION_LOG_PARAM(STRING, repoFileReference); - FUNCTION_LOG_PARAM(BOOL, repoFileCompressed); + FUNCTION_LOG_PARAM(ENUM, repoFileCompressType); FUNCTION_LOG_PARAM(STRING, pgFile); FUNCTION_LOG_PARAM(STRING, pgFileChecksum); FUNCTION_LOG_PARAM(BOOL, pgFileZero); @@ -153,9 +151,9 @@ restoreFile( } // Add decompression filter - if (repoFileCompressed) + if (repoFileCompressType != compressTypeNone) { - ioFilterGroupAdd(filterGroup, gzDecompressNew()); + ioFilterGroupAdd(filterGroup, decompressFilter(repoFileCompressType)); compressible = false; } @@ -171,7 +169,7 @@ restoreFile( storageRepo(), strNewFmt( STORAGE_REPO_BACKUP "/%s/%s%s", strPtr(repoFileReference), strPtr(repoFile), - repoFileCompressed ? "." GZ_EXT : ""), + strPtr(compressExtStr(repoFileCompressType))), .compressible = compressible), pgFileWrite); diff --git a/src/command/restore/file.h b/src/command/restore/file.h index fa532c0a2..ff90ff7ea 100644 --- a/src/command/restore/file.h +++ b/src/command/restore/file.h @@ -4,6 +4,7 @@ Restore File #ifndef COMMAND_RESTORE_FILE_H #define COMMAND_RESTORE_FILE_H +#include "common/compress/helper.h" #include "common/crypto/common.h" #include "common/type/string.h" #include "storage/storage.h" @@ -12,7 +13,7 @@ Restore File Functions ***********************************************************************************************************************************/ bool restoreFile( - const String *repoFile, const String *repoFileReference, bool repoFileCompressed, const String *pgFile, + const String *repoFile, const String *repoFileReference, CompressType repoFileCompressType, const String *pgFile, const String *pgFileChecksum, bool pgFileZero, uint64_t pgFileSize, time_t pgFileModified, mode_t pgFileMode, const String *pgFileUser, const String *pgFileGroup, time_t copyTimeBegin, bool delta, bool deltaForce, const String *cipherPass); diff --git a/src/command/restore/protocol.c b/src/command/restore/protocol.c index 4d716d98c..ee0246829 100644 --- a/src/command/restore/protocol.c +++ b/src/command/restore/protocol.c @@ -45,13 +45,13 @@ restoreProtocol(const String *command, const VariantList *paramList, ProtocolSer server, VARBOOL( restoreFile( - varStr(varLstGet(paramList, 0)), varStr(varLstGet(paramList, 1)), varBoolForce(varLstGet(paramList, 2)), - varStr(varLstGet(paramList, 3)), varStr(varLstGet(paramList, 4)), varBoolForce(varLstGet(paramList, 5)), - varUInt64(varLstGet(paramList, 6)), (time_t)varInt64Force(varLstGet(paramList, 7)), - cvtZToUIntBase(strPtr(varStr(varLstGet(paramList, 8))), 8), varStr(varLstGet(paramList, 9)), - varStr(varLstGet(paramList, 10)), (time_t)varInt64Force(varLstGet(paramList, 11)), - varBoolForce(varLstGet(paramList, 12)), varBoolForce(varLstGet(paramList, 13)), - varStr(varLstGet(paramList, 14))))); + varStr(varLstGet(paramList, 0)), varStr(varLstGet(paramList, 1)), + (CompressType)varUIntForce(varLstGet(paramList, 2)), varStr(varLstGet(paramList, 3)), + varStr(varLstGet(paramList, 4)), varBoolForce(varLstGet(paramList, 5)), varUInt64(varLstGet(paramList, 6)), + (time_t)varInt64Force(varLstGet(paramList, 7)), cvtZToUIntBase(strPtr(varStr(varLstGet(paramList, 8))), 8), + varStr(varLstGet(paramList, 9)), varStr(varLstGet(paramList, 10)), + (time_t)varInt64Force(varLstGet(paramList, 11)), varBoolForce(varLstGet(paramList, 12)), + varBoolForce(varLstGet(paramList, 13)), varStr(varLstGet(paramList, 14))))); } else found = false; diff --git a/src/command/restore/restore.c b/src/command/restore/restore.c index 87b5a1cd5..51d656776 100644 --- a/src/command/restore/restore.c +++ b/src/command/restore/restore.c @@ -1962,7 +1962,7 @@ static ProtocolParallelJob *restoreJobCallback(void *data, unsigned int clientId protocolCommandParamAdd( command, file->reference != NULL ? VARSTR(file->reference) : VARSTR(manifestData(jobData->manifest)->backupLabel)); - protocolCommandParamAdd(command, VARBOOL(manifestData(jobData->manifest)->backupOptionCompress)); + protocolCommandParamAdd(command, VARUINT(manifestData(jobData->manifest)->backupOptionCompressType)); protocolCommandParamAdd(command, VARSTR(restoreFilePgPath(jobData->manifest, file->name))); protocolCommandParamAdd(command, VARSTRZ(file->checksumSha1)); protocolCommandParamAdd(command, VARBOOL(restoreFileZeroed(file->name, jobData->zeroExp))); diff --git a/src/common/compress/gz/compress.c b/src/common/compress/gz/compress.c index 942e487a3..4f124bcf2 100644 --- a/src/common/compress/gz/compress.c +++ b/src/common/compress/gz/compress.c @@ -199,9 +199,3 @@ gzCompressNew(int level) FUNCTION_LOG_RETURN(IO_FILTER, this); } - -IoFilter * -gzCompressNewVar(const VariantList *paramList) -{ - return gzCompressNew(varIntForce(varLstGet(paramList, 0))); -} diff --git a/src/common/compress/gz/compress.h b/src/common/compress/gz/compress.h index 963e0e151..163ed47ed 100644 --- a/src/common/compress/gz/compress.h +++ b/src/common/compress/gz/compress.h @@ -18,6 +18,5 @@ Filter type constant Constructor ***********************************************************************************************************************************/ IoFilter *gzCompressNew(int level); -IoFilter *gzCompressNewVar(const VariantList *paramList); #endif diff --git a/src/common/compress/helper.c b/src/common/compress/helper.c new file mode 100644 index 000000000..dfcc3087d --- /dev/null +++ b/src/common/compress/helper.c @@ -0,0 +1,275 @@ +/*********************************************************************************************************************************** +Compression Helper +***********************************************************************************************************************************/ +#include "build.auto.h" + +#include + +#include "common/compress/helper.h" +#include "common/compress/gz/common.h" +#include "common/compress/gz/compress.h" +#include "common/compress/gz/decompress.h" +#include "common/debug.h" +#include "common/log.h" +#include "version.h" + +/*********************************************************************************************************************************** +Compression type constants +***********************************************************************************************************************************/ +#define COMPRESS_TYPE_NONE "none" + +// Constants for currently unsupported compression types +#define LZ4_EXT "lz4" +#define ZST_EXT "zst" +#define BZ2_EXT "bz2" +#define XZ_EXT "xz" + +/*********************************************************************************************************************************** +Configuration for supported and future compression types +***********************************************************************************************************************************/ +static const struct CompressHelperLocal +{ + const String *const type; // Compress type -- must be extension without period prefixed + const String *const ext; // File extension with period prefixed + const char *compressType; // Type of the compression filter + IoFilter *(*compressNew)(int); // Function to create new compression filter + const char *decompressType; // Type of the decompression filter + IoFilter *(*decompressNew)(void); // Function to create new decompression filter + int levelDefault; // Default compression level +} compressHelperLocal[] = +{ + { + .type = STRDEF(COMPRESS_TYPE_NONE), + .ext = STRDEF(""), + }, + { + .type = STRDEF(GZ_EXT), + .ext = STRDEF("." GZ_EXT), + .compressType = GZ_COMPRESS_FILTER_TYPE, + .compressNew = gzCompressNew, + .decompressType = GZ_DECOMPRESS_FILTER_TYPE, + .decompressNew = gzDecompressNew, + .levelDefault = 6, + }, + { + .type = STRDEF(LZ4_EXT), + .ext = STRDEF("." LZ4_EXT), + }, + { + .type = STRDEF(ZST_EXT), + .ext = STRDEF("." ZST_EXT), + }, + { + .type = STRDEF(XZ_EXT), + .ext = STRDEF("." XZ_EXT), + }, + { + .type = STRDEF(BZ2_EXT), + .ext = STRDEF("." BZ2_EXT), + }, +}; + +#define COMPRESS_LIST_SIZE \ + (sizeof(compressHelperLocal) / sizeof(struct CompressHelperLocal)) + +/**********************************************************************************************************************************/ +CompressType +compressTypeEnum(const String *type) +{ + FUNCTION_TEST_BEGIN(); + FUNCTION_TEST_PARAM(STRING, type); + FUNCTION_TEST_END(); + + ASSERT(type != NULL); + + CompressType result = compressTypeNone; + + for (; result < COMPRESS_LIST_SIZE; result++) + { + if (strEq(type, compressHelperLocal[result].type)) + break; + } + + if (result == COMPRESS_LIST_SIZE) + THROW_FMT(AssertError, "invalid compression type '%s'", strPtr(type)); + + FUNCTION_TEST_RETURN(result); +} + +/**********************************************************************************************************************************/ +void +compressTypePresent(CompressType type) +{ + FUNCTION_TEST_BEGIN(); + FUNCTION_TEST_PARAM(ENUM, type); + FUNCTION_TEST_END(); + + ASSERT(type < COMPRESS_LIST_SIZE); + + if (type != compressTypeNone && compressHelperLocal[type].compressNew == NULL) + { + THROW_FMT( + OptionInvalidValueError, PROJECT_NAME " not compiled with %s support", + strPtr(compressHelperLocal[type].type)); + } + + FUNCTION_TEST_RETURN_VOID(); +} + +/**********************************************************************************************************************************/ +const String * +compressTypeStr(CompressType type) +{ + FUNCTION_TEST_BEGIN(); + FUNCTION_TEST_PARAM(ENUM, type); + FUNCTION_TEST_END(); + + ASSERT(type < COMPRESS_LIST_SIZE); + + FUNCTION_TEST_RETURN(compressHelperLocal[type].type); +} + +/**********************************************************************************************************************************/ +CompressType +compressTypeFromName(const String *name) +{ + FUNCTION_TEST_BEGIN(); + FUNCTION_TEST_PARAM(STRING, name); + FUNCTION_TEST_END(); + + CompressType result = compressTypeNone + 1; + + for (; result < COMPRESS_LIST_SIZE; result++) + { + if (strEndsWith(name, compressHelperLocal[result].ext)) + break; + } + + if (result == COMPRESS_LIST_SIZE) + result = compressTypeNone; + + FUNCTION_TEST_RETURN(result); +} + +/**********************************************************************************************************************************/ +int +compressLevelDefault(CompressType type) +{ + FUNCTION_TEST_BEGIN(); + FUNCTION_TEST_PARAM(ENUM, type); + FUNCTION_TEST_END(); + + ASSERT(type < COMPRESS_LIST_SIZE); + compressTypePresent(type); + + FUNCTION_TEST_RETURN(compressHelperLocal[type].levelDefault); +} + +/**********************************************************************************************************************************/ +IoFilter * +compressFilter(CompressType type, int level) +{ + FUNCTION_TEST_BEGIN(); + FUNCTION_TEST_PARAM(ENUM, type); + FUNCTION_TEST_PARAM(INT, level); + FUNCTION_TEST_END(); + + ASSERT(type < COMPRESS_LIST_SIZE); + ASSERT(type != compressTypeNone); + compressTypePresent(type); + + FUNCTION_TEST_RETURN(compressHelperLocal[type].compressNew(level)); +} + +/**********************************************************************************************************************************/ +IoFilter * +compressFilterVar(const String *filterType, const VariantList *filterParamList) +{ + FUNCTION_LOG_BEGIN(logLevelTrace); + FUNCTION_LOG_PARAM(STRING, filterType); + FUNCTION_LOG_PARAM(VARIANT_LIST, filterParamList); + FUNCTION_LOG_END(); + + ASSERT(filterType != NULL); + + IoFilter *result = NULL; + + for (CompressType compressIdx = compressTypeNone + 1; compressIdx < COMPRESS_LIST_SIZE; compressIdx++) + { + const struct CompressHelperLocal *compress = &compressHelperLocal[compressIdx]; + + if (compress->compressType != NULL && strEqZ(filterType, compress->compressType)) + { + result = compress->compressNew(varIntForce(varLstGet(filterParamList, 0))); + break; + } + else if (compress->decompressType != NULL && strEqZ(filterType, compress->decompressType)) + { + result = compress->decompressNew(); + break; + } + } + + FUNCTION_LOG_RETURN(IO_FILTER, result); +} + +/**********************************************************************************************************************************/ +IoFilter * +decompressFilter(CompressType type) +{ + FUNCTION_TEST_BEGIN(); + FUNCTION_TEST_PARAM(ENUM, type); + FUNCTION_TEST_END(); + + ASSERT(type < COMPRESS_LIST_SIZE); + ASSERT(type != compressTypeNone); + compressTypePresent(type); + + FUNCTION_TEST_RETURN(compressHelperLocal[type].decompressNew()); +} + +/**********************************************************************************************************************************/ +const String * +compressExtStr(CompressType type) +{ + FUNCTION_TEST_BEGIN(); + FUNCTION_TEST_PARAM(ENUM, type); + FUNCTION_TEST_END(); + + ASSERT(type < COMPRESS_LIST_SIZE); + + FUNCTION_TEST_RETURN(compressHelperLocal[type].ext); +} + +/**********************************************************************************************************************************/ +void +compressExtCat(String *file, CompressType type) +{ + FUNCTION_TEST_BEGIN(); + FUNCTION_TEST_PARAM(STRING, file); + FUNCTION_TEST_PARAM(ENUM, type); + FUNCTION_TEST_END(); + + ASSERT(file != NULL); + + strCat(file, strPtr(compressExtStr(type))); + + FUNCTION_TEST_RETURN_VOID(); +} + +/**********************************************************************************************************************************/ +String * +compressExtStrip(const String *file, CompressType type) +{ + FUNCTION_TEST_BEGIN(); + FUNCTION_TEST_PARAM(STRING, file); + FUNCTION_TEST_PARAM(ENUM, type); + FUNCTION_TEST_END(); + + ASSERT(file != NULL); + + if (!strEndsWith(file, compressExtStr(type))) + THROW_FMT(FormatError, "'%s' must have '%s' extension", strPtr(file), strPtr(compressExtStr(type))); + + FUNCTION_TEST_RETURN(strSubN(file, 0, strSize(file) - strSize(compressExtStr(type)))); +} diff --git a/src/common/compress/helper.h b/src/common/compress/helper.h new file mode 100644 index 000000000..ee8e66dea --- /dev/null +++ b/src/common/compress/helper.h @@ -0,0 +1,74 @@ +/*********************************************************************************************************************************** +Compression Helper + +Abstract compression types so that the calling code does not need to worry about the individual characteristics of the compression +type. All compress calls should use this module rather than the individual filters, even if a specific compression type is required. +***********************************************************************************************************************************/ +#ifndef COMMON_COMPRESS_HELPER_H +#define COMMON_COMPRESS_HELPER_H + +#include + +/*********************************************************************************************************************************** +Available compression types +***********************************************************************************************************************************/ +typedef enum +{ + compressTypeNone, // No compression + compressTypeGz, // gzip + compressTypeLz4, // lz4 + + // These types have not been implemented but are included here so older versions can identify compression types added by future + // versions. In that sense this list is speculative, but these seem to be all the types that are likely to be added in the + // foreseeable future. + compressTypeZst, // zstandard + compressTypeXz, // xz/lzma + compressTypeBz2, // bzip2 +} CompressType; + +#include +#include + +/*********************************************************************************************************************************** +Compression types as a regexp. In the future this regexp will be generated automatically at build time but we want to wait until the +build code is migrated to C to do that. For now just define it statically since we don't expect it to change very often. If a +supported type is not in this list then it should cause an integration test to fail. +***********************************************************************************************************************************/ +#define COMPRESS_TYPE_REGEXP "(\\.gz|\\.lz4|\\.zst|\\.xz|\\.bz2)" + +/*********************************************************************************************************************************** +Functions +***********************************************************************************************************************************/ +// Get enum from a compression type string +CompressType compressTypeEnum(const String *type); + +// Check that a valid compress type is compiled into this binary. Errors when the compress type is not present. +void compressTypePresent(CompressType type); + +// Get string representation of a compression type. This is the the extension without the period. +const String *compressTypeStr(CompressType type); + +// Get compression type from a (file) name by checking the extension. If the extension is not a supported compression type then +// compressType none is returned, even if the file is compressed with some unknown type. +CompressType compressTypeFromName(const String *name); + +// Compression filter for the specified type. Error when compress type is none or invalid. +IoFilter *compressFilter(CompressType type, int level); + +// Compression/decompression filter based on string type and a parameter list. This is useful when a filter must be created on a +// remote system since the filter type and parameters can be passed through a protocol. +IoFilter *compressFilterVar(const String *filterType, const VariantList *filterParamList); + +// Decompression filter for the specified type. Error when compress type is none or invalid. +IoFilter *decompressFilter(CompressType type); + +// Get extension for the current compression type +const String *compressExtStr(CompressType type); + +// Add extension for current compression type to the file +void compressExtCat(String *file, CompressType type); + +// Remove the specified compression extension. Error when the extension is not correct. +String *compressExtStrip(const String *file, CompressType type); + +#endif diff --git a/src/common/compress/helper.intern.h b/src/common/compress/helper.intern.h new file mode 100644 index 000000000..900644f8b --- /dev/null +++ b/src/common/compress/helper.intern.h @@ -0,0 +1,15 @@ +/*********************************************************************************************************************************** +Compression Helper Internal +***********************************************************************************************************************************/ +#ifndef COMMON_COMPRESS_HELPER_INTERN_H +#define COMMON_COMPRESS_HELPER_INTERN_H + +#include "common/compress/helper.h" + +/*********************************************************************************************************************************** +Functions +***********************************************************************************************************************************/ +// Default compression level for a compression type, used while loading the configuration +int compressLevelDefault(CompressType type); + +#endif diff --git a/src/config/config.auto.c b/src/config/config.auto.c index 003454564..7face3b38 100644 --- a/src/config/config.auto.c +++ b/src/config/config.auto.c @@ -240,6 +240,7 @@ STRING_EXTERN(CFGOPT_CMD_SSH_STR, CFGOPT_CMD_S STRING_EXTERN(CFGOPT_COMPRESS_STR, CFGOPT_COMPRESS); STRING_EXTERN(CFGOPT_COMPRESS_LEVEL_STR, CFGOPT_COMPRESS_LEVEL); STRING_EXTERN(CFGOPT_COMPRESS_LEVEL_NETWORK_STR, CFGOPT_COMPRESS_LEVEL_NETWORK); +STRING_EXTERN(CFGOPT_COMPRESS_TYPE_STR, CFGOPT_COMPRESS_TYPE); STRING_EXTERN(CFGOPT_CONFIG_STR, CFGOPT_CONFIG); STRING_EXTERN(CFGOPT_CONFIG_INCLUDE_PATH_STR, CFGOPT_CONFIG_INCLUDE_PATH); STRING_EXTERN(CFGOPT_CONFIG_PATH_STR, CFGOPT_CONFIG_PATH); @@ -509,6 +510,14 @@ static ConfigOptionData configOptionData[CFG_OPTION_TOTAL] = CONFIG_OPTION_LIST CONFIG_OPTION_DEFINE_ID(cfgDefOptCompressLevelNetwork) ) + //------------------------------------------------------------------------------------------------------------------------------ + CONFIG_OPTION + ( + CONFIG_OPTION_NAME(CFGOPT_COMPRESS_TYPE) + CONFIG_OPTION_INDEX(0) + CONFIG_OPTION_DEFINE_ID(cfgDefOptCompressType) + ) + //------------------------------------------------------------------------------------------------------------------------------ CONFIG_OPTION ( diff --git a/src/config/config.auto.h b/src/config/config.auto.h index 0f5554bdf..201cd6147 100644 --- a/src/config/config.auto.h +++ b/src/config/config.auto.h @@ -71,6 +71,8 @@ Option constants STRING_DECLARE(CFGOPT_COMPRESS_LEVEL_STR); #define CFGOPT_COMPRESS_LEVEL_NETWORK "compress-level-network" STRING_DECLARE(CFGOPT_COMPRESS_LEVEL_NETWORK_STR); +#define CFGOPT_COMPRESS_TYPE "compress-type" + STRING_DECLARE(CFGOPT_COMPRESS_TYPE_STR); #define CFGOPT_CONFIG "config" STRING_DECLARE(CFGOPT_CONFIG_STR); #define CFGOPT_CONFIG_INCLUDE_PATH "config-include-path" @@ -390,7 +392,7 @@ Option constants #define CFGOPT_TYPE "type" STRING_DECLARE(CFGOPT_TYPE_STR); -#define CFG_OPTION_TOTAL 172 +#define CFG_OPTION_TOTAL 173 /*********************************************************************************************************************************** Command enum @@ -433,6 +435,7 @@ typedef enum cfgOptCompress, cfgOptCompressLevel, cfgOptCompressLevelNetwork, + cfgOptCompressType, cfgOptConfig, cfgOptConfigIncludePath, cfgOptConfigPath, diff --git a/src/config/define.auto.c b/src/config/define.auto.c index 662967712..e0285e55b 100644 --- a/src/config/define.auto.c +++ b/src/config/define.auto.c @@ -640,10 +640,12 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_SECURE(false) CFGDEFDATA_OPTION_HELP_SECTION("general") - CFGDEFDATA_OPTION_HELP_SUMMARY("Use gzip file compression.") + CFGDEFDATA_OPTION_HELP_SUMMARY("Use file compression.") CFGDEFDATA_OPTION_HELP_DESCRIPTION ( - "Backup files are compatible with command-line gzip tools." + "Backup files are compatible with command-line compression tools.\n" + "\n" + "This option is now deprecated. The compress-type option should be used instead." ) CFGDEFDATA_OPTION_COMMAND_LIST @@ -662,7 +664,7 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION ( CFGDEFDATA_OPTION_NAME("compress-level") - CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_REQUIRED(false) CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeInteger) CFGDEFDATA_OPTION_INTERNAL(false) @@ -671,10 +673,10 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_SECURE(false) CFGDEFDATA_OPTION_HELP_SECTION("general") - CFGDEFDATA_OPTION_HELP_SUMMARY("Compression level for stored files.") + CFGDEFDATA_OPTION_HELP_SUMMARY("File compression level.") CFGDEFDATA_OPTION_HELP_DESCRIPTION ( - "Sets the zlib level to be used for file compression when compress=y." + "Sets the level to be used for file compression when compress-type does not equal none or compress=y (deprecated)." ) CFGDEFDATA_OPTION_COMMAND_LIST @@ -686,7 +688,6 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_OPTIONAL_LIST ( CFGDEFDATA_OPTION_OPTIONAL_ALLOW_RANGE(0, 9) - CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("6") ) ) @@ -703,13 +704,13 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST CFGDEFDATA_OPTION_SECURE(false) CFGDEFDATA_OPTION_HELP_SECTION("general") - CFGDEFDATA_OPTION_HELP_SUMMARY("Compression level for network transfer when compress=n.") + CFGDEFDATA_OPTION_HELP_SUMMARY("Network compression level.") CFGDEFDATA_OPTION_HELP_DESCRIPTION ( - "Sets the zlib level to be used for protocol compression when compress=n and the database cluster is not on the same " - "host as the repository. Protocol compression is used to reduce network traffic but can be disabled by setting " - "compress-level-network=0. When compress=y the compress-level-network setting is ignored and compress-level is " - "used instead so that the file is only compressed once. SSH compression is always disabled." + "Sets the network compression level when compress-type=none and the command is not run on the same host as the " + "repository. Compression is used to reduce network traffic but can be disabled by setting " + "compress-level-network=0. When compress-type does not equal none the compress-level-network setting is ignored " + "and compress-level is used instead so that the file is only compressed once. SSH compression is always disabled." ) CFGDEFDATA_OPTION_COMMAND_LIST @@ -733,6 +734,45 @@ static ConfigDefineOptionData configDefineOptionData[] = CFGDEFDATA_OPTION_LIST ) ) + // ----------------------------------------------------------------------------------------------------------------------------- + CFGDEFDATA_OPTION + ( + CFGDEFDATA_OPTION_NAME("compress-type") + CFGDEFDATA_OPTION_REQUIRED(true) + CFGDEFDATA_OPTION_SECTION(cfgDefSectionGlobal) + CFGDEFDATA_OPTION_TYPE(cfgDefOptTypeString) + CFGDEFDATA_OPTION_INTERNAL(false) + + CFGDEFDATA_OPTION_INDEX_TOTAL(1) + CFGDEFDATA_OPTION_SECURE(false) + + CFGDEFDATA_OPTION_HELP_SECTION("general") + CFGDEFDATA_OPTION_HELP_SUMMARY("File compression type.") + CFGDEFDATA_OPTION_HELP_DESCRIPTION + ( + "The following compression types are supported:\n" + "\n" + "* gz - gzip compression format" + ) + + CFGDEFDATA_OPTION_COMMAND_LIST + ( + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdArchivePush) + CFGDEFDATA_OPTION_COMMAND(cfgDefCmdBackup) + ) + + CFGDEFDATA_OPTION_OPTIONAL_LIST + ( + CFGDEFDATA_OPTION_OPTIONAL_ALLOW_LIST + ( + "none", + "gz" + ) + + CFGDEFDATA_OPTION_OPTIONAL_DEFAULT("gz") + ) + ) + // ----------------------------------------------------------------------------------------------------------------------------- CFGDEFDATA_OPTION ( diff --git a/src/config/define.auto.h b/src/config/define.auto.h index 20fcc0fe8..bdea46c46 100644 --- a/src/config/define.auto.h +++ b/src/config/define.auto.h @@ -61,6 +61,7 @@ typedef enum cfgDefOptCompress, cfgDefOptCompressLevel, cfgDefOptCompressLevelNetwork, + cfgDefOptCompressType, cfgDefOptConfig, cfgDefOptConfigIncludePath, cfgDefOptConfigPath, diff --git a/src/config/load.c b/src/config/load.c index 6d6e00bfc..d43397b8b 100644 --- a/src/config/load.c +++ b/src/config/load.c @@ -7,6 +7,7 @@ Configuration Load #include #include "command/command.h" +#include "common/compress/helper.intern.h" #include "common/memContext.h" #include "common/debug.h" #include "common/io/io.h" @@ -228,6 +229,41 @@ cfgLoadUpdateOption(void) strPtr(cfgOptionStr(cfgOptRepoS3Bucket))); } + // Check/update compress-type if compress is valid. There should be no references to the compress option outside this block. + if (cfgOptionValid(cfgOptCompress)) + { + if (cfgOptionSource(cfgOptCompress) != cfgSourceDefault) + { + if (cfgOptionSource(cfgOptCompressType) != cfgSourceDefault) + { + LOG_WARN( + "'" CFGOPT_COMPRESS "' and '" CFGOPT_COMPRESS_TYPE "' options should not both be set\n" + "HINT: '" CFGOPT_COMPRESS_TYPE "' is preferred and '" CFGOPT_COMPRESS "' is deprecated."); + } + + // Set compress-type to none. Eventually the compress option will be deprecated and removed so this reduces code churn + // when that happens. + if (!cfgOptionBool(cfgOptCompress) && cfgOptionSource(cfgOptCompressType) == cfgSourceDefault) + cfgOptionSet(cfgOptCompressType, cfgSourceParam, VARSTR(compressTypeStr(compressTypeNone))); + } + + // Now invalidate compress so it can't be used and won't be passed to child processes + cfgOptionValidSet(cfgOptCompress, false); + cfgOptionSet(cfgOptCompress, cfgSourceDefault, NULL); + } + + // Check that selected compress type has been compiled into this binary + if (cfgOptionValid(cfgOptCompressType)) + compressTypePresent(compressTypeEnum(cfgOptionStr(cfgOptCompressType))); + + // Update compress-level default based on the compression type + if (cfgOptionValid(cfgOptCompressLevel) && cfgOptionSource(cfgOptCompressLevel) == cfgSourceDefault) + { + cfgOptionSet( + cfgOptCompressLevel, cfgSourceDefault, + VARINT(compressLevelDefault(compressTypeEnum(cfgOptionStr(cfgOptCompressType))))); + } + FUNCTION_LOG_RETURN_VOID(); } diff --git a/src/config/parse.auto.c b/src/config/parse.auto.c index 59b70d122..82b554a18 100644 --- a/src/config/parse.auto.c +++ b/src/config/parse.auto.c @@ -192,6 +192,18 @@ static const struct option optionList[] = .val = PARSE_OPTION_FLAG | PARSE_RESET_FLAG | cfgOptCompressLevelNetwork, }, + // compress-type option + // ----------------------------------------------------------------------------------------------------------------------------- + { + .name = CFGOPT_COMPRESS_TYPE, + .has_arg = required_argument, + .val = PARSE_OPTION_FLAG | cfgOptCompressType, + }, + { + .name = "reset-" CFGOPT_COMPRESS_TYPE, + .val = PARSE_OPTION_FLAG | PARSE_RESET_FLAG | cfgOptCompressType, + }, + // config option // ----------------------------------------------------------------------------------------------------------------------------- { @@ -2338,6 +2350,7 @@ static const ConfigOption optionResolveOrder[] = cfgOptCompress, cfgOptCompressLevel, cfgOptCompressLevelNetwork, + cfgOptCompressType, cfgOptConfig, cfgOptConfigIncludePath, cfgOptConfigPath, diff --git a/src/info/infoBackup.c b/src/info/infoBackup.c index 5b268cd38..d129c6653 100644 --- a/src/info/infoBackup.c +++ b/src/info/infoBackup.c @@ -422,7 +422,7 @@ infoBackupDataAdd(const InfoBackup *this, const Manifest *manifest) .optionBackupStandby = manData->backupOptionStandby != NULL ? varBool(manData->backupOptionStandby) : false, .optionChecksumPage = manData->backupOptionChecksumPage != NULL ? varBool(manData->backupOptionChecksumPage) : false, - .optionCompress = manData->backupOptionCompress, + .optionCompress = manData->backupOptionCompressType != compressTypeNone, .optionHardlink = manData->backupOptionHardLink, .optionOnline = manData->backupOptionOnline, }; diff --git a/src/info/manifest.c b/src/info/manifest.c index 37d8a7ca6..e95735772 100644 --- a/src/info/manifest.c +++ b/src/info/manifest.c @@ -129,6 +129,8 @@ STRING_STATIC(MANIFEST_SECTION_TARGET_PATH_DEFAULT_STR, "target:path STRING_STATIC(MANIFEST_KEY_OPTION_CHECKSUM_PAGE_STR, MANIFEST_KEY_OPTION_CHECKSUM_PAGE); #define MANIFEST_KEY_OPTION_COMPRESS "option-compress" STRING_STATIC(MANIFEST_KEY_OPTION_COMPRESS_STR, MANIFEST_KEY_OPTION_COMPRESS); +#define MANIFEST_KEY_OPTION_COMPRESS_TYPE "option-compress-type" + STRING_STATIC(MANIFEST_KEY_OPTION_COMPRESS_TYPE_STR, MANIFEST_KEY_OPTION_COMPRESS_TYPE); #define MANIFEST_KEY_OPTION_COMPRESS_LEVEL "option-compress-level" STRING_STATIC(MANIFEST_KEY_OPTION_COMPRESS_LEVEL_STR, MANIFEST_KEY_OPTION_COMPRESS_LEVEL); #define MANIFEST_KEY_OPTION_COMPRESS_LEVEL_NETWORK "option-compress-level-network" @@ -1030,13 +1032,13 @@ manifestNewBuild( /**********************************************************************************************************************************/ void -manifestBuildValidate(Manifest *this, bool delta, time_t copyStart, bool compress) +manifestBuildValidate(Manifest *this, bool delta, time_t copyStart, CompressType compressType) { FUNCTION_LOG_BEGIN(logLevelDebug); FUNCTION_LOG_PARAM(MANIFEST, this); FUNCTION_LOG_PARAM(BOOL, delta); FUNCTION_LOG_PARAM(TIME, copyStart); - FUNCTION_LOG_PARAM(TIME, compress); + FUNCTION_LOG_PARAM(ENUM, compressType); FUNCTION_LOG_END(); ASSERT(this != NULL); @@ -1054,7 +1056,7 @@ manifestBuildValidate(Manifest *this, bool delta, time_t copyStart, bool compres // This value is not needed in this function, but it is needed for resumed manifests and this is last place to set it before // processing begins - this->data.backupOptionCompress = compress; + this->data.backupOptionCompressType = compressType; } MEM_CONTEXT_END(); @@ -1660,8 +1662,13 @@ manifestLoadCallback(void *callbackData, const String *section, const String *ke manifest->data.backupOptionArchiveCheck = jsonToBool(value); else if (strEq(key, MANIFEST_KEY_OPTION_ARCHIVE_COPY_STR)) manifest->data.backupOptionArchiveCopy = jsonToBool(value); + // Historically this option meant to add gz compression else if (strEq(key, MANIFEST_KEY_OPTION_COMPRESS_STR)) - manifest->data.backupOptionCompress = jsonToBool(value); + manifest->data.backupOptionCompressType = jsonToBool(value) ? compressTypeGz : compressTypeNone; + // This new option allows any type of compression to be specified. It must be parsed after the option above so the + // value does not get overwritten. Since options are stored in alpha order this should always be true. + else if (strEq(key, MANIFEST_KEY_OPTION_COMPRESS_TYPE_STR)) + manifest->data.backupOptionCompressType = compressTypeEnum(jsonToStr(value)); else if (strEq(key, MANIFEST_KEY_OPTION_HARDLINK_STR)) manifest->data.backupOptionHardLink = jsonToBool(value); else if (strEq(key, MANIFEST_KEY_OPTION_ONLINE_STR)) @@ -1944,9 +1951,11 @@ manifestSaveCallback(void *callbackData, const String *sectionNext, InfoSave *in jsonFromVar(manifest->data.backupOptionChecksumPage)); } + // Set the option when compression is turned on. In older versions this also implied gz compression but in newer versions + // the type option must also be set if compression is not gz. infoSaveValue( infoSaveData, MANIFEST_SECTION_BACKUP_OPTION_STR, MANIFEST_KEY_OPTION_COMPRESS_STR, - jsonFromBool(manifest->data.backupOptionCompress)); + jsonFromBool(manifest->data.backupOptionCompressType != compressTypeNone)); if (manifest->data.backupOptionCompressLevel != NULL) { @@ -1962,6 +1971,11 @@ manifestSaveCallback(void *callbackData, const String *sectionNext, InfoSave *in jsonFromVar(manifest->data.backupOptionCompressLevelNetwork)); } + // Set the compression type. Older versions will ignore this and assume gz compression if the compress option is set. + infoSaveValue( + infoSaveData, MANIFEST_SECTION_BACKUP_OPTION_STR, MANIFEST_KEY_OPTION_COMPRESS_TYPE_STR, + jsonFromStr(compressTypeStr(manifest->data.backupOptionCompressType))); + if (manifest->data.backupOptionDelta != NULL) { infoSaveValue( diff --git a/src/info/manifest.h b/src/info/manifest.h index 82a565379..9686b25f8 100644 --- a/src/info/manifest.h +++ b/src/info/manifest.h @@ -11,6 +11,7 @@ nothing is missing or corrupt. It is also useful for reporting, e.g. size of ba #define INFO_MANIFEST_H #include "command/backup/common.h" +#include "common/compress/helper.h" #include "common/crypto/common.h" #include "common/type/variantList.h" @@ -66,9 +67,9 @@ typedef struct ManifestData const Variant *backupOptionStandby; // Will the backup be performed from a standby? const Variant *backupOptionBufferSize; // Buffer size used for file/protocol operations const Variant *backupOptionChecksumPage; // Will page checksums be verified? - bool backupOptionCompress; // Will compression be used for backup? - const Variant *backupOptionCompressLevel; // Level to use for compression - const Variant *backupOptionCompressLevelNetwork; // Level to use for network compression + CompressType backupOptionCompressType; // Compression type used for the backup + const Variant *backupOptionCompressLevel; // Level used for compression (if type not none) + const Variant *backupOptionCompressLevelNetwork; // Level used for network compression const Variant *backupOptionDelta; // Will a checksum delta be performed? bool backupOptionHardLink; // Will hardlinks be created in the backup? bool backupOptionOnline; // Will an online backup be performed? @@ -161,7 +162,7 @@ Manifest *manifestNewLoad(IoRead *read); Build functions ***********************************************************************************************************************************/ // Validate the timestamps in the manifest given a copy start time, i.e. all times should be <= the copy start time -void manifestBuildValidate(Manifest *this, bool delta, time_t copyStart, bool compress); +void manifestBuildValidate(Manifest *this, bool delta, time_t copyStart, CompressType compressType); // Create a diff/incr backup by comparing to a previous backup manifest void manifestBuildIncr(Manifest *this, const Manifest *prior, BackupType type, const String *archiveStart); diff --git a/src/storage/remote/protocol.c b/src/storage/remote/protocol.c index 178a12056..2641cb8d8 100644 --- a/src/storage/remote/protocol.c +++ b/src/storage/remote/protocol.c @@ -4,8 +4,7 @@ Remote Storage Protocol Handler #include "build.auto.h" #include "command/backup/pageChecksum.h" -#include "common/compress/gz/compress.h" -#include "common/compress/gz/decompress.h" +#include "common/compress/helper.h" #include "common/crypto/cipherBlock.h" #include "common/crypto/hash.h" #include "common/debug.h" @@ -72,10 +71,10 @@ storageRemoteFilterGroup(IoFilterGroup *filterGroup, const Variant *filterList) const String *filterKey = varStr(varLstGet(kvKeyList(filterKv), 0)); const VariantList *filterParam = varVarLst(kvGet(filterKv, VARSTR(filterKey))); - if (strEq(filterKey, GZ_COMPRESS_FILTER_TYPE_STR)) - ioFilterGroupAdd(filterGroup, gzCompressNewVar(filterParam)); - else if (strEq(filterKey, GZ_DECOMPRESS_FILTER_TYPE_STR)) - ioFilterGroupAdd(filterGroup, gzDecompressNew()); + IoFilter *filter = compressFilterVar(filterKey, filterParam); + + if (filter != NULL) + ioFilterGroupAdd(filterGroup, filter); else if (strEq(filterKey, CIPHER_BLOCK_FILTER_TYPE_STR)) ioFilterGroupAdd(filterGroup, cipherBlockNewVar(filterParam)); else if (strEq(filterKey, CRYPTO_HASH_FILTER_TYPE_STR)) diff --git a/src/storage/remote/read.c b/src/storage/remote/read.c index c4f4769a4..95e16785a 100644 --- a/src/storage/remote/read.c +++ b/src/storage/remote/read.c @@ -6,8 +6,7 @@ Remote Storage Read #include #include -#include "common/compress/gz/compress.h" -#include "common/compress/gz/decompress.h" +#include "common/compress/helper.h" #include "common/debug.h" #include "common/io/read.intern.h" #include "common/log.h" @@ -65,7 +64,10 @@ storageReadRemoteOpen(THIS_VOID) { // If the file is compressible add compression filter on the remote if (this->interface.compressible) - ioFilterGroupAdd(ioReadFilterGroup(storageReadIo(this->read)), gzCompressNew((int)this->interface.compressLevel)); + { + ioFilterGroupAdd( + ioReadFilterGroup(storageReadIo(this->read)), compressFilter(compressTypeGz, (int)this->interface.compressLevel)); + } ProtocolCommand *command = protocolCommandNew(PROTOCOL_COMMAND_STORAGE_OPEN_READ_STR); protocolCommandParamAdd(command, VARSTR(this->interface.name)); @@ -79,7 +81,7 @@ storageReadRemoteOpen(THIS_VOID) // If the file is compressible add decompression filter locally if (this->interface.compressible) - ioFilterGroupAdd(ioReadFilterGroup(storageReadIo(this->read)), gzDecompressNew()); + ioFilterGroupAdd(ioReadFilterGroup(storageReadIo(this->read)), decompressFilter(compressTypeGz)); } MEM_CONTEXT_TEMP_END(); diff --git a/src/storage/remote/write.c b/src/storage/remote/write.c index 6031daa64..0522b2e2a 100644 --- a/src/storage/remote/write.c +++ b/src/storage/remote/write.c @@ -3,8 +3,7 @@ Remote Storage File write ***********************************************************************************************************************************/ #include "build.auto.h" -#include "common/compress/gz/compress.h" -#include "common/compress/gz/decompress.h" +#include "common/compress/helper.h" #include "common/debug.h" #include "common/io/write.intern.h" #include "common/log.h" @@ -70,7 +69,7 @@ storageWriteRemoteOpen(THIS_VOID) { // If the file is compressible add decompression filter on the remote if (this->interface.compressible) - ioFilterGroupInsert(ioWriteFilterGroup(storageWriteIo(this->write)), 0, gzDecompressNew()); + ioFilterGroupInsert(ioWriteFilterGroup(storageWriteIo(this->write)), 0, decompressFilter(compressTypeGz)); ProtocolCommand *command = protocolCommandNew(PROTOCOL_COMMAND_STORAGE_OPEN_WRITE_STR); protocolCommandParamAdd(command, VARSTR(this->interface.name)); @@ -92,7 +91,11 @@ storageWriteRemoteOpen(THIS_VOID) // If the file is compressible add compression filter locally if (this->interface.compressible) - ioFilterGroupAdd(ioWriteFilterGroup(storageWriteIo(this->write)), gzCompressNew((int)this->interface.compressLevel)); + { + ioFilterGroupAdd( + ioWriteFilterGroup(storageWriteIo(this->write)), + compressFilter(compressTypeGz, (int)this->interface.compressLevel)); + } // Set free callback to ensure remote file is freed memContextCallbackSet(this->memContext, storageWriteRemoteFreeResource, this); diff --git a/test/define.yaml b/test/define.yaml index 4c02da2fe..e8ff774c2 100644 --- a/test/define.yaml +++ b/test/define.yaml @@ -258,12 +258,13 @@ unit: # ---------------------------------------------------------------------------------------------------------------------------- - name: compress - total: 3 + total: 2 coverage: common/compress/gz/common: full common/compress/gz/compress: full common/compress/gz/decompress: full + common/compress/helper: full # ---------------------------------------------------------------------------------------------------------------------------- - name: crypto diff --git a/test/expect/mock-all-001.log b/test/expect/mock-all-001.log index ec5cc8b7e..5765b9780 100644 --- a/test/expect/mock-all-001.log +++ b/test/expect/mock-all-001.log @@ -58,7 +58,7 @@ backrest-checksum="[CHECKSUM]" full backup - create pg_stat link, pg_clog dir (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --manifest-save-threshold=3 --buffer-size=[BUFFER-SIZE] --checksum-page --process-max=1 --repo1-type=cifs --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --checksum-page --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --manifest-save-threshold=3 --no-online --pg1-path=[TEST_PATH]/db-master/db/base --process-max=1 --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --repo1-type=cifs --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --checksum-page --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --manifest-save-threshold=3 --no-online --pg1-path=[TEST_PATH]/db-master/db/base --process-max=1 --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --repo1-type=cifs --stanza=db --start-fast --type=full P00 WARN: option repo1-retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. P01 INFO: backup file [TEST_PATH]/db-master/db/base/base/32768/33001 (64KB, 33%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b @@ -92,8 +92,8 @@ pg1-path=[TEST_PATH]/db-master/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -139,6 +139,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=3 +option-compress-type="none" option-delta=false option-hardlink=false option-online=false @@ -239,7 +240,7 @@ P00 INFO: stop command end: completed successfully full backup - global stop (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full P00 WARN: option repo1-retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. P00 ERROR: [062]: stop file exists for all stanzas @@ -261,7 +262,7 @@ P00 INFO: stop command end: completed successfully full backup - stanza stop (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full P00 WARN: option repo1-retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. P00 ERROR: [062]: stop file exists for stanza db @@ -289,7 +290,7 @@ P00 INFO: start command end: completed successfully full backup - resume (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --force --checksum-page --delta --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --checksum-page --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --delta --exclude=postgresql.auto.conf --exclude=pg_log/ --exclude=pg_log2 --exclude=apipe --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --checksum-page --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --delta --exclude=postgresql.auto.conf --exclude=pg_log/ --exclude=pg_log2 --exclude=apipe --force --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full P00 WARN: option repo1-retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. P00 WARN: backup '[BACKUP-FULL-1]' missing manifest removed from backup.info @@ -334,8 +335,8 @@ pg1-path=[TEST_PATH]/db-master/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -385,6 +386,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=3 +option-compress-type="none" option-delta=true option-hardlink=false option-online=false @@ -754,7 +756,7 @@ restore_command = '[BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf incr backup - add tablespace 1 (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option repo1-retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -795,8 +797,8 @@ pg1-path=[TEST_PATH]/db-master/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -843,6 +845,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=3 +option-compress-type="none" option-delta=false option-hardlink=false option-online=false @@ -945,7 +948,7 @@ backrest-checksum="[CHECKSUM]" incr backup - resume and add tablespace 2 (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --process-max=1 --delta --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --delta --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base --process-max=1 --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --delta --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base --process-max=1 --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option repo1-retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. P00 WARN: backup '[BACKUP-INCR-1]' missing manifest removed from backup.info @@ -1008,8 +1011,8 @@ pg1-path=[TEST_PATH]/db-master/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -1056,6 +1059,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=3 +option-compress-type="none" option-delta=true option-hardlink=false option-online=false @@ -1168,7 +1172,7 @@ backrest-checksum="[CHECKSUM]" diff backup - drop tablespace 11 (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --process-max=1 --delta --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --delta --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base --process-max=1 --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --delta --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base --process-max=1 --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff P00 WARN: option repo1-retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -1224,8 +1228,8 @@ pg1-path=[TEST_PATH]/db-master/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -1272,6 +1276,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=3 +option-compress-type="none" option-delta=true option-hardlink=false option-online=false @@ -1534,7 +1539,7 @@ restore_command = '[BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf incr backup - add files and remove tablespace 2 (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --process-max=1 --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base-2 --process-max=1 --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base-2 --process-max=1 --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option repo1-retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-DIFF-1], version = 0.00 @@ -1580,8 +1585,8 @@ tablespace-map=2=[TEST_PATH]/db-master/db/tablespace/ts2-2 [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -1628,6 +1633,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=3 +option-compress-type="none" option-delta=false option-hardlink=false option-online=false @@ -1733,7 +1739,7 @@ backrest-checksum="[CHECKSUM]" incr backup - update files (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base-2 --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast +P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base-2 --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast P00 WARN: option repo1-retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-INCR-3], version = [VERSION-1] @@ -1798,8 +1804,8 @@ tablespace-map=2=[TEST_PATH]/db-master/db/tablespace/ts2-2 [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -1846,6 +1852,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=3 +option-compress-type="none" option-delta=true option-hardlink=false option-online=false @@ -1952,7 +1959,7 @@ backrest-checksum="[CHECKSUM]" diff backup - updates since last full (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --process-max=1 --delta --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --delta --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base-2 --process-max=1 --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --delta --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base-2 --process-max=1 --protocol-timeout=60 --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff P00 WARN: option repo1-retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] @@ -2013,8 +2020,8 @@ tablespace-map=2=[TEST_PATH]/db-master/db/tablespace/ts2-2 [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -2061,6 +2068,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=3 +option-compress-type="none" option-delta=true option-hardlink=false option-online=false @@ -2168,11 +2176,11 @@ backrest-checksum="[CHECKSUM]" diff backup - remove files (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --process-max=1 --delta --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --delta --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base-2 --process-max=1 --protocol-timeout=60 --repo1-hardlink --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --delta --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base-2 --process-max=1 --protocol-timeout=60 --repo1-hardlink --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff P00 WARN: option repo1-retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-2], version = [VERSION-1] -P00 WARN: diff backup cannot alter compress option to 'true', reset to value in [BACKUP-FULL-2] +P00 WARN: diff backup cannot alter compress-type option to 'gz', reset to value in [BACKUP-FULL-2] P00 WARN: diff backup cannot alter hardlink option to 'true', reset to value in [BACKUP-FULL-2] P00 WARN: diff backup cannot alter 'checksum-page' option to 'false', reset to 'true' from [BACKUP-FULL-2] P01 DETAIL: match file from prior backup [TEST_PATH]/db-master/db/base-2/base/32768/33001 (64KB, 36%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b @@ -2228,7 +2236,6 @@ tablespace-map=2=[TEST_PATH]/db-master/db/tablespace/ts2-2 [global] buffer-size=[BUFFER-SIZE] -compress=y compress-level=3 db-timeout=45 lock-path=[TEST_PATH]/db-master/lock @@ -2277,6 +2284,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=3 +option-compress-type="none" option-delta=true option-hardlink=false option-online=false @@ -2383,7 +2391,7 @@ backrest-checksum="[CHECKSUM]" full backup - update file (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --type=full --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base-2 --protocol-timeout=60 --repo1-hardlink --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full +P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base-2 --protocol-timeout=60 --repo1-hardlink --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=full P00 WARN: option repo1-retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. P01 INFO: backup file [TEST_PATH]/db-master/db/base-2/base/32768/33001 (64KB, 36%) checksum 6bf316f11d28c28914ea9be92c00de9bea6d9a6b @@ -2425,7 +2433,6 @@ tablespace-map=2=[TEST_PATH]/db-master/db/tablespace/ts2-2 [global] buffer-size=[BUFFER-SIZE] -compress=y compress-level=3 db-timeout=45 lock-path=[TEST_PATH]/db-master/lock @@ -2473,6 +2480,7 @@ option-checksum-page=false option-compress=true option-compress-level=3 option-compress-level-network=3 +option-compress-type="gz" option-delta=false option-hardlink=true option-online=false @@ -2595,7 +2603,7 @@ P00 INFO: expire command end: completed successfully diff backup - add file (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --checksum-page --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --checksum-page --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base-2 --protocol-timeout=60 --repo1-hardlink --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --buffer-size=[BUFFER-SIZE] --checksum-page --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base-2 --protocol-timeout=60 --repo1-hardlink --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff P00 WARN: option repo1-retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. P00 INFO: last backup label = [BACKUP-FULL-3], version = [VERSION-1] @@ -2639,7 +2647,6 @@ tablespace-map=2=[TEST_PATH]/db-master/db/tablespace/ts2-2 [global] buffer-size=[BUFFER-SIZE] -compress=y compress-level=3 db-timeout=45 lock-path=[TEST_PATH]/db-master/lock @@ -2688,6 +2695,7 @@ option-checksum-page=false option-compress=true option-compress-level=3 option-compress-level-network=3 +option-compress-type="gz" option-delta=false option-hardlink=true option-online=false @@ -3026,7 +3034,7 @@ restore_command = '[BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf diff backup - option backup-standby reset - backup performed from master (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --no-online --log-level-console=info --backup-standby --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --backup-standby --buffer-size=[BUFFER-SIZE] --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=info --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base-2/base --protocol-timeout=60 --repo1-hardlink --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --backup-standby --buffer-size=[BUFFER-SIZE] --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=info --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --no-online --pg1-path=[TEST_PATH]/db-master/db/base-2/base --protocol-timeout=60 --repo1-hardlink --repo1-path=[TEST_PATH]/db-master/repo --stanza=db --start-fast --type=diff P00 WARN: option repo1-retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. P00 WARN: option backup-standby is enabled but backup is offline - backups will be performed from the primary @@ -3048,7 +3056,6 @@ pg1-path=[TEST_PATH]/db-master/db/base-2/base [global] buffer-size=[BUFFER-SIZE] -compress=y compress-level=3 db-timeout=45 lock-path=[TEST_PATH]/db-master/lock @@ -3097,6 +3104,7 @@ option-checksum-page=false option-compress=true option-compress-level=3 option-compress-level-network=3 +option-compress-type="gz" option-delta=false option-hardlink=true option-online=false diff --git a/test/expect/mock-all-002.log b/test/expect/mock-all-002.log index c4c4d3450..6cde89be4 100644 --- a/test/expect/mock-all-002.log +++ b/test/expect/mock-all-002.log @@ -62,9 +62,9 @@ pg1-path=[TEST_PATH]/db-master/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=warn @@ -92,9 +92,9 @@ pg1-path=[TEST_PATH]/db-master/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/backup/lock log-level-console=warn @@ -149,6 +149,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=1 +option-compress-type="none" option-delta=false option-hardlink=false option-online=false @@ -254,9 +255,9 @@ pg1-path=[TEST_PATH]/db-master/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=warn @@ -284,9 +285,9 @@ pg1-path=[TEST_PATH]/db-master/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/backup/lock log-level-console=warn @@ -345,6 +346,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=1 +option-compress-type="none" option-delta=false option-hardlink=false option-online=false @@ -485,9 +487,9 @@ pg1-path=[TEST_PATH]/db-master/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=warn @@ -515,9 +517,9 @@ pg1-path=[TEST_PATH]/db-master/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/backup/lock log-level-console=warn @@ -573,6 +575,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=1 +option-compress-type="none" option-delta=false option-hardlink=false option-online=false @@ -689,9 +692,9 @@ pg1-path=[TEST_PATH]/db-master/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=warn @@ -719,9 +722,9 @@ pg1-path=[TEST_PATH]/db-master/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/backup/lock log-level-console=warn @@ -777,6 +780,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=1 +option-compress-type="none" option-delta=true option-hardlink=false option-online=false @@ -901,9 +905,9 @@ pg1-path=[TEST_PATH]/db-master/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=warn @@ -931,9 +935,9 @@ pg1-path=[TEST_PATH]/db-master/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/backup/lock log-level-console=warn @@ -989,6 +993,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=1 +option-compress-type="none" option-delta=true option-hardlink=false option-online=false @@ -1130,9 +1135,9 @@ tablespace-map=2=[TEST_PATH]/db-master/db/tablespace/ts2-2 [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=warn @@ -1160,9 +1165,9 @@ pg1-path=[TEST_PATH]/db-master/db/base-2 [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/backup/lock log-level-console=warn @@ -1218,6 +1223,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=1 +option-compress-type="none" option-delta=false option-hardlink=false option-online=false @@ -1339,9 +1345,9 @@ tablespace-map=2=[TEST_PATH]/db-master/db/tablespace/ts2-2 [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=warn @@ -1369,9 +1375,9 @@ pg1-path=[TEST_PATH]/db-master/db/base-2 [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/backup/lock log-level-console=warn @@ -1427,6 +1433,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=1 +option-compress-type="none" option-delta=true option-hardlink=false option-online=false @@ -1551,9 +1558,9 @@ tablespace-map=2=[TEST_PATH]/db-master/db/tablespace/ts2-2 [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=warn @@ -1581,9 +1588,9 @@ pg1-path=[TEST_PATH]/db-master/db/base-2 [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/backup/lock log-level-console=warn @@ -1639,6 +1646,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=1 +option-compress-type="none" option-delta=true option-hardlink=false option-online=false @@ -1747,7 +1755,7 @@ diff backup - remove files (backup host) ------------------------------------------------------------------------------------------------------------------------------------ P00 WARN: option repo1-retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. -P00 WARN: diff backup cannot alter compress option to 'true', reset to value in [BACKUP-FULL-2] +P00 WARN: diff backup cannot alter compress-type option to 'gz', reset to value in [BACKUP-FULL-2] P00 WARN: diff backup cannot alter 'checksum-page' option to 'false', reset to 'true' from [BACKUP-FULL-2] P00 WARN: file 'changetime.txt' has timestamp earlier than prior backup, enabling delta checksum P00 WARN: page misalignment in file db-master:[TEST_PATH]/db-master/db/base-2/pg_tblspc/2/[TS_PATH-1]/32768/tablespace2c.txt: file size 12 is not divisible by page size 8192 @@ -1764,9 +1772,9 @@ tablespace-map=2=[TEST_PATH]/db-master/db/tablespace/ts2-2 [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=warn @@ -1794,7 +1802,6 @@ pg1-path=[TEST_PATH]/db-master/db/base-2 [global] buffer-size=[BUFFER-SIZE] -compress=y compress-level=3 compress-level-network=1 db-timeout=45 @@ -1852,6 +1859,7 @@ option-checksum-page=true option-compress=false option-compress-level=3 option-compress-level-network=1 +option-compress-type="none" option-delta=true option-hardlink=false option-online=false @@ -1971,9 +1979,9 @@ tablespace-map=2=[TEST_PATH]/db-master/db/tablespace/ts2-2 [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=warn @@ -2001,7 +2009,6 @@ pg1-path=[TEST_PATH]/db-master/db/base-2 [global] buffer-size=[BUFFER-SIZE] -compress=y compress-level=3 compress-level-network=1 db-timeout=45 @@ -2058,6 +2065,7 @@ option-checksum-page=false option-compress=true option-compress-level=3 option-compress-level-network=1 +option-compress-type="gz" option-delta=false option-hardlink=false option-online=false @@ -2183,9 +2191,9 @@ tablespace-map=2=[TEST_PATH]/db-master/db/tablespace/ts2-2 [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=warn @@ -2213,7 +2221,6 @@ pg1-path=[TEST_PATH]/db-master/db/base-2 [global] buffer-size=[BUFFER-SIZE] -compress=y compress-level=3 compress-level-network=1 db-timeout=45 @@ -2271,6 +2278,7 @@ option-checksum-page=false option-compress=true option-compress-level=3 option-compress-level-network=1 +option-compress-type="gz" option-delta=false option-hardlink=false option-online=false @@ -2410,7 +2418,7 @@ restore_command = '[BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf diff backup - option backup-standby reset - backup performed from master (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --no-online --log-level-console=info --backup-standby --type=diff --stanza=db backup ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: backup command begin [BACKREST-VERSION]: --backup-standby --buffer-size=[BUFFER-SIZE] --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/backup/lock --log-level-console=info --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/backup/log[] --no-log-timestamp --no-online --pg1-host=db-master --pg1-host-cmd=[BACKREST-BIN] --pg1-host-config=[TEST_PATH]/db-master/pgbackrest.conf --pg1-host-user=[USER-1] --pg1-path=[TEST_PATH]/db-master/db/base-2/base --process-max=2 --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=/ --repo1-s3-bucket=pgbackrest-dev --repo1-s3-endpoint=s3.amazonaws.com --repo1-s3-key= --repo1-s3-key-secret= --repo1-s3-region=us-east-1 --no-repo1-s3-verify-tls --repo1-type=s3 --stanza=db --start-fast --type=diff +P00 INFO: backup command begin [BACKREST-VERSION]: --backup-standby --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/backup/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/backup/lock --log-level-console=info --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/backup/log[] --no-log-timestamp --no-online --pg1-host=db-master --pg1-host-cmd=[BACKREST-BIN] --pg1-host-config=[TEST_PATH]/db-master/pgbackrest.conf --pg1-host-user=[USER-1] --pg1-path=[TEST_PATH]/db-master/db/base-2/base --process-max=2 --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=/ --repo1-s3-bucket=pgbackrest-dev --repo1-s3-endpoint=s3.amazonaws.com --repo1-s3-key= --repo1-s3-key-secret= --repo1-s3-region=us-east-1 --no-repo1-s3-verify-tls --repo1-type=s3 --stanza=db --start-fast --type=diff P00 WARN: option repo1-retention-full is not set, the repository may run out of space HINT: to retain full backups indefinitely (without warning), set option 'repo1-retention-full' to the maximum. P00 WARN: option backup-standby is enabled but backup is offline - backups will be performed from the primary @@ -2434,9 +2442,9 @@ pg1-path=[TEST_PATH]/db-master/db/base-2/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=warn @@ -2464,7 +2472,6 @@ pg1-path=[TEST_PATH]/db-master/db/base-2/base [global] buffer-size=[BUFFER-SIZE] -compress=y compress-level=3 compress-level-network=1 db-timeout=45 @@ -2522,6 +2529,7 @@ option-checksum-page=false option-compress=true option-compress-level=3 option-compress-level-network=1 +option-compress-type="gz" option-delta=false option-hardlink=false option-online=false diff --git a/test/expect/mock-archive-001.log b/test/expect/mock-archive-001.log index d2278115a..71d23ac5e 100644 --- a/test/expect/mock-archive-001.log +++ b/test/expect/mock-archive-001.log @@ -1,9 +1,9 @@ -run 001 - rmt 0, s3 0, enc 1 -============================ +run 001 - rmt 0, s3 0, enc 1, cmp gz +==================================== > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001] --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db P00 ERROR: [055]: unable to load info file '[TEST_PATH]/db-master/repo/archive/db/archive.info' or '[TEST_PATH]/db-master/repo/archive/db/archive.info.copy': FileMissingError: unable to open missing file '[TEST_PATH]/db-master/repo/archive/db/archive.info' for read FileMissingError: unable to open missing file '[TEST_PATH]/db-master/repo/archive/db/archive.info.copy' for read @@ -73,9 +73,9 @@ db-version="9.4" [backrest] backrest-checksum="[CHECKSUM]" -> [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push --compress [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 +> [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push --compress-type=gz [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001] --buffer-size=[BUFFER-SIZE] --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=gz --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: pushed WAL file '000000010000000100000001' to the archive P00 INFO: archive-push command end: completed successfully @@ -91,15 +91,15 @@ P00 INFO: archive-get command begin [BACKREST-VERSION]: [000000010000000100000 P00 INFO: found 000000010000000100000001 in the archive P00 INFO: archive-get command end: completed successfully -> [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push --compress --archive-async --process-max=2 [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 +> [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push --compress-type=gz --archive-async --process-max=2 [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --archive-async --buffer-size=[BUFFER-SIZE] --compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --process-max=2 --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --spool-path=[TEST_PATH]/db-master/spool --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --archive-async --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=gz --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --process-max=2 --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --spool-path=[TEST_PATH]/db-master/spool --stanza=db P00 INFO: pushed WAL file '000000010000000100000002' to the archive asynchronously P00 INFO: archive-push command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push --archive-async [TEST_PATH]/db-master/db/base/pg_xlog/00000002.history ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/00000002.history] --archive-async --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --spool-path=[TEST_PATH]/db-master/spool --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/00000002.history] --archive-async --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --spool-path=[TEST_PATH]/db-master/spool --stanza=db P00 INFO: pushed WAL file '00000002.history' to the archive asynchronously P00 INFO: archive-push command end: completed successfully @@ -111,7 +111,7 @@ P00 INFO: archive-get command end: aborted with exception [044] > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db P00 ERROR: [044]: PostgreSQL version 9.4, system-id 1000000000000000094 do not match stanza version 9.4, system-id 5000900090001855000 HINT: are you archiving to the correct stanza? P00 INFO: archive-push command end: aborted with exception [044] @@ -130,7 +130,7 @@ P00 INFO: stop command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db P00 ERROR: [062]: stop file exists for stanza db P00 INFO: archive-push command end: aborted with exception [062] @@ -148,7 +148,7 @@ P00 INFO: start command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db P00 WARN: WAL file '000000010000000100000002' already exists in the archive with the same checksum HINT: this is valid in some recovery scenarios but may also indicate a problem. P00 INFO: pushed WAL file '000000010000000100000002' to the archive @@ -156,7 +156,7 @@ P00 INFO: archive-push command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db P00 ERROR: [045]: WAL file '000000010000000100000002' already exists in the archive P00 INFO: archive-push command end: aborted with exception [045] @@ -180,13 +180,13 @@ P00 INFO: archive-get command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial] --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db P00 INFO: pushed WAL file '000000010000000100000002.partial' to the archive P00 INFO: archive-push command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial] --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db P00 WARN: WAL file '000000010000000100000002.partial' already exists in the archive with the same checksum HINT: this is valid in some recovery scenarios but may also indicate a problem. P00 INFO: pushed WAL file '000000010000000100000002.partial' to the archive @@ -194,6 +194,6 @@ P00 INFO: archive-push command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial] --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-cipher-pass= --repo1-cipher-type=aes-256-cbc --repo1-path=[TEST_PATH]/db-master/repo --stanza=db P00 ERROR: [045]: WAL file '000000010000000100000002.partial' already exists in the archive P00 INFO: archive-push command end: aborted with exception [045] diff --git a/test/expect/mock-archive-002.log b/test/expect/mock-archive-002.log index aef285f99..247c3daf2 100644 --- a/test/expect/mock-archive-002.log +++ b/test/expect/mock-archive-002.log @@ -1,9 +1,9 @@ -run 002 - rmt 1, s3 1, enc 0 -============================ +run 002 - rmt 1, s3 1, enc 0, cmp gz +==================================== > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001] --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-level-network=1 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db P00 ERROR: [055]: unable to load info file '/archive/db/archive.info' or '/archive/db/archive.info.copy': FileMissingError: raised from remote-0 protocol on 'backup': unable to open '/archive/db/archive.info': No such file or directory FileMissingError: raised from remote-0 protocol on 'backup': unable to open '/archive/db/archive.info.copy': No such file or directory @@ -69,9 +69,9 @@ db-version="9.4" [backrest] backrest-checksum="[CHECKSUM]" -> [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push --cmd-ssh=/usr/bin/ssh --compress [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 +> [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push --cmd-ssh=/usr/bin/ssh --compress-type=gz [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001] --buffer-size=[BUFFER-SIZE] --cmd-ssh=/usr/bin/ssh --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000001] --buffer-size=[BUFFER-SIZE] --cmd-ssh=/usr/bin/ssh --compress-level=3 --compress-level-network=1 --compress-type=gz --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db P00 INFO: pushed WAL file '000000010000000100000001' to the archive P00 INFO: archive-push command end: completed successfully @@ -87,15 +87,15 @@ P00 INFO: archive-get command begin [BACKREST-VERSION]: [000000010000000100000 P00 INFO: found 000000010000000100000001 in the archive P00 INFO: archive-get command end: completed successfully -> [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push --compress --archive-async --process-max=2 [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 +> [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push --compress-type=gz --archive-async --process-max=2 [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --archive-async --buffer-size=[BUFFER-SIZE] --compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --process-max=2 --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --spool-path=[TEST_PATH]/db-master/spool --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --archive-async --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-level-network=1 --compress-type=gz --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --process-max=2 --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --spool-path=[TEST_PATH]/db-master/spool --stanza=db P00 INFO: pushed WAL file '000000010000000100000002' to the archive asynchronously P00 INFO: archive-push command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push --archive-async [TEST_PATH]/db-master/db/base/pg_xlog/00000002.history ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/00000002.history] --archive-async --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --spool-path=[TEST_PATH]/db-master/spool --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/00000002.history] --archive-async --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-level-network=1 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --spool-path=[TEST_PATH]/db-master/spool --stanza=db P00 INFO: pushed WAL file '00000002.history' to the archive asynchronously P00 INFO: archive-push command end: completed successfully @@ -107,7 +107,7 @@ P00 INFO: archive-get command end: aborted with exception [044] > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-level-network=1 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db P00 ERROR: [044]: PostgreSQL version 9.4, system-id 1000000000000000094 do not match stanza version 9.4, system-id 5000900090001855000 HINT: are you archiving to the correct stanza? P00 INFO: archive-push command end: aborted with exception [044] @@ -126,7 +126,7 @@ P00 INFO: stop command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-level-network=1 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db P00 ERROR: [062]: stop file exists for stanza db P00 INFO: archive-push command end: aborted with exception [062] @@ -144,7 +144,7 @@ P00 INFO: start command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-level-network=1 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db P00 WARN: WAL file '000000010000000100000002' already exists in the archive with the same checksum HINT: this is valid in some recovery scenarios but may also indicate a problem. P00 INFO: pushed WAL file '000000010000000100000002' to the archive @@ -152,7 +152,7 @@ P00 INFO: archive-push command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002 ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-level-network=1 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db P00 ERROR: [045]: WAL file '000000010000000100000002' already exists in the archive P00 INFO: archive-push command end: aborted with exception [045] @@ -176,13 +176,13 @@ P00 INFO: archive-get command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial] --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-level-network=1 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db P00 INFO: pushed WAL file '000000010000000100000002.partial' to the archive P00 INFO: archive-push command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial] --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-level-network=1 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db P00 WARN: WAL file '000000010000000100000002.partial' already exists in the archive with the same checksum HINT: this is valid in some recovery scenarios but may also indicate a problem. P00 INFO: pushed WAL file '000000010000000100000002.partial' to the archive @@ -190,6 +190,6 @@ P00 INFO: archive-push command end: completed successfully > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db archive-push [TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial ------------------------------------------------------------------------------------------------------------------------------------ -P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial] --buffer-size=[BUFFER-SIZE] --no-compress --compress-level=3 --compress-level-network=1 --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db +P00 INFO: archive-push command begin [BACKREST-VERSION]: [[TEST_PATH]/db-master/db/base/pg_xlog/000000010000000100000002.partial] --buffer-size=[BUFFER-SIZE] --compress-level=3 --compress-level-network=1 --compress-type=none --config=[TEST_PATH]/db-master/pgbackrest.conf --db-timeout=45 --lock-path=[TEST_PATH]/db-master/lock --log-level-console=detail --log-level-file=[LOG-LEVEL-FILE] --log-level-stderr=off --log-path=[TEST_PATH]/db-master/log[] --no-log-timestamp --pg1-path=[TEST_PATH]/db-master/db/base --protocol-timeout=60 --repo1-host=backup --repo1-host-cmd=[BACKREST-BIN] --repo1-host-config=[TEST_PATH]/backup/pgbackrest.conf --repo1-host-user=[USER-1] --stanza=db P00 ERROR: [045]: WAL file '000000010000000100000002.partial' already exists in the archive P00 INFO: archive-push command end: aborted with exception [045] diff --git a/test/expect/mock-archive-stop-001.log b/test/expect/mock-archive-stop-001.log index c54b05edd..ce14afb1c 100644 --- a/test/expect/mock-archive-stop-001.log +++ b/test/expect/mock-archive-stop-001.log @@ -1,5 +1,5 @@ -run 001 - rmt 0, cmp 0, error version, s3 0, enc 1 -================================================== +run 001 - rmt 0, cmp none, error version, s3 0, enc 1 +===================================================== stanza-create db - create required data for stanza (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --no-online stanza-create diff --git a/test/expect/mock-archive-stop-002.log b/test/expect/mock-archive-stop-002.log index 2e1287552..450c143c6 100644 --- a/test/expect/mock-archive-stop-002.log +++ b/test/expect/mock-archive-stop-002.log @@ -1,5 +1,5 @@ -run 002 - rmt 1, cmp 1, error connect, s3 1, enc 0 -================================================== +run 002 - rmt 1, cmp gz, error connect, s3 1, enc 0 +=================================================== stanza-create db - create required data for stanza (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --no-online stanza-create diff --git a/test/expect/mock-stanza-001.log b/test/expect/mock-stanza-001.log index 19e5be65a..971d80183 100644 --- a/test/expect/mock-stanza-001.log +++ b/test/expect/mock-stanza-001.log @@ -1,5 +1,5 @@ -run 001 - remote 0, s3 0, enc 0 -=============================== +run 001 - remote 0, s3 0, enc 0, cmp gz +======================================= stanza-create db - fail on missing control file (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db --no-online --log-level-file=[LOG-LEVEL-FILE] stanza-create diff --git a/test/expect/mock-stanza-002.log b/test/expect/mock-stanza-002.log index d93c4986a..9e7591a96 100644 --- a/test/expect/mock-stanza-002.log +++ b/test/expect/mock-stanza-002.log @@ -1,5 +1,5 @@ -run 002 - remote 1, s3 1, enc 1 -=============================== +run 002 - remote 1, s3 1, enc 1, cmp gz +======================================= stanza-create db - fail on missing control file (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db --no-online --log-level-file=[LOG-LEVEL-FILE] stanza-create diff --git a/test/expect/real-all-001.log b/test/expect/real-all-001.log index 6ca78b82d..395952b32 100644 --- a/test/expect/real-all-001.log +++ b/test/expect/real-all-001.log @@ -1,5 +1,5 @@ -run 001 - bkp 0, sby 0, dst db-master, cmp 0, s3 0, enc 0 -========================================================= +run 001 - bkp 0, sby 0, dst db-master, cmp none, s3 0, enc 0 +============================================================ stanza-create db - main create stanza info files (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db stanza-create @@ -82,8 +82,8 @@ pg1-socket-path=[TEST_PATH]/db-master/db [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -130,8 +130,8 @@ pg1-socket-path=[TEST_PATH]/db-master/db [global] archive-async=y buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -265,8 +265,8 @@ pg1-socket-path=[TEST_PATH]/db-master/db [global] archive-async=y buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail diff --git a/test/expect/real-all-002.log b/test/expect/real-all-002.log index 768d4e2cd..b43a5d836 100644 --- a/test/expect/real-all-002.log +++ b/test/expect/real-all-002.log @@ -1,5 +1,5 @@ -run 002 - bkp 0, sby 1, dst db-master, cmp 0, s3 0, enc 0 -========================================================= +run 002 - bkp 0, sby 1, dst db-master, cmp none, s3 0, enc 0 +============================================================ stanza-create db - main create stanza info files (db-master host) > [CONTAINER-EXEC] db-master [BACKREST-BIN] --config=[TEST_PATH]/db-master/pgbackrest.conf --stanza=db stanza-create @@ -28,8 +28,8 @@ pg8-path=[TEST_PATH]/db-standby/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -55,8 +55,8 @@ pg1-socket-path=[TEST_PATH]/db-standby/db [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-standby/lock log-level-console=detail @@ -111,8 +111,8 @@ pg8-path=[TEST_PATH]/db-standby/db/base [global] archive-async=y buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -140,8 +140,8 @@ pg1-socket-path=[TEST_PATH]/db-standby/db [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-standby/lock log-level-console=detail @@ -185,8 +185,8 @@ pg8-path=[TEST_PATH]/db-standby/db/base [global] archive-async=y buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -214,8 +214,8 @@ pg1-socket-path=[TEST_PATH]/db-standby/db [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-standby/lock log-level-console=detail diff --git a/test/expect/real-all-003.log b/test/expect/real-all-003.log index c914b8d9f..e0042c668 100644 --- a/test/expect/real-all-003.log +++ b/test/expect/real-all-003.log @@ -1,5 +1,5 @@ -run 003 - bkp 0, sby 1, dst db-standby, cmp 0, s3 0, enc 0 -========================================================== +run 003 - bkp 0, sby 1, dst db-standby, cmp none, s3 0, enc 0 +============================================================= stanza-create db - main create stanza info files (db-standby host) > [CONTAINER-EXEC] db-standby [BACKREST-BIN] --config=[TEST_PATH]/db-standby/pgbackrest.conf --stanza=db stanza-create @@ -18,9 +18,9 @@ pg1-socket-path=[TEST_PATH]/db-master/db [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -55,9 +55,9 @@ pg8-path=[TEST_PATH]/db-master/db/base [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-standby/lock log-level-console=detail @@ -102,9 +102,9 @@ pg1-socket-path=[TEST_PATH]/db-master/db [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -142,9 +142,9 @@ pg8-path=[TEST_PATH]/db-master/db/base [global] archive-async=y buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-standby/lock log-level-console=detail @@ -174,9 +174,9 @@ pg1-socket-path=[TEST_PATH]/db-master/db [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -214,9 +214,9 @@ pg8-path=[TEST_PATH]/db-master/db/base [global] archive-async=y buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-standby/lock log-level-console=detail diff --git a/test/expect/real-all-004.log b/test/expect/real-all-004.log index 2050bfb66..c873a9727 100644 --- a/test/expect/real-all-004.log +++ b/test/expect/real-all-004.log @@ -1,5 +1,5 @@ -run 004 - bkp 1, sby 0, dst backup, cmp 1, s3 0, enc 1 -====================================================== +run 004 - bkp 1, sby 0, dst backup, cmp gz, s3 0, enc 1 +======================================================= stanza-create db - main create stanza info files (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db stanza-create diff --git a/test/expect/real-all-005.log b/test/expect/real-all-005.log index 072c9b86e..bd1710e5c 100644 --- a/test/expect/real-all-005.log +++ b/test/expect/real-all-005.log @@ -1,5 +1,5 @@ -run 005 - bkp 1, sby 1, dst backup, cmp , s3 0, enc 0 -===================================================== +run 005 - bkp 1, sby 1, dst backup, cmp none, s3 0, enc 0 +========================================================= stanza-create db - main create stanza info files (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db stanza-create @@ -18,9 +18,9 @@ pg1-socket-path=[TEST_PATH]/db-master/db [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -45,9 +45,9 @@ pg1-socket-path=[TEST_PATH]/db-standby/db [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-standby/lock log-level-console=detail @@ -86,9 +86,9 @@ pg8-port=6544 [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/backup/lock log-level-console=detail @@ -132,9 +132,9 @@ pg1-socket-path=[TEST_PATH]/db-master/db [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -161,9 +161,9 @@ pg1-socket-path=[TEST_PATH]/db-standby/db [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-standby/lock log-level-console=detail @@ -203,9 +203,9 @@ pg8-port=6544 [global] archive-async=y buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/backup/lock log-level-console=detail @@ -238,9 +238,9 @@ pg1-socket-path=[TEST_PATH]/db-master/db [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-master/lock log-level-console=detail @@ -267,9 +267,9 @@ pg1-socket-path=[TEST_PATH]/db-standby/db [global] buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/db-standby/lock log-level-console=detail @@ -309,9 +309,9 @@ pg8-port=6544 [global] archive-async=y buffer-size=[BUFFER-SIZE] -compress=n compress-level=3 compress-level-network=1 +compress-type=none db-timeout=45 lock-path=[TEST_PATH]/backup/lock log-level-console=detail diff --git a/test/expect/real-all-006.log b/test/expect/real-all-006.log index ecdb630f1..70ee17fe1 100644 --- a/test/expect/real-all-006.log +++ b/test/expect/real-all-006.log @@ -1,5 +1,5 @@ -run 006 - bkp 1, sby 0, dst backup, cmp 1, s3 1, enc 0 -====================================================== +run 006 - bkp 1, sby 0, dst backup, cmp gz, s3 1, enc 0 +======================================================= stanza-create db - main create stanza info files (backup host) > [CONTAINER-EXEC] backup [BACKREST-BIN] --config=[TEST_PATH]/backup/pgbackrest.conf --stanza=db stanza-create diff --git a/test/lib/pgBackRestTest/Env/Host/HostBackupTest.pm b/test/lib/pgBackRestTest/Env/Host/HostBackupTest.pm index ccdab71ff..df78f91b5 100644 --- a/test/lib/pgBackRestTest/Env/Host/HostBackupTest.pm +++ b/test/lib/pgBackRestTest/Env/Host/HostBackupTest.pm @@ -476,9 +476,9 @@ sub backupCompare foreach my $strFileKey ($oActualManifest->keys(MANIFEST_SECTION_TARGET_FILE)) { # Determine repo size if compression or encryption is enabled - my $bCompressed = $oExpectedManifest->{&MANIFEST_SECTION_BACKUP_OPTION}{&MANIFEST_KEY_COMPRESS}; + my $strCompressType = $oExpectedManifest->{&MANIFEST_SECTION_BACKUP_OPTION}{&MANIFEST_KEY_COMPRESS_TYPE}; - if ($bCompressed || + if ($strCompressType ne CFGOPTVAL_COMPRESS_TYPE_NONE || (defined($oExpectedManifest->{&INI_SECTION_CIPHER}) && defined($oExpectedManifest->{&INI_SECTION_CIPHER}{&INI_KEY_CIPHER_PASS}))) { @@ -487,7 +487,8 @@ sub backupCompare $oActualManifest->test(MANIFEST_SECTION_TARGET_FILE, $strFileKey, MANIFEST_SUBKEY_REFERENCE) ? $oActualManifest->numericGet(MANIFEST_SECTION_TARGET_FILE, $strFileKey, MANIFEST_SUBKEY_REPO_SIZE, false) : (storageRepo()->info(STORAGE_REPO_BACKUP . - "/${strBackup}/${strFileKey}" . ($bCompressed ? '.gz' : '')))->{size}; + "/${strBackup}/${strFileKey}" . + ($strCompressType eq CFGOPTVAL_COMPRESS_TYPE_NONE ? '' : ".${strCompressType}")))->{size}; if (defined($lRepoSize) && $lRepoSize != $oExpectedManifest->{&MANIFEST_SECTION_TARGET_FILE}{$strFileKey}{&MANIFEST_SUBKEY_SIZE}) @@ -1031,9 +1032,9 @@ sub configCreate $oParamHash{&CFGDEF_SECTION_GLOBAL}{cfgOptionName(CFGOPT_COMPRESS_LEVEL_NETWORK)} = 1; } - if (defined($$oParam{bCompress}) && !$$oParam{bCompress}) + if (defined($oParam->{strCompressType}) && $oParam->{strCompressType} ne CFGOPTVAL_COMPRESS_TYPE_GZ) { - $oParamHash{&CFGDEF_SECTION_GLOBAL}{cfgOptionName(CFGOPT_COMPRESS)} = 'n'; + $oParamHash{&CFGDEF_SECTION_GLOBAL}{cfgOptionName(CFGOPT_COMPRESS_TYPE)} = $oParam->{strCompressType}; } if ($self->isHostBackup()) @@ -1200,7 +1201,14 @@ sub configUpdate { foreach my $strKey (keys(%{$hParam->{$strSection}})) { - $oConfig->{$strSection}{$strKey} = $hParam->{$strSection}{$strKey}; + if (defined($hParam->{$strSection}{$strKey})) + { + $oConfig->{$strSection}{$strKey} = $hParam->{$strSection}{$strKey}; + } + else + { + delete($oConfig->{$strSection}{$strKey}); + } } } @@ -1792,6 +1800,8 @@ sub restoreCompare $oExpectedManifestRef->{&MANIFEST_SECTION_BACKUP_OPTION}{&MANIFEST_KEY_DELTA}, $oTablespaceMap); $oActualManifest->boolSet(MANIFEST_SECTION_BACKUP_OPTION, MANIFEST_KEY_DELTA, undef, $oExpectedManifestRef->{&MANIFEST_SECTION_BACKUP_OPTION}{&MANIFEST_KEY_DELTA}); + $oActualManifest->set(MANIFEST_SECTION_BACKUP_OPTION, MANIFEST_KEY_COMPRESS_TYPE, undef, + $oExpectedManifestRef->{&MANIFEST_SECTION_BACKUP_OPTION}{&MANIFEST_KEY_COMPRESS_TYPE}); my $strSectionPath = $oActualManifest->get(MANIFEST_SECTION_BACKUP_TARGET, MANIFEST_TARGET_PGDATA, MANIFEST_SUBKEY_PATH); diff --git a/test/lib/pgBackRestTest/Env/HostEnvTest.pm b/test/lib/pgBackRestTest/Env/HostEnvTest.pm index de3fe3fe9..e13a287ee 100644 --- a/test/lib/pgBackRestTest/Env/HostEnvTest.pm +++ b/test/lib/pgBackRestTest/Env/HostEnvTest.pm @@ -43,6 +43,11 @@ use constant ENCRYPTION_KEY_MANIFEST => 'manifest'; use constant ENCRYPTION_KEY_BACKUPSET => 'backupset'; push @EXPORT, qw(ENCRYPTION_KEY_BACKUPSET); +use constant NONE => CFGOPTVAL_COMPRESS_TYPE_NONE; + push @EXPORT, qw(NONE); +use constant GZ => CFGOPTVAL_COMPRESS_TYPE_GZ; + push @EXPORT, qw(GZ); + #################################################################################################################################### # setup #################################################################################################################################### @@ -127,7 +132,7 @@ sub setup # Create db master config $oHostDbMaster->configCreate({ strBackupSource => $$oConfigParam{strBackupSource}, - bCompress => $$oConfigParam{bCompress}, + strCompressType => $$oConfigParam{strCompressType}, bHardlink => $bHostBackup ? undef : $$oConfigParam{bHardLink}, bArchiveAsync => $$oConfigParam{bArchiveAsync}, bS3 => $$oConfigParam{bS3}}); @@ -136,7 +141,7 @@ sub setup if (defined($oHostBackup)) { $oHostBackup->configCreate({ - bCompress => $$oConfigParam{bCompress}, + strCompressType => $$oConfigParam{strCompressType}, bHardlink => $$oConfigParam{bHardLink}, bS3 => $$oConfigParam{bS3}}); } @@ -151,7 +156,7 @@ sub setup { $oHostDbStandby->configCreate({ strBackupSource => $$oConfigParam{strBackupSource}, - bCompress => $$oConfigParam{bCompress}, + strCompressType => $$oConfigParam{strCompressType}, bHardlink => $bHostBackup ? undef : $$oConfigParam{bHardLink}, bArchiveAsync => $$oConfigParam{bArchiveAsync}}); } diff --git a/test/lib/pgBackRestTest/Module/Mock/MockAllTest.pm b/test/lib/pgBackRestTest/Module/Mock/MockAllTest.pm index 6a9cfbd96..41010c4c3 100644 --- a/test/lib/pgBackRestTest/Module/Mock/MockAllTest.pm +++ b/test/lib/pgBackRestTest/Module/Mock/MockAllTest.pm @@ -62,14 +62,14 @@ sub run foreach my $rhRun ( - {vm => VM1, remote => false, s3 => true, encrypt => false, delta => true}, - {vm => VM1, remote => true, s3 => false, encrypt => true, delta => false}, - {vm => VM2, remote => false, s3 => false, encrypt => true, delta => true}, - {vm => VM2, remote => true, s3 => true, encrypt => false, delta => false}, - {vm => VM3, remote => false, s3 => false, encrypt => false, delta => true}, - {vm => VM3, remote => true, s3 => true, encrypt => true, delta => false}, - {vm => VM4, remote => false, s3 => false, encrypt => false, delta => false}, - {vm => VM4, remote => true, s3 => true, encrypt => true, delta => true}, + {vm => VM1, remote => false, s3 => true, encrypt => false, delta => true, compress => GZ}, + {vm => VM1, remote => true, s3 => false, encrypt => true, delta => false, compress => GZ}, + {vm => VM2, remote => false, s3 => false, encrypt => true, delta => true, compress => GZ}, + {vm => VM2, remote => true, s3 => true, encrypt => false, delta => false, compress => GZ}, + {vm => VM3, remote => false, s3 => false, encrypt => false, delta => true, compress => GZ}, + {vm => VM3, remote => true, s3 => true, encrypt => true, delta => false, compress => GZ}, + {vm => VM4, remote => false, s3 => false, encrypt => false, delta => false, compress => GZ}, + {vm => VM4, remote => true, s3 => true, encrypt => true, delta => true, compress => GZ}, ) { # Only run tests for this vm @@ -80,13 +80,14 @@ sub run my $bS3 = $rhRun->{s3}; my $bEncrypt = $rhRun->{encrypt}; my $bDeltaBackup = $rhRun->{delta}; + my $strCompressType = $rhRun->{compress}; # Increment the run, log, and decide whether this unit test should be run if (!$self->begin("rmt ${bRemote}, s3 ${bS3}, enc ${bEncrypt}, delta ${bDeltaBackup}")) {next} # Create hosts, file object, and config my ($oHostDbMaster, $oHostDbStandby, $oHostBackup, $oHostS3) = $self->setup( - true, $self->expect(), {bHostBackup => $bRemote, bCompress => false, bS3 => $bS3, bRepoEncrypt => $bEncrypt}); + true, $self->expect(), {bHostBackup => $bRemote, bS3 => $bS3, bRepoEncrypt => $bEncrypt, strCompressType => NONE}); # If S3 set process max to 2. This seems like the best place for parallel testing since it will help speed S3 processing # without slowing down the other tests too much. @@ -114,6 +115,7 @@ sub run $oManifest{&MANIFEST_SECTION_BACKUP_OPTION}{&MANIFEST_KEY_BUFFER_SIZE} = 16384; $oManifest{&MANIFEST_SECTION_BACKUP_OPTION}{&MANIFEST_KEY_CHECKSUM_PAGE} = JSON::PP::true; $oManifest{&MANIFEST_SECTION_BACKUP_OPTION}{&MANIFEST_KEY_COMPRESS} = JSON::PP::false; + $oManifest{&MANIFEST_SECTION_BACKUP_OPTION}{&MANIFEST_KEY_COMPRESS_TYPE} = CFGOPTVAL_COMPRESS_TYPE_NONE; $oManifest{&MANIFEST_SECTION_BACKUP_OPTION}{&MANIFEST_KEY_COMPRESS_LEVEL} = 3; $oManifest{&MANIFEST_SECTION_BACKUP_OPTION}{&MANIFEST_KEY_COMPRESS_LEVEL_NETWORK} = $bRemote ? 1 : 3; $oManifest{&MANIFEST_SECTION_BACKUP_OPTION}{&MANIFEST_KEY_HARDLINK} = JSON::PP::false; @@ -809,8 +811,15 @@ sub run $strType = CFGOPTVAL_BACKUP_TYPE_DIFF; - # Enable compression to ensure a warning is raised - $oHostBackup->configUpdate({&CFGDEF_SECTION_GLOBAL => {cfgOptionName(CFGOPT_COMPRESS) => 'y'}}); + # Enable compression to ensure a warning is raised (reset when gz to avoid log churn since it is the default) + if ($strCompressType eq GZ) + { + $oHostBackup->configUpdate({&CFGDEF_SECTION_GLOBAL => {cfgOptionName(CFGOPT_COMPRESS_TYPE) => undef}}); + } + else + { + $oHostBackup->configUpdate({&CFGDEF_SECTION_GLOBAL => {cfgOptionName(CFGOPT_COMPRESS_TYPE) => $strCompressType}}); + } # Enable hardlinks (except for s3) to ensure a warning is raised if (!$bS3) @@ -841,6 +850,7 @@ sub run # Now the compression and hardlink changes will take effect $oManifest{&MANIFEST_SECTION_BACKUP_OPTION}{&MANIFEST_KEY_COMPRESS} = JSON::PP::true; + $oManifest{&MANIFEST_SECTION_BACKUP_OPTION}{&MANIFEST_KEY_COMPRESS_TYPE} = $strCompressType; if (!$bS3) { diff --git a/test/lib/pgBackRestTest/Module/Mock/MockArchiveStopTest.pm b/test/lib/pgBackRestTest/Module/Mock/MockArchiveStopTest.pm index a129d155c..9df346a0f 100644 --- a/test/lib/pgBackRestTest/Module/Mock/MockArchiveStopTest.pm +++ b/test/lib/pgBackRestTest/Module/Mock/MockArchiveStopTest.pm @@ -44,14 +44,14 @@ sub run foreach my $rhRun ( - {vm => VM1, remote => false, s3 => false, encrypt => false, compress => true, error => 0}, - {vm => VM1, remote => true, s3 => true, encrypt => true, compress => false, error => 1}, - {vm => VM2, remote => false, s3 => true, encrypt => false, compress => false, error => 0}, - {vm => VM2, remote => true, s3 => false, encrypt => true, compress => true, error => 0}, - {vm => VM3, remote => false, s3 => false, encrypt => true, compress => false, error => 0}, - {vm => VM3, remote => true, s3 => true, encrypt => false, compress => true, error => 1}, - {vm => VM4, remote => false, s3 => true, encrypt => true, compress => true, error => 0}, - {vm => VM4, remote => true, s3 => false, encrypt => false, compress => false, error => 0}, + {vm => VM1, remote => false, s3 => false, encrypt => false, compress => GZ, error => 0}, + {vm => VM1, remote => true, s3 => true, encrypt => true, compress => GZ, error => 1}, + {vm => VM2, remote => false, s3 => true, encrypt => false, compress => NONE, error => 0}, + {vm => VM2, remote => true, s3 => false, encrypt => true, compress => GZ, error => 0}, + {vm => VM3, remote => false, s3 => false, encrypt => true, compress => NONE, error => 0}, + {vm => VM3, remote => true, s3 => true, encrypt => false, compress => GZ, error => 1}, + {vm => VM4, remote => false, s3 => true, encrypt => true, compress => GZ, error => 0}, + {vm => VM4, remote => true, s3 => false, encrypt => false, compress => NONE, error => 0}, ) { # Only run tests for this vm @@ -61,20 +61,21 @@ sub run my $bRemote = $rhRun->{remote}; my $bS3 = $rhRun->{s3}; my $bEncrypt = $rhRun->{encrypt}; - my $bCompress = $rhRun->{compress}; + my $strCompressType = $rhRun->{compress}; my $iError = $rhRun->{error}; # Increment the run, log, and decide whether this unit test should be run - if (!$self->begin("rmt ${bRemote}, cmp ${bCompress}, error " . ($iError ? 'connect' : 'version') . ", s3 ${bS3}, " . - "enc ${bEncrypt}")) {next} + if (!$self->begin( + "rmt ${bRemote}, cmp ${strCompressType}, error " . ($iError ? 'connect' : 'version') . + ", s3 ${bS3}, enc ${bEncrypt}")) {next} # Create hosts, file object, and config my ($oHostDbMaster, $oHostDbStandby, $oHostBackup, $oHostS3) = $self->setup( - true, $self->expect(), {bHostBackup => $bRemote, bCompress => $bCompress, bArchiveAsync => true, bS3 => $bS3, - bRepoEncrypt => $bEncrypt}); + true, $self->expect(), {bHostBackup => $bRemote, strCompressType => $strCompressType, bArchiveAsync => true, + bS3 => $bS3, bRepoEncrypt => $bEncrypt}); # Create compression extension - my $strCompressExt = $bCompress ? qw{.} . COMPRESS_EXT : ''; + my $strCompressExt = $strCompressType ne NONE ? ".${strCompressType}" : ''; # Create the wal path my $strWalPath = $oHostDbMaster->dbBasePath() . '/pg_xlog'; diff --git a/test/lib/pgBackRestTest/Module/Mock/MockArchiveTest.pm b/test/lib/pgBackRestTest/Module/Mock/MockArchiveTest.pm index 9ad3f5b35..3c6d880ff 100644 --- a/test/lib/pgBackRestTest/Module/Mock/MockArchiveTest.pm +++ b/test/lib/pgBackRestTest/Module/Mock/MockArchiveTest.pm @@ -40,15 +40,15 @@ sub archiveCheck my $self = shift; my $strArchiveFile = shift; my $strArchiveChecksum = shift; - my $bCompress = shift; + my $strCompressType = shift; my $strSpoolPath = shift; # Build the archive name to check for at the destination my $strArchiveCheck = PG_VERSION_94 . "-1/${strArchiveFile}-${strArchiveChecksum}"; - if ($bCompress) + if (defined($strCompressType)) { - $strArchiveCheck .= '.gz'; + $strArchiveCheck .= ".${strCompressType}"; } my $oWait = waitInit(5); @@ -82,14 +82,14 @@ sub run foreach my $rhRun ( - {vm => VM1, remote => false, s3 => false, encrypt => false}, - {vm => VM1, remote => true, s3 => true, encrypt => true}, - {vm => VM2, remote => false, s3 => true, encrypt => false}, - {vm => VM2, remote => true, s3 => false, encrypt => true}, - {vm => VM3, remote => false, s3 => false, encrypt => true}, - {vm => VM3, remote => true, s3 => true, encrypt => false}, - {vm => VM4, remote => false, s3 => true, encrypt => true}, - {vm => VM4, remote => true, s3 => false, encrypt => false}, + {vm => VM1, remote => false, s3 => false, encrypt => false, compress => GZ}, + {vm => VM1, remote => true, s3 => true, encrypt => true, compress => GZ}, + {vm => VM2, remote => false, s3 => true, encrypt => false, compress => GZ}, + {vm => VM2, remote => true, s3 => false, encrypt => true, compress => GZ}, + {vm => VM3, remote => false, s3 => false, encrypt => true, compress => GZ}, + {vm => VM3, remote => true, s3 => true, encrypt => false, compress => GZ}, + {vm => VM4, remote => false, s3 => true, encrypt => true, compress => GZ}, + {vm => VM4, remote => true, s3 => false, encrypt => false, compress => GZ}, ) { # Only run tests for this vm @@ -99,12 +99,13 @@ sub run my $bRemote = $rhRun->{remote}; my $bS3 = $rhRun->{s3}; my $bEncrypt = $rhRun->{encrypt}; + my $strCompressType = $rhRun->{compress}; - if (!$self->begin("rmt ${bRemote}, s3 ${bS3}, enc ${bEncrypt}")) {next} + if (!$self->begin("rmt ${bRemote}, s3 ${bS3}, enc ${bEncrypt}, cmp ${strCompressType}")) {next} # Create hosts, file object, and config my ($oHostDbMaster, $oHostDbStandby, $oHostBackup) = $self->setup( - true, $self->expect(), {bHostBackup => $bRemote, bCompress => false, bS3 => $bS3, bRepoEncrypt => $bEncrypt}); + true, $self->expect(), {bHostBackup => $bRemote, bS3 => $bS3, bRepoEncrypt => $bEncrypt, strCompressType => NONE}); # Reduce console logging to detail $oHostDbMaster->configUpdate({&CFGDEF_SECTION_GLOBAL => {cfgOptionName(CFGOPT_LOG_LEVEL_CONSOLE) => lc(DETAIL)}}); @@ -153,12 +154,13 @@ sub run my $strArchiveFile = $self->walGenerate($strWalPath, PG_VERSION_94, 2, $strSourceFile); $oHostDbMaster->executeSimple( - $strCommandPush . ($bRemote ? ' --cmd-ssh=/usr/bin/ssh' : '') . " --compress ${strWalPath}/${strSourceFile}", + $strCommandPush . ($bRemote ? ' --cmd-ssh=/usr/bin/ssh' : '') . + " --compress-type=${strCompressType} ${strWalPath}/${strSourceFile}", {oLogTest => $self->expect()}); - push(@stryExpectedWAL, "${strSourceFile}-${strArchiveChecksum}.gz"); + push(@stryExpectedWAL, "${strSourceFile}-${strArchiveChecksum}.${strCompressType}"); # Test that the WAL was pushed - $self->archiveCheck($strSourceFile, $strArchiveChecksum, true); + $self->archiveCheck($strSourceFile, $strArchiveChecksum, $strCompressType); # Remove from archive_status storageTest()->remove("${strWalPath}/archive_status/${strSourceFile}.ready"); @@ -211,7 +213,7 @@ sub run $strArchiveTmp = $oHostBackup->repoPath() . '/archive/' . $self->stanza() . '/' . PG_VERSION_94 . '-1/' . - substr($strSourceFile, 0, 16) . "/${strSourceFile}-${strArchiveChecksum}." . COMPRESS_EXT . qw{.} . + substr($strSourceFile, 0, 16) . "/${strSourceFile}-${strArchiveChecksum}.${strCompressType}" . qw{.} . STORAGE_TEMP_EXT; storageTest()->put($strArchiveTmp, 'JUNK'); @@ -219,9 +221,10 @@ sub run # Push the WAL $oHostDbMaster->executeSimple( - "${strCommandPush} --compress --archive-async --process-max=2 ${strWalPath}/${strSourceFile}", + "${strCommandPush} --compress-type=${strCompressType} --archive-async --process-max=2" . + " ${strWalPath}/${strSourceFile}", {oLogTest => $self->expect()}); - push(@stryExpectedWAL, "${strSourceFile}-${strArchiveChecksum}." . COMPRESS_EXT); + push(@stryExpectedWAL, "${strSourceFile}-${strArchiveChecksum}.${strCompressType}"); # Make sure the temp file no longer exists if it was created if (defined($strArchiveTmp)) @@ -242,7 +245,7 @@ sub run } # Test that the WAL was pushed - $self->archiveCheck($strSourceFile, $strArchiveChecksum, true, $oHostDbMaster->spoolPath()); + $self->archiveCheck($strSourceFile, $strArchiveChecksum, $strCompressType, $oHostDbMaster->spoolPath()); # Remove from archive_status storageTest()->remove("${strWalPath}/archive_status/${strSourceFile}.ready"); @@ -381,7 +384,7 @@ sub run $oHostDbMaster->executeSimple( $strCommandPush . " ${strWalPath}/${strSourceFile}.partial", {oLogTest => $self->expect()}); - $self->archiveCheck("${strSourceFile}.partial", $strArchiveChecksum, false); + $self->archiveCheck("${strSourceFile}.partial", $strArchiveChecksum); push(@stryExpectedWAL, "${strSourceFile}.partial-${strArchiveChecksum}"); @@ -390,8 +393,7 @@ sub run $oHostDbMaster->executeSimple( $strCommandPush . " ${strWalPath}/${strSourceFile}.partial", {oLogTest => $self->expect()}); - $self->archiveCheck( - "${strSourceFile}.partial", $strArchiveChecksum, false); + $self->archiveCheck("${strSourceFile}.partial", $strArchiveChecksum); #--------------------------------------------------------------------------------------------------------------------------- &log(INFO, ' .partial WAL with different checksum'); diff --git a/test/lib/pgBackRestTest/Module/Mock/MockStanzaTest.pm b/test/lib/pgBackRestTest/Module/Mock/MockStanzaTest.pm index 113b3f4a0..8405a7d70 100644 --- a/test/lib/pgBackRestTest/Module/Mock/MockStanzaTest.pm +++ b/test/lib/pgBackRestTest/Module/Mock/MockStanzaTest.pm @@ -53,14 +53,14 @@ sub run foreach my $rhRun ( - {vm => VM1, remote => false, s3 => false, encrypt => true}, - {vm => VM1, remote => true, s3 => true, encrypt => false}, - {vm => VM2, remote => false, s3 => true, encrypt => true}, - {vm => VM2, remote => true, s3 => false, encrypt => false}, - {vm => VM3, remote => false, s3 => false, encrypt => false}, - {vm => VM3, remote => true, s3 => true, encrypt => true}, - {vm => VM4, remote => false, s3 => true, encrypt => false}, - {vm => VM4, remote => true, s3 => false, encrypt => true}, + {vm => VM1, remote => false, s3 => false, encrypt => true, compress => GZ}, + {vm => VM1, remote => true, s3 => true, encrypt => false, compress => GZ}, + {vm => VM2, remote => false, s3 => true, encrypt => true, compress => GZ}, + {vm => VM2, remote => true, s3 => false, encrypt => false, compress => GZ}, + {vm => VM3, remote => false, s3 => false, encrypt => false, compress => GZ}, + {vm => VM3, remote => true, s3 => true, encrypt => true, compress => GZ}, + {vm => VM4, remote => false, s3 => true, encrypt => false, compress => GZ}, + {vm => VM4, remote => true, s3 => false, encrypt => true, compress => GZ}, ) { # Only run tests for this vm @@ -70,13 +70,15 @@ sub run my $bRemote = $rhRun->{remote}; my $bS3 = $rhRun->{s3}; my $bEncrypt = $rhRun->{encrypt}; + my $strCompressType = $rhRun->{compress}; # Increment the run, log, and decide whether this unit test should be run - if (!$self->begin("remote ${bRemote}, s3 ${bS3}, enc ${bEncrypt}")) {next} + if (!$self->begin("remote ${bRemote}, s3 ${bS3}, enc ${bEncrypt}, cmp ${strCompressType}")) {next} # Create hosts, file object, and config my ($oHostDbMaster, $oHostDbStandby, $oHostBackup, $oHostS3) = $self->setup( - true, $self->expect(), {bHostBackup => $bRemote, bS3 => $bS3, bRepoEncrypt => $bEncrypt}); + true, $self->expect(), {bHostBackup => $bRemote, bS3 => $bS3, bRepoEncrypt => $bEncrypt, + strCompressType => $strCompressType}); # Create the stanza $oHostBackup->stanzaCreate('fail on missing control file', {iExpectedExitStatus => ERROR_FILE_MISSING, @@ -192,7 +194,7 @@ sub run $oHostDbMaster->archivePush($strWalPath, $strArchiveTestFile, 1); $self->testResult( sub {storageRepo()->list(STORAGE_REPO_ARCHIVE . qw{/} . PG_VERSION_94 . '-2/0000000100000001')}, - '000000010000000100000001-' . $self->walGenerateContentChecksum(PG_VERSION_94) . '.' . COMPRESS_EXT, + '000000010000000100000001-' . $self->walGenerateContentChecksum(PG_VERSION_94) . ".${strCompressType}", 'check that WAL is in the archive at -2'); # Create the tablespace directory and perform a backup diff --git a/test/lib/pgBackRestTest/Module/Real/RealAllTest.pm b/test/lib/pgBackRestTest/Module/Real/RealAllTest.pm index 8a388dec5..91a79f08e 100644 --- a/test/lib/pgBackRestTest/Module/Real/RealAllTest.pm +++ b/test/lib/pgBackRestTest/Module/Real/RealAllTest.pm @@ -62,15 +62,15 @@ sub run foreach my $strBackupDestination ( $bS3 || $bHostBackup ? (HOST_BACKUP) : $bHostStandby ? (HOST_DB_MASTER, HOST_DB_STANDBY) : (HOST_DB_MASTER)) { - my $bCompress = $bHostBackup && !$bHostStandby; - my $bRepoEncrypt = ($bCompress && !$bS3) ? true : false; + my $strCompressType = $bHostBackup && !$bHostStandby ? GZ : NONE; + my $bRepoEncrypt = ($strCompressType ne NONE && !$bS3) ? true : false; # Increment the run, log, and decide whether this unit test should be run my $hyVm = vmGet(); my $strDbVersionMostRecent = ${$hyVm->{$self->vm()}{&VM_DB_TEST}}[-1]; next if (!$self->begin( - "bkp ${bHostBackup}, sby ${bHostStandby}, dst ${strBackupDestination}, cmp ${bCompress}, s3 ${bS3}, " . + "bkp ${bHostBackup}, sby ${bHostStandby}, dst ${strBackupDestination}, cmp ${strCompressType}, s3 ${bS3}, " . "enc ${bRepoEncrypt}", # Use the most recent db version on the expect vm for expect testing $self->vm() eq VM_EXPECT && $self->pgVersion() eq $strDbVersionMostRecent)); @@ -100,7 +100,7 @@ sub run my ($oHostDbMaster, $oHostDbStandby, $oHostBackup, $oHostS3) = $self->setup( false, $self->expect(), {bHostBackup => $bHostBackup, bStandby => $bHostStandby, strBackupDestination => $strBackupDestination, - bCompress => $bCompress, bArchiveAsync => false, bS3 => $bS3, bRepoEncrypt => $bRepoEncrypt}); + strCompressType => $strCompressType, bArchiveAsync => false, bS3 => $bS3, bRepoEncrypt => $bRepoEncrypt}); # Only perform extra tests on certain runs to save time my $bTestLocal = $self->runCurrent() == 1; @@ -416,7 +416,7 @@ sub run # Kick out a bunch of archive logs to exercise async archiving. Only do this when compressed and remote to slow it # down enough to make it evident that the async process is working. - if ($bTestExtra && $bCompress && $strBackupDestination eq HOST_BACKUP) + if ($bTestExtra && $strCompressType ne NONE && $strBackupDestination eq HOST_BACKUP) { &log(INFO, ' multiple wal switches to exercise async archiving'); $oHostDbMaster->sqlExecute("create table wal_activity (id int)"); diff --git a/test/src/common/harnessStorage.c b/test/src/common/harnessStorage.c index 7ed289f4c..920bfea66 100644 --- a/test/src/common/harnessStorage.c +++ b/test/src/common/harnessStorage.c @@ -4,7 +4,7 @@ Storage Test Harness #include #include "common/debug.h" -#include "common/compress/gz/decompress.h" +#include "common/compress/helper.h" #include "common/user.h" #include "storage/storage.h" @@ -31,7 +31,8 @@ hrnStorageInfoListCallback(void *callbackData, const StorageInfo *info) { uint64_t size = info->size; - // If the file is compressed then decompress to get the real size + // If the file is compressed then decompress to get the real size. Note that only gz is used in unit tests since + // it is the only compression type guaranteed to be present. if (data->fileCompressed) { ASSERT(data->storage != NULL); @@ -39,7 +40,7 @@ hrnStorageInfoListCallback(void *callbackData, const StorageInfo *info) StorageRead *read = storageNewReadP( data->storage, data->path != NULL ? strNewFmt("%s/%s", strPtr(data->path), strPtr(info->name)) : info->name); - ioFilterGroupAdd(ioReadFilterGroup(storageReadIo(read)), gzDecompressNew()); + ioFilterGroupAdd(ioReadFilterGroup(storageReadIo(read)), decompressFilter(compressTypeGz)); size = bufUsed(storageGetP(read)); } diff --git a/test/src/module/command/archiveGetTest.c b/test/src/module/command/archiveGetTest.c index ad5af5dd1..8f5790601 100644 --- a/test/src/module/command/archiveGetTest.c +++ b/test/src/module/command/archiveGetTest.c @@ -1,7 +1,7 @@ /*********************************************************************************************************************************** Test Archive Get Command ***********************************************************************************************************************************/ -#include "common/compress/gz/compress.h" +#include "common/compress/helper.h" #include "common/harnessConfig.h" #include "common/harnessFork.h" #include "common/io/bufferRead.h" @@ -202,7 +202,7 @@ testRun(void) "repo/archive/test1/10-1/01ABCDEF01ABCDEF/01ABCDEF01ABCDEF01ABCDEF-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.gz")); IoFilterGroup *filterGroup = ioWriteFilterGroup(storageWriteIo(destination)); - ioFilterGroupAdd(filterGroup, gzCompressNew(3)); + ioFilterGroupAdd(filterGroup, compressFilter(compressTypeGz, 3)); ioFilterGroupAdd( filterGroup, cipherBlockNew(cipherModeEncrypt, cipherTypeAes256Cbc, BUFSTRDEF("worstpassphraseever"), NULL)); storagePutP(destination, buffer); diff --git a/test/src/module/command/backupTest.c b/test/src/module/command/backupTest.c index 1b194c4f6..97f2ed7c6 100644 --- a/test/src/module/command/backupTest.c +++ b/test/src/module/command/backupTest.c @@ -52,17 +52,19 @@ testBackupValidateCallback(void *callbackData, const StorageInfo *info) const String *manifestName = info->name; // If the file is compressed then decompress to get the real size - if (strEndsWithZ(info->name, "." GZ_EXT)) + CompressType compressType = compressTypeFromName(info->name); + + if (compressType != compressTypeNone) { ASSERT(data->storage != NULL); StorageRead *read = storageNewReadP( data->storage, data->path != NULL ? strNewFmt("%s/%s", strPtr(data->path), strPtr(info->name)) : info->name); - ioFilterGroupAdd(ioReadFilterGroup(storageReadIo(read)), gzDecompressNew()); + ioFilterGroupAdd(ioReadFilterGroup(storageReadIo(read)), decompressFilter(compressType)); size = bufUsed(storageGetP(read)); - manifestName = strSubN(info->name, 0, strSize(info->name) - strlen("." GZ_EXT)); + manifestName = strSubN(info->name, 0, strSize(info->name) - strSize(compressExtStr(compressType))); } strCatFmt(data->content, ", s=%" PRIu64, size); @@ -170,7 +172,7 @@ typedef struct TestBackupPqScriptParam bool backupStandby; bool errorAfterStart; bool noWal; // Don't write test WAL segments - bool walCompress; // Compress the archive files + CompressType walCompressType; // Compress type for the archive files unsigned int walTotal; // Total WAL to write unsigned int timeline; // Timeline to use for WAL files } TestBackupPqScriptParam; @@ -223,10 +225,10 @@ testBackupPqScript(unsigned int pgVersion, time_t backupTimeStart, TestBackupPqS storageRepoWrite(), strNewFmt( STORAGE_REPO_ARCHIVE "/%s/%s-%s%s", strPtr(archiveId), strPtr(strLstGet(walSegmentList, walSegmentIdx)), - strPtr(walChecksum), param.walCompress ? "." GZ_EXT : "")); + strPtr(walChecksum), strPtr(compressExtStr(param.walCompressType)))); - if (param.walCompress) - ioFilterGroupAdd(ioWriteFilterGroup(storageWriteIo(write)), gzCompressNew(1)); + if (param.walCompressType != compressTypeNone) + ioFilterGroupAdd(ioWriteFilterGroup(storageWriteIo(write)), compressFilter(param.walCompressType, 1)); storagePutP(write, walBuffer); } @@ -438,8 +440,8 @@ testRun(void) varLstAdd(paramList, varNewUInt64(0)); // pgFileChecksumPageLsnLimit varLstAdd(paramList, varNewStr(missingFile)); // repoFile varLstAdd(paramList, varNewBool(false)); // repoFileHasReference - varLstAdd(paramList, varNewBool(false)); // repoFileCompress - varLstAdd(paramList, varNewUInt(0)); // repoFileCompressLevel + varLstAdd(paramList, varNewUInt(compressTypeNone)); // repoFileCompress + varLstAdd(paramList, varNewInt(0)); // repoFileCompressLevel varLstAdd(paramList, varNewStr(backupLabel)); // backupLabel varLstAdd(paramList, varNewBool(false)); // delta varLstAdd(paramList, NULL); // cipherSubPass @@ -513,8 +515,8 @@ testRun(void) varLstAdd(paramList, varNewUInt64(0xFFFFFFFFFFFFFFFF)); // pgFileChecksumPageLsnLimit varLstAdd(paramList, varNewStr(pgFile)); // repoFile varLstAdd(paramList, varNewBool(false)); // repoFileHasReference - varLstAdd(paramList, varNewBool(false)); // repoFileCompress - varLstAdd(paramList, varNewUInt(1)); // repoFileCompressLevel + varLstAdd(paramList, varNewUInt(compressTypeNone)); // repoFileCompress + varLstAdd(paramList, varNewInt(1)); // repoFileCompressLevel varLstAdd(paramList, varNewStr(backupLabel)); // backupLabel varLstAdd(paramList, varNewBool(false)); // delta varLstAdd(paramList, NULL); // cipherSubPass @@ -555,8 +557,8 @@ testRun(void) varLstAdd(paramList, varNewUInt64(0)); // pgFileChecksumPageLsnLimit varLstAdd(paramList, varNewStr(pgFile)); // repoFile varLstAdd(paramList, varNewBool(true)); // repoFileHasReference - varLstAdd(paramList, varNewBool(false)); // repoFileCompress - varLstAdd(paramList, varNewUInt(1)); // repoFileCompressLevel + varLstAdd(paramList, varNewUInt(compressTypeNone)); // repoFileCompress + varLstAdd(paramList, varNewInt(1)); // repoFileCompressLevel varLstAdd(paramList, varNewStr(backupLabel)); // backupLabel varLstAdd(paramList, varNewBool(true)); // delta varLstAdd(paramList, NULL); // cipherSubPass @@ -694,8 +696,8 @@ testRun(void) varLstAdd(paramList, varNewUInt64(0)); // pgFileChecksumPageLsnLimit varLstAdd(paramList, varNewStr(pgFile)); // repoFile varLstAdd(paramList, varNewBool(false)); // repoFileHasReference - varLstAdd(paramList, varNewBool(true)); // repoFileCompress - varLstAdd(paramList, varNewUInt(3)); // repoFileCompressLevel + varLstAdd(paramList, varNewUInt(compressTypeGz)); // repoFileCompress + varLstAdd(paramList, varNewInt(3)); // repoFileCompressLevel varLstAdd(paramList, varNewStr(backupLabel)); // backupLabel varLstAdd(paramList, varNewBool(false)); // delta varLstAdd(paramList, NULL); // cipherSubPass @@ -812,8 +814,8 @@ testRun(void) varLstAdd(paramList, varNewUInt64(0)); // pgFileChecksumPageLsnLimit varLstAdd(paramList, varNewStr(pgFile)); // repoFile varLstAdd(paramList, varNewBool(false)); // repoFileHasReference - varLstAdd(paramList, varNewBool(false)); // repoFileCompress - varLstAdd(paramList, varNewUInt(0)); // repoFileCompressLevel + varLstAdd(paramList, varNewUInt(compressTypeNone)); // repoFileCompress + varLstAdd(paramList, varNewInt(0)); // repoFileCompressLevel varLstAdd(paramList, varNewStr(backupLabel)); // backupLabel varLstAdd(paramList, varNewBool(false)); // delta varLstAdd(paramList, varNewStrZ("12345678")); // cipherPass @@ -1252,7 +1254,7 @@ testRun(void) // ------------------------------------------------------------------------------------------------------------------------- TEST_TITLE("cannot resume when compression does not match"); - manifestResume->data.backupOptionCompress = true; + manifestResume->data.backupOptionCompressType = compressTypeGz; manifestSave( manifestResume, @@ -1264,12 +1266,12 @@ testRun(void) TEST_RESULT_LOG( "P00 WARN: backup '20191003-105320F' cannot be resumed:" - " new compression 'false' does not match resumable compression 'true'"); + " new compression 'none' does not match resumable compression 'gz'"); TEST_RESULT_BOOL( storagePathExistsP(storageRepo(), STRDEF(STORAGE_REPO_BACKUP "/20191003-105320F")), false, "check backup path removed"); - manifestResume->data.backupOptionCompress = false; + manifestResume->data.backupOptionCompressType = compressTypeNone; } // ***************************************************************************************************************************** @@ -1409,7 +1411,7 @@ testRun(void) TEST_RESULT_LOG( "P00 INFO: last backup label = [FULL-1], version = " PROJECT_VERSION "\n" - "P00 WARN: diff backup cannot alter compress option to 'true', reset to value in [FULL-1]\n" + "P00 WARN: diff backup cannot alter compress-type option to 'gz', reset to value in [FULL-1]\n" "P00 WARN: diff backup cannot alter hardlink option to 'true', reset to value in [FULL-1]"); // ------------------------------------------------------------------------------------------------------------------------- @@ -1613,7 +1615,7 @@ testRun(void) ManifestData *manifestResumeData = (ManifestData *)manifestData(manifestResume); manifestResumeData->backupType = backupTypeFull; - manifestResumeData->backupOptionCompress = true; + manifestResumeData->backupOptionCompressType = compressTypeGz; const String *resumeLabel = backupLabelCreate(backupTypeFull, NULL, backupTimeStart); manifestBackupLabelSet(manifestResume, resumeLabel); @@ -1669,6 +1671,12 @@ testRun(void) storagePathCreateP(storageRepoWrite(), strNewFmt(STORAGE_REPO_BACKUP "/%s/pg_data/bogus_path", strPtr(resumeLabel))); // File is not in manifest + storagePutP( + storageNewWriteP( + storageRepoWrite(), strNewFmt(STORAGE_REPO_BACKUP "/%s/pg_data/global/bogus.gz", strPtr(resumeLabel))), + NULL); + + // File has incorrect compression type storagePutP( storageNewWriteP( storageRepoWrite(), strNewFmt(STORAGE_REPO_BACKUP "/%s/pg_data/global/bogus", strPtr(resumeLabel))), @@ -1702,6 +1710,8 @@ testRun(void) "P00 WARN: resumable backup 20191003-105320F of same type exists -- remove invalid files and resume\n" "P00 DETAIL: remove path '{[path]}/repo/backup/test1/20191003-105320F/pg_data/bogus_path' from resumed backup\n" "P00 DETAIL: remove file '{[path]}/repo/backup/test1/20191003-105320F/pg_data/global/bogus' from resumed backup" + " (mismatched compression type)\n" + "P00 DETAIL: remove file '{[path]}/repo/backup/test1/20191003-105320F/pg_data/global/bogus.gz' from resumed backup" " (missing in manifest)\n" "P00 DETAIL: remove file '{[path]}/repo/backup/test1/20191003-105320F/pg_data/global/pg_control.gz' from resumed" " backup (no checksum in resumed manifest)\n" @@ -1761,6 +1771,7 @@ testRun(void) strLstAdd(argList, strNewFmt("--" CFGOPT_PG1_PATH "=%s", strPtr(pg1Path))); strLstAddZ(argList, "--" CFGOPT_REPO1_RETENTION_FULL "=1"); strLstAddZ(argList, "--" CFGOPT_TYPE "=" BACKUP_TYPE_DIFF); + strLstAddZ(argList, "--no-" CFGOPT_COMPRESS); strLstAddZ(argList, "--" CFGOPT_STOP_AUTO); strLstAddZ(argList, "--" CFGOPT_REPO1_HARDLINK); harnessCfgLoad(cfgCmdBackup, argList); @@ -1777,7 +1788,7 @@ testRun(void) manifestResumeData->backupType = backupTypeDiff; manifestResumeData->backupLabelPrior = manifestData(manifestPrior)->backupLabel; - manifestResumeData->backupOptionCompress = true; + manifestResumeData->backupOptionCompressType = compressTypeGz; const String *resumeLabel = backupLabelCreate(backupTypeDiff, manifestData(manifestPrior)->backupLabel, backupTimeStart); manifestBackupLabelSet(manifestResume, resumeLabel); @@ -1834,6 +1845,7 @@ testRun(void) // Check log TEST_RESULT_LOG( "P00 INFO: last backup label = 20191003-105320F, version = " PROJECT_VERSION "\n" + "P00 WARN: diff backup cannot alter compress-type option to 'none', reset to value in 20191003-105320F\n" "P00 INFO: execute exclusive pg_start_backup(): backup begins after the next regular checkpoint completes\n" "P00 INFO: backup start archive = 0000000105D9759000000000, lsn = 5d97590/0\n" "P00 WARN: file 'time-mismatch2' has timestamp in the future, enabling delta checksum\n" @@ -1953,7 +1965,7 @@ testRun(void) storagePathRemoveP(storageRepoWrite(), STRDEF(STORAGE_REPO_BACKUP "/20191016-042640F"), .recurse = true); // Run backup - testBackupPqScriptP(PG_VERSION_96, backupTimeStart, .backupStandby = true, .walCompress = true); + testBackupPqScriptP(PG_VERSION_96, backupTimeStart, .backupStandby = true, .walCompressType = compressTypeGz); TEST_RESULT_VOID(cmdBackup(), "backup"); // Set log level back to detail @@ -2089,7 +2101,7 @@ testRun(void) ((Storage *)storageRepoWrite())->interface.feature ^= 1 << storageFeatureHardLink; // Run backup - testBackupPqScriptP(PG_VERSION_11, backupTimeStart, .walCompress = true, .walTotal = 3); + testBackupPqScriptP(PG_VERSION_11, backupTimeStart, .walCompressType = compressTypeGz, .walTotal = 3); TEST_RESULT_VOID(cmdBackup(), "backup"); // Reset storage features diff --git a/test/src/module/command/helpTest.c b/test/src/module/command/helpTest.c index 8e59cb405..9988d6403 100644 --- a/test/src/module/command/helpTest.c +++ b/test/src/module/command/helpTest.c @@ -149,8 +149,7 @@ testRun(void) " --buffer-size buffer size for file operations\n" " [current=32768, default=4194304]\n" " --cmd-ssh path to ssh client executable [default=ssh]\n" - " --compress-level-network compression level for network transfer when\n" - " compress=n [default=3]\n" + " --compress-level-network network compression level [default=3]\n" " --config pgBackRest configuration file\n" " [default=/etc/pgbackrest/pgbackrest.conf]\n" " --config-include-path path to additional pgBackRest configuration\n" diff --git a/test/src/module/command/restoreTest.c b/test/src/module/command/restoreTest.c index a602ab6c7..8f4686981 100644 --- a/test/src/module/command/restoreTest.c +++ b/test/src/module/command/restoreTest.c @@ -1,7 +1,7 @@ /*********************************************************************************************************************************** Test Restore Command ***********************************************************************************************************************************/ -#include "common/compress/gz/compress.h" +#include "common/compress/helper.h" #include "common/crypto/cipherBlock.h" #include "common/io/io.h" #include "common/io/bufferRead.h" @@ -196,7 +196,7 @@ testRun(void) StorageWrite *ceRepoFile = storageNewWriteP( storageRepoWrite(), strNewFmt(STORAGE_REPO_BACKUP "/%s/%s.gz", strPtr(repoFileReferenceFull), strPtr(repoFile1))); IoFilterGroup *filterGroup = ioWriteFilterGroup(storageWriteIo(ceRepoFile)); - ioFilterGroupAdd(filterGroup, gzCompressNew(3)); + ioFilterGroupAdd(filterGroup, compressFilter(compressTypeGz, 3)); ioFilterGroupAdd(filterGroup, cipherBlockNew(cipherModeEncrypt, cipherTypeAes256Cbc, BUFSTRDEF("badpass"), NULL)); storagePutP(ceRepoFile, BUFSTRDEF("acefile")); @@ -316,7 +316,7 @@ testRun(void) VariantList *paramList = varLstNew(); varLstAdd(paramList, varNewStr(repoFile1)); varLstAdd(paramList, varNewStr(repoFileReferenceFull)); - varLstAdd(paramList, varNewBool(false)); + varLstAdd(paramList, varNewUInt(compressTypeNone)); varLstAdd(paramList, varNewStrZ("protocol")); varLstAdd(paramList, varNewStrZ("9bc8ab2dda60ef4beed07d1e19ce0676d5edde67")); varLstAdd(paramList, varNewBool(false)); @@ -347,7 +347,7 @@ testRun(void) paramList = varLstNew(); varLstAdd(paramList, varNewStr(repoFile1)); varLstAdd(paramList, varNewStr(repoFileReferenceFull)); - varLstAdd(paramList, varNewBool(false)); + varLstAdd(paramList, varNewUInt(compressTypeNone)); varLstAdd(paramList, varNewStrZ("protocol")); varLstAdd(paramList, varNewStrZ("9bc8ab2dda60ef4beed07d1e19ce0676d5edde67")); varLstAdd(paramList, varNewBool(false)); diff --git a/test/src/module/common/compressTest.c b/test/src/module/common/compressTest.c index 80275592a..6a5493976 100644 --- a/test/src/module/common/compressTest.c +++ b/test/src/module/common/compressTest.c @@ -5,6 +5,7 @@ Test Compression #include "common/io/bufferRead.h" #include "common/io/bufferWrite.h" #include "common/io/io.h" +#include "storage/posix/storage.h" /*********************************************************************************************************************************** Compress data @@ -35,7 +36,7 @@ testCompress(IoFilter *compress, Buffer *decompressed, size_t inputSize, size_t } ioWriteClose(write); - memContextFree(((GzCompress *)ioFilterDriver(compress))->memContext); + ioFilterFree(compress); return compressed; } @@ -63,11 +64,107 @@ testDecompress(IoFilter *decompress, Buffer *compressed, size_t inputSize, size_ ioReadClose(read); bufFree(output); - memContextFree(((GzDecompress *)ioFilterDriver(decompress))->memContext); + ioFilterFree(decompress); return decompressed; } +/*********************************************************************************************************************************** +Standard test suite to be applied to all compression types +***********************************************************************************************************************************/ +static void +testSuite(CompressType type, const char *decompressCmd) +{ + const char *simpleData = "A simple string"; + Buffer *compressed = NULL; + Buffer *decompressed = bufNewC(simpleData, strlen(simpleData)); + + VariantList *compressParamList = varLstNew(); + varLstAdd(compressParamList, varNewUInt(1)); + + // Create default storage object for testing + Storage *storageTest = storagePosixNew(strNew(testPath()), STORAGE_MODE_FILE_DEFAULT, STORAGE_MODE_PATH_DEFAULT, true, NULL); + + TEST_TITLE("simple data"); + + TEST_ASSIGN( + compressed, + testCompress( + compressFilterVar(strNewFmt("%sCompress", strPtr(compressTypeStr(type))), compressParamList), decompressed, 1024, + 256 * 1024 * 1024), + "simple data - compress large in/large out buffer"); + + TEST_RESULT_BOOL( + bufEq(compressed, testCompress(compressFilter(type, 1), decompressed, 1024, 1)), true, + "simple data - compress large in/small out buffer"); + + TEST_RESULT_BOOL( + bufEq(compressed, testCompress(compressFilter(type, 1), decompressed, 1, 1024)), true, + "simple data - compress small in/large out buffer"); + + TEST_RESULT_BOOL( + bufEq(compressed, testCompress(compressFilter(type, 1), decompressed, 1, 1)), true, + "simple data - compress small in/small out buffer"); + + TEST_RESULT_BOOL( + bufEq( + decompressed, + testDecompress( + compressFilterVar(strNewFmt("%sDecompress", strPtr(compressTypeStr(type))), NULL), compressed, 1024, 1024)), + true, "simple data - decompress large in/large out buffer"); + + TEST_RESULT_BOOL( + bufEq(decompressed, testDecompress(decompressFilter(type), compressed, 1024, 1)), true, + "simple data - decompress large in/small out buffer"); + + TEST_RESULT_BOOL( + bufEq(decompressed, testDecompress(decompressFilter(type), compressed, 1, 1024)), true, + "simple data - decompress small in/large out buffer"); + + TEST_RESULT_BOOL( + bufEq(decompressed, testDecompress(decompressFilter(type), compressed, 1, 1)), true, + "simple data - decompress small in/small out buffer"); + + // ------------------------------------------------------------------------------------------------------------------------- + if (decompressCmd != NULL) + { + TEST_TITLE("compressed output can be decompressed with command-line tool"); + + storagePutP(storageNewWriteP(storageTest, STRDEF("test.cmp")), compressed); + TEST_SYSTEM_FMT("%s {[path]}/test.cmp > {[path]}/test.out", decompressCmd); + TEST_RESULT_BOOL(bufEq(decompressed, storageGetP(storageNewReadP(storageTest, STRDEF("test.out")))), true, "check output"); + } + + // ------------------------------------------------------------------------------------------------------------------------- + TEST_TITLE("error on no compression data"); + + TEST_ERROR(testDecompress(decompressFilter(type), bufNew(0), 1, 1), FormatError, "unexpected eof in compressed data"); + + // ------------------------------------------------------------------------------------------------------------------------- + TEST_TITLE("error on truncated compression data"); + + Buffer *truncated = bufNew(0); + bufCatSub(truncated, compressed, 0, bufUsed(compressed) - 1); + + TEST_RESULT_UINT(bufUsed(truncated), bufUsed(compressed) - 1, "check truncated buffer size"); + TEST_ERROR(testDecompress(decompressFilter(type), truncated, 512, 512), FormatError, "unexpected eof in compressed data"); + + // ------------------------------------------------------------------------------------------------------------------------- + TEST_TITLE("compress a large zero input buffer into small output buffer"); + + decompressed = bufNew(1024 * 1024 - 1); + memset(bufPtr(decompressed), 0, bufSize(decompressed)); + bufUsedSet(decompressed, bufSize(decompressed)); + + TEST_ASSIGN( + compressed, testCompress(compressFilter(type, 3), decompressed, bufSize(decompressed), 1024), + "zero data - compress large in/small out buffer"); + + TEST_RESULT_BOOL( + bufEq(decompressed, testDecompress(decompressFilter(type), compressed, bufSize(compressed), 1024 * 256)), true, + "zero data - decompress large in/small out buffer"); +} + /*********************************************************************************************************************************** Test Run ***********************************************************************************************************************************/ @@ -77,8 +174,14 @@ testRun(void) FUNCTION_HARNESS_VOID(); // ***************************************************************************************************************************** - if (testBegin("gzError")) + if (testBegin("gz")) { + // Run standard test suite + testSuite(compressTypeGz, "gzip -dc"); + + // ------------------------------------------------------------------------------------------------------------------------- + TEST_TITLE("gzError()"); + TEST_RESULT_INT(gzError(Z_OK), Z_OK, "check ok"); TEST_RESULT_INT(gzError(Z_STREAM_END), Z_STREAM_END, "check stream end"); TEST_ERROR(gzError(Z_NEED_DICT), AssertError, "zlib threw error: [2] need dictionary"); @@ -89,91 +192,73 @@ testRun(void) TEST_ERROR(gzError(Z_BUF_ERROR), AssertError, "zlib threw error: [-5] no space in buffer"); TEST_ERROR(gzError(Z_VERSION_ERROR), FormatError, "zlib threw error: [-6] incompatible version"); TEST_ERROR(gzError(999), AssertError, "zlib threw error: [999] unknown error"); - } - - // ***************************************************************************************************************************** - if (testBegin("GzCompress and GzDecompress")) - { - const char *simpleData = "A simple string"; - Buffer *compressed = NULL; - Buffer *decompressed = bufNewC(simpleData, strlen(simpleData)); - - VariantList *compressParamList = varLstNew(); - varLstAdd(compressParamList, varNewUInt(3)); - varLstAdd(compressParamList, varNewBool(false)); - - TEST_ASSIGN( - compressed, testCompress(gzCompressNewVar(compressParamList), decompressed, 1024, 1024), - "simple data - compress large in/large out buffer"); - - TEST_RESULT_BOOL( - bufEq(compressed, testCompress(gzCompressNew(3), decompressed, 1024, 1)), true, - "simple data - compress large in/small out buffer"); - - TEST_RESULT_BOOL( - bufEq(compressed, testCompress(gzCompressNew(3), decompressed, 1, 1024)), true, - "simple data - compress small in/large out buffer"); - - TEST_RESULT_BOOL( - bufEq(compressed, testCompress(gzCompressNew(3), decompressed, 1, 1)), true, - "simple data - compress small in/small out buffer"); - - TEST_RESULT_BOOL( - bufEq(decompressed, testDecompress(gzDecompressNew(), compressed, 1024, 1024)), true, - "simple data - decompress large in/large out buffer"); - - TEST_RESULT_BOOL( - bufEq(decompressed, testDecompress(gzDecompressNew(), compressed, 1024, 1)), true, - "simple data - decompress large in/small out buffer"); - - TEST_RESULT_BOOL( - bufEq(decompressed, testDecompress(gzDecompressNew(), compressed, 1, 1024)), true, - "simple data - decompress small in/large out buffer"); - - TEST_RESULT_BOOL( - bufEq(decompressed, testDecompress(gzDecompressNew(), compressed, 1, 1)), true, - "simple data - decompress small in/small out buffer"); // ------------------------------------------------------------------------------------------------------------------------- - TEST_TITLE("error on no compression data"); + TEST_TITLE("gzDecompressToLog() and gzCompressToLog()"); - TEST_ERROR(testDecompress(gzDecompressNew(), bufNew(0), 1, 1), FormatError, "unexpected eof in compressed data"); - - // ------------------------------------------------------------------------------------------------------------------------- - TEST_TITLE("error on truncated compression data"); - - Buffer *truncated = bufNew(0); - bufCatSub(truncated, compressed, 0, bufUsed(compressed) - 1); - - TEST_RESULT_UINT(bufUsed(truncated), bufUsed(compressed) - 1, "check truncated buffer size"); - TEST_ERROR(testDecompress(gzDecompressNew(), truncated, 512, 512), FormatError, "unexpected eof in compressed data"); - - // Compress a large zero input buffer into small output buffer - // ------------------------------------------------------------------------------------------------------------------------- - decompressed = bufNew(1024 * 1024 - 1); - memset(bufPtr(decompressed), 0, bufSize(decompressed)); - bufUsedSet(decompressed, bufSize(decompressed)); - - TEST_ASSIGN( - compressed, testCompress(gzCompressNew(3), decompressed, bufSize(decompressed), 1024), - "zero data - compress large in/small out buffer"); - - TEST_RESULT_BOOL( - bufEq(decompressed, testDecompress(gzDecompressNew(), compressed, bufSize(compressed), 1024 * 256)), true, - "zero data - decompress large in/small out buffer"); - } - - // ***************************************************************************************************************************** - if (testBegin("gzDecompressToLog() and gzCompressToLog()")) - { GzDecompress *decompress = (GzDecompress *)ioFilterDriver(gzDecompressNew()); TEST_RESULT_STR_Z(gzDecompressToLog(decompress), "{inputSame: false, done: false, availIn: 0}", "format object"); decompress->inputSame = true; decompress->done = true; + TEST_RESULT_STR_Z(gzDecompressToLog(decompress), "{inputSame: true, done: true, availIn: 0}", "format object"); } + // Test everything in the helper that is not tested in the individual compression type tests + // ***************************************************************************************************************************** + if (testBegin("helper")) + { + TEST_TITLE("compressTypeEnum()"); + + TEST_RESULT_UINT(compressTypeEnum(STRDEF("none")), compressTypeNone, "none enum"); + TEST_RESULT_UINT(compressTypeEnum(STRDEF("gz")), compressTypeGz, "gz enum"); + TEST_ERROR(compressTypeEnum(strNew(BOGUS_STR)), AssertError, "invalid compression type 'BOGUS'"); + + // ------------------------------------------------------------------------------------------------------------------------- + TEST_TITLE("compressTypePresent()"); + + TEST_RESULT_VOID(compressTypePresent(compressTypeNone), "type none always present"); + TEST_ERROR(compressTypePresent(compressTypeZst), OptionInvalidValueError, "pgBackRest not compiled with zst support"); + + // ------------------------------------------------------------------------------------------------------------------------- + TEST_TITLE("compressTypeFromName()"); + + TEST_RESULT_UINT(compressTypeFromName(STRDEF("file")), compressTypeNone, "type from name"); + TEST_RESULT_UINT(compressTypeFromName(STRDEF("file.gz")), compressTypeGz, "type from name"); + + // ------------------------------------------------------------------------------------------------------------------------- + TEST_TITLE("compressFilterVar()"); + + TEST_RESULT_PTR(compressFilterVar(STRDEF("BOGUS"), 0), NULL, "no filter match"); + + // ------------------------------------------------------------------------------------------------------------------------- + TEST_TITLE("compressExtStr()"); + + TEST_RESULT_STR_Z(compressExtStr(compressTypeNone), "", "one ext"); + TEST_RESULT_STR_Z(compressExtStr(compressTypeGz), ".gz", "gz ext"); + + // ------------------------------------------------------------------------------------------------------------------------- + TEST_TITLE("compressExtCat()"); + + String *file = strNew("file"); + TEST_RESULT_VOID(compressExtCat(file, compressTypeGz), "cat gz ext"); + TEST_RESULT_STR_Z(file, "file.gz", " check gz ext"); + + // ------------------------------------------------------------------------------------------------------------------------- + TEST_TITLE("compressExtStrip()"); + + TEST_ERROR(compressExtStrip(STRDEF("file"), compressTypeGz), FormatError, "'file' must have '.gz' extension"); + TEST_RESULT_STR_Z(compressExtStrip(STRDEF("file"), compressTypeNone), "file", "nothing to strip"); + TEST_RESULT_STR_Z(compressExtStrip(STRDEF("file.gz"), compressTypeGz), "file", "strip gz"); + + // ------------------------------------------------------------------------------------------------------------------------- + TEST_TITLE("compressLevelDefault()"); + + TEST_RESULT_INT(compressLevelDefault(compressTypeNone), 0, "none level=0"); + TEST_RESULT_INT(compressLevelDefault(compressTypeGz), 6, "gz level=6"); + } + FUNCTION_HARNESS_RESULT_VOID(); } diff --git a/test/src/module/config/loadTest.c b/test/src/module/config/loadTest.c index 424f231a4..4f46c4f9c 100644 --- a/test/src/module/config/loadTest.c +++ b/test/src/module/config/loadTest.c @@ -264,9 +264,52 @@ testRun(void) TEST_RESULT_VOID(harnessCfgLoad(cfgCmdArchiveGet, argList), "valid bucket name"); TEST_RESULT_STR_Z(cfgOptionStr(cfgOptRepoS3Bucket), "cool-bucket", " check bucket value"); + TEST_RESULT_BOOL(cfgOptionValid(cfgOptCompress), false, " compress is not valid"); unsetenv("PGBACKREST_REPO1_S3_KEY"); unsetenv("PGBACKREST_REPO1_S3_KEY_SECRET"); + + // ------------------------------------------------------------------------------------------------------------------------- + TEST_TITLE("compress-type=none when compress=n"); + + argList = strLstNew(); + strLstAddZ(argList, "--" CFGOPT_STANZA "=db"); + strLstAddZ(argList, "--no-" CFGOPT_COMPRESS); + + TEST_RESULT_VOID(harnessCfgLoad(cfgCmdArchivePush, argList), "load config"); + TEST_RESULT_STR_Z(cfgOptionStr(cfgOptCompressType), "none", " compress-type=none"); + TEST_RESULT_INT(cfgOptionInt(cfgOptCompressLevel), 0, " compress-level=0"); + TEST_RESULT_BOOL(cfgOptionValid(cfgOptCompress), false, " compress is not valid"); + + // ------------------------------------------------------------------------------------------------------------------------- + TEST_TITLE("compress-type=gz when compress=y"); + + argList = strLstNew(); + strLstAddZ(argList, "--" CFGOPT_STANZA "=db"); + strLstAddZ(argList, "--" CFGOPT_COMPRESS); + strLstAddZ(argList, "--" CFGOPT_COMPRESS_LEVEL "=9"); + + TEST_RESULT_VOID(harnessCfgLoad(cfgCmdArchivePush, argList), "load config"); + TEST_RESULT_STR_Z(cfgOptionStr(cfgOptCompressType), "gz", " compress-type=gz"); + TEST_RESULT_INT(cfgOptionInt(cfgOptCompressLevel), 9, " compress-level=9"); + TEST_RESULT_BOOL(cfgOptionValid(cfgOptCompress), false, " compress is not valid"); + + // ------------------------------------------------------------------------------------------------------------------------- + TEST_TITLE("warn when compress-type and compress both set"); + + argList = strLstNew(); + strLstAddZ(argList, "--" CFGOPT_STANZA "=db"); + strLstAddZ(argList, "--no-" CFGOPT_COMPRESS); + strLstAddZ(argList, "--" CFGOPT_COMPRESS_TYPE "=gz"); + + TEST_RESULT_VOID(harnessCfgLoad(cfgCmdArchivePush, argList), "load config"); + TEST_RESULT_STR_Z(cfgOptionStr(cfgOptCompressType), "gz", " compress-type=gz"); + TEST_RESULT_INT(cfgOptionInt(cfgOptCompressLevel), 6, " compress-level=6"); + TEST_RESULT_BOOL(cfgOptionValid(cfgOptCompress), false, " compress is not valid"); + + harnessLogResult( + "P00 WARN: 'compress' and 'compress-type' options should not both be set\n" + " HINT: 'compress-type' is preferred and 'compress' is deprecated."); } // ***************************************************************************************************************************** diff --git a/test/src/module/info/manifestTest.c b/test/src/module/info/manifestTest.c index 9d9451522..ab23f0e22 100644 --- a/test/src/module/info/manifestTest.c +++ b/test/src/module/info/manifestTest.c @@ -115,6 +115,7 @@ testRun(void) "option-archive-copy=false\n" \ "option-checksum-page=false\n" \ "option-compress=false\n" \ + "option-compress-type=\"none\"\n" \ "option-hardlink=false\n" \ "option-online=false\n" @@ -132,11 +133,13 @@ testRun(void) #define TEST_MANIFEST_OPTION_ONLINE_FALSE \ "option-compress=false\n" \ + "option-compress-type=\"none\"\n" \ "option-hardlink=false\n" \ "option-online=false\n" #define TEST_MANIFEST_OPTION_ONLINE_TRUE \ "option-compress=false\n" \ + "option-compress-type=\"none\"\n" \ "option-hardlink=false\n" \ "option-online=true\n" @@ -1173,7 +1176,7 @@ testRun(void) TEST_RESULT_VOID(manifestBuildValidate(manifest, true, 1482182860, false), "validate manifest"); TEST_RESULT_UINT(manifest->data.backupTimestampCopyStart, 1482182861, "check copy start"); TEST_RESULT_BOOL(varBool(manifest->data.backupOptionDelta), true, "check delta"); - TEST_RESULT_BOOL(manifest->data.backupOptionCompress, false, "check compress"); + TEST_RESULT_UINT(manifest->data.backupOptionCompressType, compressTypeNone, "check compress"); // ------------------------------------------------------------------------------------------------------------------------- TEST_TITLE("timestamp in past does not force delta"); @@ -1194,7 +1197,7 @@ testRun(void) TEST_RESULT_VOID(manifestBuildValidate(manifest, false, 1482182859, true), "validate manifest"); TEST_RESULT_UINT(manifest->data.backupTimestampCopyStart, 1482182859, "check copy start"); TEST_RESULT_BOOL(varBool(manifest->data.backupOptionDelta), true, "check delta"); - TEST_RESULT_BOOL(manifest->data.backupOptionCompress, true, "check compress"); + TEST_RESULT_UINT(manifest->data.backupOptionCompressType, compressTypeGz, "check compress"); TEST_RESULT_LOG("P00 WARN: file 'PG_VERSION' has timestamp in the future, enabling delta checksum"); } @@ -1221,7 +1224,8 @@ testRun(void) "[backup:option]\n" \ "option-archive-check=false\n" \ "option-archive-copy=false\n" \ - "option-compress=false\n" + "option-compress=false\n" \ + "option-compress-type=\"none\"\n" #define TEST_MANIFEST_HEADER_POST \ "option-hardlink=false\n" \ @@ -1566,6 +1570,7 @@ testRun(void) "option-archive-check=true\n" "option-archive-copy=true\n" "option-compress=false\n" + "option-compress-type=\"none\"\n" "option-hardlink=false\n" "option-online=false\n" "\n" @@ -1651,6 +1656,7 @@ testRun(void) "option-compress=true\n" \ "option-compress-level=3\n" \ "option-compress-level-network=6\n" \ + "option-compress-type=\"gz\"\n" \ "option-delta=false\n" \ "option-hardlink=true\n" \ "option-online=false\n" \ diff --git a/test/src/module/storage/remoteTest.c b/test/src/module/storage/remoteTest.c index 135d0be99..e7c866ebf 100644 --- a/test/src/module/storage/remoteTest.c +++ b/test/src/module/storage/remoteTest.c @@ -447,8 +447,8 @@ testRun(void) ioFilterGroupAdd(filterGroup, pageChecksumNew(0, PG_SEGMENT_PAGE_DEFAULT, 0)); ioFilterGroupAdd(filterGroup, cipherBlockNew(cipherModeEncrypt, cipherTypeAes256Cbc, BUFSTRZ("x"), NULL)); ioFilterGroupAdd(filterGroup, cipherBlockNew(cipherModeDecrypt, cipherTypeAes256Cbc, BUFSTRZ("x"), NULL)); - ioFilterGroupAdd(filterGroup, gzCompressNew(3)); - ioFilterGroupAdd(filterGroup, gzDecompressNew()); + ioFilterGroupAdd(filterGroup, compressFilter(compressTypeGz, 3)); + ioFilterGroupAdd(filterGroup, decompressFilter(compressTypeGz)); varLstAdd(paramList, ioFilterGroupParamAll(filterGroup)); TEST_RESULT_BOOL(