pgBackRest 2.45 commit log

v2.44: Remove PostgreSQL 9.0/9.1/9.2 Support

commit   : 053468bfb156a8ecbd5d0325d35141056c89ec52    
  
author   : David Steele <[email protected]>    
date     : Mon, 30 Jan 2023 09:15:44 +0700    
  
committer: David Steele <[email protected]>    
date     : Mon, 30 Jan 2023 09:15:44 +0700    

Click here for diff

Improvements:  
  
* Remove support for PostgreSQL 9.0/9.1/9.2. (Reviewed by Stefan Fercot.)  
* Restore errors when no backup matches the current version of PostgreSQL. (Contributed by Stefan Fercot. Reviewed by David Steele. Suggested by Soulou.)  
* Add compress-level range checking for each compress-type. (Reviewed by Stefan Fercot. Suggested by gkleen, ViperRu.)  
  
Documentation Improvements:  
  
* Add warning about enabling "hierarchical namespace" on Azure storage. (Reviewed by Stefan Fercot. Suggested by Vojtech Galda, Pluggi, asjonos.)  
* Add replacement for linefeeds in monitoring example. (Reviewed by Stefan Fercot. Suggested by rudonx, gmustdie, Ivan Shelestov.)  
* Clarify target-action behavior on various PostgreSQL versions. (Contributed by Chris Bandy. Reviewed by David Steele, Anton Kurochkin, Stefan Fercot. Suggested by Anton Kurochkin, Chris Bandy.)  
* Updates and clarifications to index page. (Reviewed by Stefan Fercot.)  
* Add dark mode to the website. (Suggested by Stephen Frost.)  

M CONTRIBUTING.md
M README.md
M doc/release.pl
M doc/resource/exe.cache
M doc/resource/git-history.cache
M doc/xml/auto/metric-coverage-report.auto.xml
M doc/xml/release.xml
M meson.build
M src/build/configure.ac
M src/configure
M src/version.h
M test/code-count/file-type.yaml

Add --no-back-trace option to test.pl.

commit   : a28f3d49c23d7dbd8873d07b7d513b6b7e59345a    
  
author   : David Steele <[email protected]>    
date     : Sat, 28 Jan 2023 18:55:53 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 28 Jan 2023 18:55:53 +0700    

Click here for diff

Running valgrind and backtrace together has been causing tests to timeout in CI, mostly likely due to limited resources. This has not been a problem in normal development environments.  
  
Since it is still important to run backtraces for debugging, split the u22 test that was doing all this work to run coverage and backtrace together and valgrind-only as a separate test. As a bonus these tests run faster separately and since they run in parallel the total execution time is faster.  

M .github/workflows/test.yml
M test/lib/pgBackRestTest/Common/JobTest.pm
M test/src/build/config/config.yaml
M test/src/build/help/help.xml
M test/src/command/test/build.c
M test/src/command/test/build.h
M test/src/command/test/test.c
M test/src/command/test/test.h
M test/src/main.c
M test/src/module/test/testTest.c
M test/test.pl

Skip test modules in coverage report.

commit   : 16c625353db2569ebcc0c28e09d76a9811d2a241    
  
author   : David Steele <[email protected]>    
date     : Sat, 28 Jan 2023 16:22:04 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 28 Jan 2023 16:22:04 +0700    

Click here for diff

Coverage of the test code is useful during development but it does not seem worth adding it to the core code coverage report.  

M test/lib/pgBackRestTest/Common/CoverageTest.pm

Fix permissions on source files.

commit   : d5ef4ce747f0d743b76c5fe05c4e4a02cdd9bd09    
  
author   : David Steele <[email protected]>    
date     : Sat, 28 Jan 2023 11:01:29 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 28 Jan 2023 11:01:29 +0700    

Click here for diff

M src/protocol/helper.c
M src/storage/posix/write.c
M test/src/module/common/lockTest.c

Add warning about enabling "hierarchical namespace" on Azure storage.

commit   : 3aea997df5ace85251d0579ccbe13fa938f587ee    
  
author   : David Steele <[email protected]>    
date     : Wed, 25 Jan 2023 10:59:13 +0700    
  
committer: GitHub <[email protected]>    
date     : Wed, 25 Jan 2023 10:59:13 +0700    

Click here for diff

If this feature is enabled expire will fail since directories need to be deleted separately.
  

  
Ideally we would add support for this feature but for now we'll just document the issue.

M doc/xml/release.xml
M doc/xml/user-guide.xml

Add dark mode to the website.

commit   : ed818b31867c640d72ef829dd36cd0a7feff12df    
  
author   : David Steele <[email protected]>    
date     : Wed, 25 Jan 2023 10:35:03 +0700    
  
committer: David Steele <[email protected]>    
date     : Wed, 25 Jan 2023 10:35:03 +0700    

Click here for diff

The colors could use more tweaking but at least the website will no longer blind users running dark mode.  

M doc/resource/html/default.css
M doc/xml/release.xml

Add manifest test harness.

commit   : 1da2666a9ef41457ac64ddf2cabccc93b3b05aeb    
  
author   : David Steele <[email protected]>    
date     : Sat, 21 Jan 2023 14:03:27 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 21 Jan 2023 14:03:27 +0700    

Click here for diff

These macros make adding paths/files/etc to a manifest simpler and easier to read.  

M src/info/manifest.h
M test/define.yaml
A test/src/common/harnessManifest.c
A test/src/common/harnessManifest.h
M test/src/module/command/backupTest.c
M test/src/module/command/restoreTest.c
M test/src/module/info/manifestTest.c

Block-level incremental backup.

commit   : 912eec63bb971c10a545e582f628c982f4e00005    
  
author   : David Steele <[email protected]>    
date     : Fri, 20 Jan 2023 16:48:57 +0700    
  
committer: GitHub <[email protected]>    
date     : Fri, 20 Jan 2023 16:48:57 +0700    

Click here for diff

The primary goal of the block incremental backup is to save space in the repository by only storing changed parts of a file rather than the entire file. This implementation is focused on restore performance more than saving space in the repository, though there may be substantial savings depending on the workload.
  

  
The repo-block option enables the feature (when repo-bundle is already enabled). The block size is determined based on the file size and age. Very old or very small files will not use block incremental.

M doc/xml/release.xml
M src/Makefile.in
M src/build/config/config.yaml
M src/build/help/help.xml
M src/command/backup/backup.c
A src/command/backup/blockIncr.c
A src/command/backup/blockIncr.h
A src/command/backup/blockMap.c
A src/command/backup/blockMap.h
M src/command/backup/common.c
M src/command/backup/common.h
M src/command/backup/file.c
M src/command/backup/file.h
M src/command/backup/protocol.c
M src/command/info/info.c
M src/command/remote/remote.c
A src/command/restore/deltaMap.c
A src/command/restore/deltaMap.h
M src/command/restore/file.c
M src/command/restore/file.h
M src/command/restore/protocol.c
M src/command/restore/restore.c
A src/common/io/chunkedRead.c
A src/common/io/chunkedRead.h
A src/common/io/filter/chunk.c
A src/common/io/filter/chunk.h
M src/common/io/write.c
M src/config/config.auto.h
M src/config/parse.auto.c.inc
M src/config/parse.c
M src/info/infoBackup.c
M src/info/infoBackup.h
M src/info/manifest.c
M src/info/manifest.h
M src/meson.build
M test/define.yaml
M test/lib/pgBackRestTest/Env/Host/HostBackupTest.pm
M test/lib/pgBackRestTest/Env/HostEnvTest.pm
M test/lib/pgBackRestTest/Module/Real/RealAllTest.pm
M test/src/module/command/backupTest.c
M test/src/module/command/infoTest.c
M test/src/module/command/restoreTest.c
M test/src/module/common/ioTest.c
M test/src/module/config/parseTest.c
M test/src/module/info/infoBackupTest.c
M test/src/module/info/manifestTest.c
M test/src/module/performance/typeTest.c

Fix comment indentation and wrapping.

commit   : 008a18555c6474be4327bfe0830ef13166a18ece    
  
author   : David Steele <[email protected]>    
date     : Fri, 20 Jan 2023 15:44:01 +0700    
  
committer: David Steele <[email protected]>    
date     : Fri, 20 Jan 2023 15:44:01 +0700    

Click here for diff

M src/common/io/http/response.c
M src/common/io/socket/common.c
M src/common/io/tls/server.c
M src/info/infoBackup.c
M src/protocol/helper.c
M src/storage/posix/write.c
M src/storage/s3/write.c
M test/src/module/common/lockTest.c

Fix incorrect FUNCTION_TEST_END() in hrnPgWalToBuffer().

commit   : bfc9a5c33e032ee7f95180cafcec07ce19e11aa9    
  
author   : David Steele <[email protected]>    
date     : Sat, 14 Jan 2023 18:01:48 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 14 Jan 2023 18:01:48 +0700    

Click here for diff

M test/src/common/harnessPostgres.c

Reduce log level of pgVersionFromStr() and pgVersionToStr().

commit   : ccee5c0fb1653f00e74de13d917a24b8b3506c22    
  
author   : David Steele <[email protected]>    
date     : Sat, 14 Jan 2023 17:12:15 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 14 Jan 2023 17:12:15 +0700    

Click here for diff

M src/postgres/interface.c

Simply return in pgVersionToStr().

commit   : 596c62c54e375fd25e7e34e9604b47ecc1ab73ff    
  
author   : David Steele <[email protected]>    
date     : Sat, 14 Jan 2023 15:25:25 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 14 Jan 2023 15:25:25 +0700    

Click here for diff

M src/postgres/interface.c

Refactor common/ini module to remove callbacks and duplicated code.

commit   : 34e4835ff30e7f44cb36b3f1ed29d670e74a75ca    
  
author   : David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 21:24:28 +0700    
  
committer: GitHub <[email protected]>    
date     : Thu, 12 Jan 2023 21:24:28 +0700    

Click here for diff

The callbacks in iniLoad() made the downstream code more complicated than it needed to be so use an iterator model instead.
  

  
Combine the two functions that were used to load the ini data to remove code duplication. In theory it would be nice to use iniValueNext() in the config/parse module rather than loading a KeyValue store but this would mean a big change to the parser, which does not seem worthwhile at this time.

M doc/xml/release.xml
M src/common/ini.c
M src/common/ini.h
M src/config/parse.c
M src/info/info.c
M test/define.yaml
M test/src/common/harnessInfo.c
M test/src/module/common/iniTest.c
M test/src/module/performance/typeTest.c

Audit mem contexts returned from functions into the calling context.

commit   : 9ca492cecfd40516b8815080af23ee3e64efc22a    
  
author   : David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 17:36:57 +0700    
  
committer: David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 17:36:57 +0700    

Click here for diff

It is possible for functions to accidentally leak child contexts into the calling context, which may use a lot of memory depending on the use case and where it happens.  
  
Use the function return type to determine what should be returned and error when something else is returned. Add FUNCTION_AUDIT_*() macros to handle exceptions.  
  
This checking is only performed during unit tests on the code being covered by the specific unit test.  
  
Note that this does not work yet for memory allocations, i.e. memNew(). These are pretty rare so are not as much of an issue and they can be added in the future.  

M src/command/archive/get/file.c
M src/command/archive/get/get.c
M src/command/archive/push/file.c
M src/command/archive/push/push.c
M src/command/backup/backup.c
M src/command/backup/pageChecksum.c
M src/command/check/check.c
M src/command/info/info.c
M src/command/repo/ls.c
M src/command/restore/restore.c
M src/command/verify/verify.c
M src/common/compress/bz2/compress.c
M src/common/compress/bz2/decompress.c
M src/common/compress/gz/compress.c
M src/common/compress/gz/decompress.c
M src/common/compress/lz4/compress.c
M src/common/compress/lz4/decompress.c
M src/common/compress/zst/compress.c
M src/common/compress/zst/decompress.c
M src/common/crypto/cipherBlock.c
M src/common/crypto/hash.c
M src/common/debug.h
M src/common/io/bufferRead.c
M src/common/io/bufferWrite.c
M src/common/io/fdRead.c
M src/common/io/fdWrite.c
M src/common/io/filter/buffer.c
M src/common/io/filter/sink.c
M src/common/io/filter/size.c
M src/common/io/socket/client.c
M src/common/io/socket/server.c
M src/common/io/socket/session.c
M src/common/io/tls/client.c
M src/common/io/tls/server.c
M src/common/io/tls/session.c
M src/common/lock.c
M src/common/memContext.c
M src/common/memContext.h
M src/common/type/keyValue.c
M src/common/type/object.h
M src/common/type/pack.c
M src/common/type/pack.h
M src/common/type/stringList.h
M src/common/type/variant.c
M src/common/type/variantList.h
M src/common/type/xml.c
M src/config/load.c
M src/config/parse.c
M src/db/db.c
M src/db/helper.c
M src/info/info.c
M src/info/infoBackup.c
M src/info/infoPg.c
M src/info/manifest.c
M src/protocol/helper.c
M src/protocol/server.c
M src/storage/azure/read.c
M src/storage/azure/storage.c
M src/storage/azure/write.c
M src/storage/gcs/read.c
M src/storage/gcs/storage.c
M src/storage/gcs/write.c
M src/storage/posix/read.c
M src/storage/posix/storage.c
M src/storage/posix/write.c
M src/storage/read.c
M src/storage/remote/protocol.c
M src/storage/remote/read.c
M src/storage/remote/storage.c
M src/storage/remote/write.c
M src/storage/s3/read.c
M src/storage/s3/storage.c
M src/storage/s3/write.c
M src/storage/storage.c
M src/storage/write.c
M test/define.yaml
M test/src/command/test/define.c
M test/src/command/test/test.c
M test/src/module/common/memContextTest.c

Refactor logging functions to never allocate memory.

commit   : de1dfb66ca022e7ab8370503eacda94629f6ae3f    
  
author   : David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 17:14:36 +0700    
  
committer: David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 17:14:36 +0700    

Click here for diff

Allocating memory made these functions simpler but it meant that memory was leaking into the calling context when logging was enabled. It is not clear that this was an issue but it seems that trace level logging could result it a lot of memory usage depending on the use case.  
  
This also makes it possible to audit allocations returned to the calling context, which will be done in a followup commit.  
  
Also rename objToLog() to objNameToLog() since it seemed logical to name the new function objToLog().  

M CONTRIBUTING.md
M doc/xml/contributing.xml
M src/Makefile.in
M src/build/common/yaml.h
M src/command/backup/backup.c
M src/command/backup/pageChecksum.c
M src/command/info/info.c
M src/command/restore/restore.c
M src/command/verify/verify.c
M src/common/compress/bz2/compress.c
M src/common/compress/bz2/decompress.c
M src/common/compress/gz/compress.c
M src/common/compress/gz/decompress.c
M src/common/compress/lz4/compress.c
M src/common/compress/lz4/decompress.c
M src/common/compress/zst/compress.c
M src/common/compress/zst/decompress.c
M src/common/crypto/cipherBlock.c
M src/common/crypto/hash.c
M src/common/debug.c
M src/common/debug.h
M src/common/error.h
M src/common/exec.h
M src/common/ini.h
M src/common/io/bufferRead.c
M src/common/io/bufferWrite.c
M src/common/io/client.c
M src/common/io/client.h
M src/common/io/client.intern.h
M src/common/io/fdRead.c
M src/common/io/fdWrite.c
M src/common/io/filter/buffer.c
M src/common/io/filter/filter.c
M src/common/io/filter/filter.h
M src/common/io/filter/filter.intern.h
M src/common/io/filter/group.c
M src/common/io/filter/group.h
M src/common/io/filter/sink.c
M src/common/io/filter/size.c
M src/common/io/http/client.c
M src/common/io/http/client.h
M src/common/io/http/header.c
M src/common/io/http/header.h
M src/common/io/http/query.c
M src/common/io/http/query.h
M src/common/io/http/request.c
M src/common/io/http/request.h
M src/common/io/http/response.c
M src/common/io/http/response.h
M src/common/io/http/session.h
M src/common/io/http/url.c
M src/common/io/http/url.h
M src/common/io/read.h
M src/common/io/read.intern.h
M src/common/io/server.c
M src/common/io/server.h
M src/common/io/server.intern.h
M src/common/io/session.c
M src/common/io/session.h
M src/common/io/session.intern.h
M src/common/io/socket/client.c
M src/common/io/socket/server.c
M src/common/io/socket/session.c
M src/common/io/tls/client.c
M src/common/io/tls/server.c
M src/common/io/tls/session.c
M src/common/io/write.h
M src/common/io/write.intern.h
M src/common/memContext.h
M src/common/regExp.h
M src/common/type/blob.h
M src/common/type/buffer.c
M src/common/type/buffer.h
M src/common/type/json.c
M src/common/type/json.h
M src/common/type/keyValue.h
M src/common/type/list.c
M src/common/type/list.h
M src/common/type/pack.c
M src/common/type/pack.h
M src/common/type/string.c
M src/common/type/string.h
M src/common/type/stringId.h
M src/common/type/stringList.c
M src/common/type/stringList.h
A src/common/type/stringStatic.c
A src/common/type/stringStatic.h
M src/common/type/variant.c
M src/common/type/variant.h
M src/common/type/variantList.h
M src/common/type/xml.h
M src/common/wait.h
M src/db/db.c
M src/db/db.h
M src/db/helper.h
M src/info/info.h
M src/info/infoArchive.h
M src/info/infoBackup.c
M src/info/infoBackup.h
M src/info/infoPg.c
M src/info/infoPg.h
M src/info/manifest.h
M src/meson.build
M src/postgres/client.c
M src/postgres/client.h
M src/postgres/interface.c
M src/postgres/interface.h
M src/protocol/client.c
M src/protocol/client.h
M src/protocol/command.c
M src/protocol/command.h
M src/protocol/parallel.c
M src/protocol/parallel.h
M src/protocol/parallelJob.c
M src/protocol/parallelJob.h
M src/protocol/server.c
M src/protocol/server.h
M src/storage/azure/read.c
M src/storage/azure/storage.intern.h
M src/storage/azure/write.c
M src/storage/gcs/read.c
M src/storage/gcs/storage.intern.h
M src/storage/gcs/write.c
M src/storage/info.h
M src/storage/iterator.c
M src/storage/iterator.h
M src/storage/list.c
M src/storage/list.h
M src/storage/posix/read.c
M src/storage/posix/storage.intern.h
M src/storage/posix/write.c
M src/storage/read.c
M src/storage/read.h
M src/storage/remote/read.c
M src/storage/remote/storage.intern.h
M src/storage/remote/write.c
M src/storage/s3/read.c
M src/storage/s3/storage.intern.h
M src/storage/s3/write.c
M src/storage/storage.c
M src/storage/storage.h
M src/storage/storage.intern.h
M src/storage/write.c
M src/storage/write.h
M test/define.yaml
M test/src/command/test/build.h
M test/src/module/common/compressTest.c
M test/src/module/common/debugOnTest.c
M test/src/module/common/ioHttpTest.c
M test/src/module/common/ioTlsTest.c
M test/src/module/common/typeBufferTest.c
M test/src/module/common/typeListTest.c
M test/src/module/common/typePackTest.c
M test/src/module/common/typeStringTest.c
M test/src/module/common/typeVariantTest.c
M test/src/module/info/infoBackupTest.c
M test/src/module/info/infoPgTest.c
M test/src/module/postgres/interfaceTest.c
M test/src/module/protocol/protocolTest.c
M test/src/module/storage/azureTest.c
M test/src/module/storage/s3Test.c
M test/src/module/test/testTest.c

Remove mostly useless mem context in storageRemoteInfoProtocolPut().

commit   : 890b9d009390e472bd96ac74f6b347d7b1cc5a12    
  
author   : David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 15:04:49 +0700    
  
committer: David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 15:04:49 +0700    

Click here for diff

Maybe this once had a deeper purpose but now at least it is just used to avoid a few trivial allocations. If we really wanted to do that a flag would be better but it does not seem worth the trouble.  

M src/storage/remote/protocol.c

Fix leak in protocolServer().

commit   : 6ec2241e15c4d6d6c8fe9a09c2cd562631ba8423    
  
author   : David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 14:24:20 +0700    
  
committer: David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 14:24:20 +0700    

Click here for diff

M src/protocol/helper.c

Fix leaks in db module.

commit   : 9d42435ffbaa20febae5a9a5c62446a0fe5d0090    
  
author   : David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 14:22:09 +0700    
  
committer: David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 14:22:09 +0700    

Click here for diff

M src/db/db.c

Fix leak in configOptionRemote().

commit   : 7f7d515441ee28e10d5f2aa63f986128638342bc    
  
author   : David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 14:19:10 +0700    
  
committer: David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 14:19:10 +0700    

Click here for diff

M src/config/protocol.c

Minor optimizations on config/parse module.

commit   : 123d5e77ae188dfe75a431fcb131dcca1b1913bb    
  
author   : David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 14:17:48 +0700    
  
committer: David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 14:17:48 +0700    

Click here for diff

M src/config/parse.c

Enhance libbacktrace to handle incomplete stack traces.

commit   : 0becb6da3147e7992b7e91f78032a961e7c352be    
  
author   : David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 10:22:26 +0700    
  
committer: David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 10:22:26 +0700    

Click here for diff

This fills in backtrace info at the bottom of the call stack when the stack trace is incomplete due to testing. This does not affect release builds, which is why it did not make the first cut, but it turns out to be useful for testing and barely changes the release code (when we do release this).  
  
The recursion test in common/error was simplified because it would now return a very large trace.  

M src/common/stackTrace.c
M test/define.yaml
A test/src/common/harnessStackTrace.c
A test/src/common/harnessStackTrace.h
M test/src/module/common/errorTest.c
M test/src/module/common/stackTraceTest.c
M test/src/module/test/testTest.c

Update RHEL user guide to PostgreSQL 11/12.

commit   : 57fc4aaeb9b2aea84fce5bb813980116ad01dbe7    
  
author   : David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 09:06:01 +0700    
  
committer: David Steele <[email protected]>    
date     : Thu, 12 Jan 2023 09:06:01 +0700    

Click here for diff

PostgreSQL 10 has expired from the PGDG yum repository.  

M doc/xml/user-guide.xml

Revert macro changes from 38d32045.

commit   : 74ca9b50bbdbb33dafedcc8e1230a83cb619c3f5    
  
author   : David Steele <[email protected]>    
date     : Wed, 11 Jan 2023 19:43:10 +0700    
  
committer: David Steele <[email protected]>    
date     : Wed, 11 Jan 2023 19:43:10 +0700    

Click here for diff

This seemed like it would be cleaner but an important detail was missed (logAny) and it does not seem simpler when factoring that back in.  
  
Keep the removal of the extraneous semicolons and all the downstream changes required by the removal.  

M src/common/debug.h

Fix error detail output to stderr.

commit   : 9347313cbf1dbd5590b7ca481bd37bcb5de14b00    
  
author   : David Steele <[email protected]>    
date     : Wed, 11 Jan 2023 19:16:31 +0700    
  
committer: David Steele <[email protected]>    
date     : Wed, 11 Jan 2023 19:16:31 +0700    

Click here for diff

The error detail should be output when the error is an assert (this part was working) or the log level is at least debug. In cases where log-level-console was at least debug but log-level-stderr was not the detail was lost.  
  
Improve the range checking to output error detail to stderr when log-level-console is at least debug.  

M src/common/log.c
M test/src/module/common/logTest.c

Improve libbacktrace implementation.

commit   : c8264291238e0bd199e4babab7013060e7fcba7d    
  
author   : David Steele <[email protected]>    
date     : Wed, 11 Jan 2023 11:19:26 +0700    
  
committer: David Steele <[email protected]>    
date     : Wed, 11 Jan 2023 11:19:26 +0700    

Click here for diff

The libbacktrace feature has not been working since the move to meson because libbacktrace detection was not added to the meson build. Add libbacktrace to meson and improve the feature so that it can be compiled into release builds.  
  
The prior implementation fetched line numbers with each stack trace push. Not only was this slow but it missed any functions that were not being tracked on our stack.  
  
Instead just examine the backtrace when an error happens and merge it with the info we have on our stack. If the backtrace is not available then the output remains as before.  
  
Also remove --backtrace from test.pl since the library is now auto-detected.  
  
Leave this library out of the production build for now to give it a little time to shake out in testing.  

M .github/workflows/symbol.out
M meson.build
M src/common/stackTrace.c
M src/common/stackTrace.h
M src/main.c
M src/meson.build
M test/lib/pgBackRestTest/Common/JobTest.pm
M test/lib/pgBackRestTest/Common/VmTest.pm
M test/src/command/test/build.c
M test/src/common/harnessDebug.h
M test/src/meson.build
M test/src/module/common/errorTest.c
M test/src/module/common/stackTraceTest.c
M test/src/module/test/testTest.c
M test/src/test.c
M test/test.pl

Fix leak in jsonReadVarRecurse().

commit   : 0dd2997714ed31b4a005fc0061048f3697c9ea1a    
  
author   : David Steele <[email protected]>    
date     : Tue, 10 Jan 2023 11:45:48 +0700    
  
committer: David Steele <[email protected]>    
date     : Tue, 10 Jan 2023 11:45:48 +0700    

Click here for diff

M src/common/type/json.c

Fix leak in archivePushDropWarning().

commit   : 675b4ae251564742e23a9e6acdfb1d764b9b159d    
  
author   : David Steele <[email protected]>    
date     : Tue, 10 Jan 2023 11:17:08 +0700    
  
committer: David Steele <[email protected]>    
date     : Tue, 10 Jan 2023 11:17:08 +0700    

Click here for diff

M src/command/archive/push/push.c

Fix incorrect return type in backupFile().

commit   : bf9e331ac15b0bd261f1a71e1307b51c9934aa85    
  
author   : David Steele <[email protected]>    
date     : Tue, 10 Jan 2023 10:14:43 +0700    
  
committer: David Steele <[email protected]>    
date     : Tue, 10 Jan 2023 10:14:43 +0700    

Click here for diff

M src/command/backup/file.c

Fix formatting of archiveGetFile().

commit   : b722d2b6ca31edead49b6dcc8fe0286bb508f5b2    
  
author   : David Steele <[email protected]>    
date     : Tue, 10 Jan 2023 09:28:57 +0700    
  
committer: David Steele <[email protected]>    
date     : Tue, 10 Jan 2023 09:28:57 +0700    

Click here for diff

M src/command/archive/get/file.c

Remove duplication from FUNCTION_LOG_BEGIN_BASE() macro definitions.

commit   : 38d320455336ab6da16c7c1b86e52d3118bcbd73    
  
author   : David Steele <[email protected]>    
date     : Mon, 9 Jan 2023 14:47:57 +0700    
  
committer: David Steele <[email protected]>    
date     : Mon, 9 Jan 2023 14:47:57 +0700    

Click here for diff

It is a bit simpler to define STACK_TRACE_TEST_START()/STACK_TRACE_TEST_STOP() in a separate #ifdef so FUNCTION_LOG_BEGIN_BASE() does not need to be defined twice.  
  
Also add missing semicolons exposed by this change.  

M src/command/repo/get.c
M src/command/repo/ls.c
M src/command/repo/put.c
M src/common/debug.h
M src/common/exec.c
M src/common/io/client.c
M src/common/io/http/client.c
M src/common/io/http/request.c
M src/common/io/http/response.c
M src/common/io/http/session.c
M src/common/io/server.c
M src/common/io/session.c
M src/common/io/socket/client.c
M src/common/io/socket/server.c
M src/common/io/socket/session.c
M src/common/io/tls/session.c

Do not output stderr on unit/integration test errors.

commit   : 6633ccd18d66f3354ce6af27c93916bce330981b    
  
author   : David Steele <[email protected]>    
date     : Thu, 5 Jan 2023 14:03:43 +0700    
  
committer: David Steele <[email protected]>    
date     : Thu, 5 Jan 2023 14:03:43 +0700    

Click here for diff

Since stderr is being redirected to stdout this results in duplication of the error output.  

M test/lib/pgBackRestTest/Common/JobTest.pm

Add unit tests for the unit test build code.

commit   : 4429bc82f530fd87cd4e370c012054be117b76b9    
  
author   : David Steele <[email protected]>    
date     : Thu, 5 Jan 2023 12:59:06 +0700    
  
committer: David Steele <[email protected]>    
date     : Thu, 5 Jan 2023 12:59:06 +0700    

Click here for diff

When this code was migrated to C the unit tests were not included because there were more important priorities at the time.  
  
This also requires some adjustments to coverage because of the new code location.  

M test/define.yaml
M test/lib/pgBackRestTest/Common/CoverageTest.pm
M test/src/command/test/build.c
M test/src/command/test/define.c
M test/src/command/test/test.c
M test/src/command/test/test.h
M test/src/main.c
A test/src/module/test/testTest.c
M test/src/test.c

Add CHECK_FMT() macros and tests for CHECK*() macros.

commit   : a5499afabc7729efc2254010b47aeced74d0e918    
  
author   : David Steele <[email protected]>    
date     : Thu, 5 Jan 2023 12:44:00 +0700    
  
committer: David Steele <[email protected]>    
date     : Thu, 5 Jan 2023 12:44:00 +0700    

Click here for diff

The CHECK_FMT() macro will be used in some upcoming tests but could also be useful in the core code.  
  
The CHECK*() macros never had tests so add them.  

M src/common/assert.h
M test/src/module/common/assertOffTest.c
M test/src/module/common/assertOnTest.c

Remove extra linefeed.

commit   : 2e3513984ef528404341e4e399f5257d6f2f1ccb    
  
author   : David Steele <[email protected]>    
date     : Thu, 5 Jan 2023 12:33:17 +0700    
  
committer: David Steele <[email protected]>    
date     : Thu, 5 Jan 2023 12:33:17 +0700    

Click here for diff

M src/build/config/parse.c

commit   : 877bb2ac9e452ddeef6ddd4845c4fb59d83379fe    
  
author   : David Steele <[email protected]>    
date     : Tue, 3 Jan 2023 08:26:44 +0700    
  
committer: David Steele <[email protected]>    
date     : Tue, 3 Jan 2023 08:26:44 +0700    

Click here for diff

M LICENSE
M src/common/macro.h
M src/postgres/interface/pageChecksum.vendor.c.inc
M src/postgres/interface/static.vendor.h
M src/postgres/interface/version.vendor.h

Cleanup of common/ini module in preparation for a refactor.

commit   : 2b2a6edf355f50c0d399243e6d4d9fa495a1ec34    
  
author   : David Steele <[email protected]>    
date     : Mon, 2 Jan 2023 18:53:05 +0700    
  
committer: David Steele <[email protected]>    
date     : Mon, 2 Jan 2023 18:53:05 +0700    

Click here for diff

M src/common/ini.c

Fix formatting of restoreFile() definition.

commit   : 92d5fd17b4ddb2e72e4cf5c10fd7708d5a9fad56    
  
author   : David Steele <[email protected]>    
date     : Mon, 2 Jan 2023 17:32:09 +0700    
  
committer: David Steele <[email protected]>    
date     : Mon, 2 Jan 2023 17:32:09 +0700    

Click here for diff

M src/command/restore/file.c

Add BUFFER_EXTERN() and cleanup hash zero constants.

commit   : d51a86c6210001359f86aadc36285137fe8f2da9    
  
author   : David Steele <[email protected]>    
date     : Mon, 2 Jan 2023 17:30:57 +0700    
  
committer: David Steele <[email protected]>    
date     : Mon, 2 Jan 2023 17:30:57 +0700    

Click here for diff

BUFFER_EXTERN() provides a clean way to create buffer constants.  
  
Convert HASH_TYPE_SHA256_ZERO_STR to HASH_TYPE_SHA256_ZERO_BUF to be consistent with HASH_TYPE_SHA1_ZERO_BUF.  

M src/common/crypto/hash.c
M src/common/crypto/hash.h
M src/common/type/buffer.h
M src/storage/s3/storage.c
M test/src/module/storage/s3Test.c

Cleanup terminology in Buffer/Variant/String macros.

commit   : 66f108ea8a01ac881a47f4cbd8d5fb3ca8102e1d    
  
author   : David Steele <[email protected]>    
date     : Mon, 2 Jan 2023 17:26:53 +0700    
  
committer: David Steele <[email protected]>    
date     : Mon, 2 Jan 2023 17:26:53 +0700    

Click here for diff

M src/common/type/buffer.h
M src/common/type/string.h
M src/common/type/variant.c
M src/common/type/variant.h

Split VR_EXTERN/FN_EXTERN macros from FV_EXTERN.

commit   : f0189129088456cf22f7bf86fa505cf9c28a5e37    
  
author   : David Steele <[email protected]>    
date     : Mon, 2 Jan 2023 15:24:51 +0700    
  
committer: David Steele <[email protected]>    
date     : Mon, 2 Jan 2023 15:24:51 +0700    

Click here for diff

This should make it a little clearer what the variable (VR) macros are doing since the declaration/definition cannot both be set to extern (but functions can).  
  
Splitting the variable macros out also allows them to be changed in the future with little churn, while changing the function macro creates a large amount of churn.  

M .github/workflows/test.yml
M doc/xml/release.xml
M src/build.auto.h.in
M src/command/annotate/annotate.c
M src/command/annotate/annotate.h
M src/command/archive/common.c
M src/command/archive/common.h
M src/command/archive/get/file.c
M src/command/archive/get/file.h
M src/command/archive/get/get.c
M src/command/archive/get/get.h
M src/command/archive/get/protocol.c
M src/command/archive/get/protocol.h
M src/command/archive/push/file.c
M src/command/archive/push/file.h
M src/command/archive/push/protocol.c
M src/command/archive/push/protocol.h
M src/command/archive/push/push.c
M src/command/archive/push/push.h
M src/command/backup/backup.c
M src/command/backup/backup.h
M src/command/backup/common.c
M src/command/backup/common.h
M src/command/backup/file.c
M src/command/backup/file.h
M src/command/backup/pageChecksum.c
M src/command/backup/pageChecksum.h
M src/command/backup/protocol.c
M src/command/backup/protocol.h
M src/command/check/check.c
M src/command/check/check.h
M src/command/check/common.c
M src/command/check/common.h
M src/command/command.c
M src/command/command.h
M src/command/control/common.c
M src/command/control/common.h
M src/command/control/start.c
M src/command/control/start.h
M src/command/control/stop.c
M src/command/control/stop.h
M src/command/exit.c
M src/command/exit.h
M src/command/expire/expire.c
M src/command/expire/expire.h
M src/command/help/help.c
M src/command/help/help.h
M src/command/info/info.c
M src/command/info/info.h
M src/command/local/local.c
M src/command/local/local.h
M src/command/remote/remote.c
M src/command/remote/remote.h
M src/command/repo/common.c
M src/command/repo/common.h
M src/command/repo/create.c
M src/command/repo/create.h
M src/command/repo/get.c
M src/command/repo/get.h
M src/command/repo/ls.c
M src/command/repo/ls.h
M src/command/repo/put.c
M src/command/repo/put.h
M src/command/repo/rm.c
M src/command/repo/rm.h
M src/command/restore/file.c
M src/command/restore/file.h
M src/command/restore/protocol.c
M src/command/restore/protocol.h
M src/command/restore/restore.c
M src/command/restore/restore.h
M src/command/server/ping.c
M src/command/server/ping.h
M src/command/server/server.c
M src/command/server/server.h
M src/command/stanza/common.c
M src/command/stanza/common.h
M src/command/stanza/create.c
M src/command/stanza/create.h
M src/command/stanza/delete.c
M src/command/stanza/delete.h
M src/command/stanza/upgrade.c
M src/command/stanza/upgrade.h
M src/command/verify/file.c
M src/command/verify/file.h
M src/command/verify/protocol.c
M src/command/verify/protocol.h
M src/command/verify/verify.c
M src/command/verify/verify.h
M src/common/compress/bz2/common.c
M src/common/compress/bz2/common.h
M src/common/compress/bz2/compress.c
M src/common/compress/bz2/compress.h
M src/common/compress/bz2/decompress.c
M src/common/compress/bz2/decompress.h
M src/common/compress/gz/common.c
M src/common/compress/gz/common.h
M src/common/compress/gz/compress.c
M src/common/compress/gz/compress.h
M src/common/compress/gz/decompress.c
M src/common/compress/gz/decompress.h
M src/common/compress/helper.c
M src/common/compress/helper.h
M src/common/compress/helper.intern.h
M src/common/compress/lz4/common.c
M src/common/compress/lz4/common.h
M src/common/compress/lz4/compress.c
M src/common/compress/lz4/compress.h
M src/common/compress/lz4/decompress.c
M src/common/compress/lz4/decompress.h
M src/common/compress/zst/common.c
M src/common/compress/zst/common.h
M src/common/compress/zst/compress.c
M src/common/compress/zst/compress.h
M src/common/compress/zst/decompress.c
M src/common/compress/zst/decompress.h
M src/common/crypto/cipherBlock.c
M src/common/crypto/cipherBlock.h
M src/common/crypto/common.c
M src/common/crypto/common.h
M src/common/crypto/hash.c
M src/common/crypto/hash.h
M src/common/debug.c
M src/common/debug.h
M src/common/encode.c
M src/common/encode.h
M src/common/error.c
M src/common/error.h
M src/common/exec.c
M src/common/exec.h
M src/common/fork.c
M src/common/fork.h
M src/common/ini.c
M src/common/ini.h
M src/common/io/bufferRead.c
M src/common/io/bufferRead.h
M src/common/io/bufferWrite.c
M src/common/io/bufferWrite.h
M src/common/io/client.c
M src/common/io/client.h
M src/common/io/client.intern.h
M src/common/io/fd.c
M src/common/io/fd.h
M src/common/io/fdRead.c
M src/common/io/fdRead.h
M src/common/io/fdWrite.c
M src/common/io/fdWrite.h
M src/common/io/filter/buffer.c
M src/common/io/filter/buffer.h
M src/common/io/filter/filter.c
M src/common/io/filter/filter.h
M src/common/io/filter/filter.intern.h
M src/common/io/filter/group.c
M src/common/io/filter/group.h
M src/common/io/filter/sink.c
M src/common/io/filter/sink.h
M src/common/io/filter/size.c
M src/common/io/filter/size.h
M src/common/io/http/client.c
M src/common/io/http/client.h
M src/common/io/http/common.c
M src/common/io/http/common.h
M src/common/io/http/header.c
M src/common/io/http/header.h
M src/common/io/http/query.c
M src/common/io/http/query.h
M src/common/io/http/request.c
M src/common/io/http/request.h
M src/common/io/http/response.c
M src/common/io/http/response.h
M src/common/io/http/session.c
M src/common/io/http/session.h
M src/common/io/http/url.c
M src/common/io/http/url.h
M src/common/io/io.c
M src/common/io/io.h
M src/common/io/read.c
M src/common/io/read.h
M src/common/io/read.intern.h
M src/common/io/server.c
M src/common/io/server.h
M src/common/io/server.intern.h
M src/common/io/session.c
M src/common/io/session.h
M src/common/io/session.intern.h
M src/common/io/socket/client.c
M src/common/io/socket/client.h
M src/common/io/socket/common.c
M src/common/io/socket/common.h
M src/common/io/socket/server.c
M src/common/io/socket/server.h
M src/common/io/socket/session.c
M src/common/io/socket/session.h
M src/common/io/tls/client.c
M src/common/io/tls/client.h
M src/common/io/tls/common.c
M src/common/io/tls/common.h
M src/common/io/tls/server.c
M src/common/io/tls/server.h
M src/common/io/tls/session.c
M src/common/io/tls/session.h
M src/common/io/write.c
M src/common/io/write.h
M src/common/io/write.intern.h
M src/common/lock.c
M src/common/lock.h
M src/common/log.c
M src/common/log.h
M src/common/memContext.c
M src/common/memContext.h
M src/common/regExp.c
M src/common/regExp.h
M src/common/stackTrace.c
M src/common/stackTrace.h
M src/common/stat.c
M src/common/stat.h
M src/common/time.c
M src/common/time.h
M src/common/type/blob.c
M src/common/type/blob.h
M src/common/type/buffer.c
M src/common/type/buffer.h
M src/common/type/convert.c
M src/common/type/convert.h
M src/common/type/json.c
M src/common/type/json.h
M src/common/type/keyValue.c
M src/common/type/keyValue.h
M src/common/type/list.c
M src/common/type/list.h
M src/common/type/object.c
M src/common/type/object.h
M src/common/type/pack.c
M src/common/type/pack.h
M src/common/type/string.c
M src/common/type/string.h
M src/common/type/stringId.c
M src/common/type/stringId.h
M src/common/type/stringList.c
M src/common/type/stringList.h
M src/common/type/stringZ.c
M src/common/type/stringZ.h
M src/common/type/variant.c
M src/common/type/variant.h
M src/common/type/variantList.c
M src/common/type/variantList.h
M src/common/type/xml.c
M src/common/type/xml.h
M src/common/user.c
M src/common/user.h
M src/common/wait.c
M src/common/wait.h
M src/config/common.c
M src/config/common.h
M src/config/config.c
M src/config/config.h
M src/config/config.intern.h
M src/config/exec.c
M src/config/exec.h
M src/config/load.c
M src/config/load.h
M src/config/parse.c
M src/config/parse.h
M src/config/protocol.c
M src/config/protocol.h
M src/db/db.c
M src/db/db.h
M src/db/helper.c
M src/db/helper.h
M src/db/protocol.c
M src/db/protocol.h
M src/info/info.c
M src/info/info.h
M src/info/infoArchive.c
M src/info/infoArchive.h
M src/info/infoBackup.c
M src/info/infoBackup.h
M src/info/infoPg.c
M src/info/infoPg.h
M src/info/manifest.c
M src/info/manifest.h
M src/meson.build
M src/postgres/client.c
M src/postgres/client.h
M src/postgres/interface.c
M src/postgres/interface.h
M src/postgres/interface/page.c
M src/protocol/client.c
M src/protocol/client.h
M src/protocol/command.c
M src/protocol/command.h
M src/protocol/helper.c
M src/protocol/helper.h
M src/protocol/parallel.c
M src/protocol/parallel.h
M src/protocol/parallelJob.c
M src/protocol/parallelJob.h
M src/protocol/server.c
M src/protocol/server.h
M src/storage/azure/helper.c
M src/storage/azure/helper.h
M src/storage/azure/read.c
M src/storage/azure/read.h
M src/storage/azure/storage.c
M src/storage/azure/storage.h
M src/storage/azure/storage.intern.h
M src/storage/azure/write.c
M src/storage/azure/write.h
M src/storage/cifs/helper.c
M src/storage/cifs/helper.h
M src/storage/cifs/storage.c
M src/storage/cifs/storage.h
M src/storage/gcs/helper.c
M src/storage/gcs/helper.h
M src/storage/gcs/read.c
M src/storage/gcs/read.h
M src/storage/gcs/storage.c
M src/storage/gcs/storage.h
M src/storage/gcs/storage.intern.h
M src/storage/gcs/write.c
M src/storage/gcs/write.h
M src/storage/helper.c
M src/storage/helper.h
M src/storage/iterator.c
M src/storage/iterator.h
M src/storage/list.c
M src/storage/list.h
M src/storage/posix/read.c
M src/storage/posix/read.h
M src/storage/posix/storage.c
M src/storage/posix/storage.h
M src/storage/posix/storage.intern.h
M src/storage/posix/write.c
M src/storage/posix/write.h
M src/storage/read.c
M src/storage/read.h
M src/storage/read.intern.h
M src/storage/remote/protocol.c
M src/storage/remote/protocol.h
M src/storage/remote/read.c
M src/storage/remote/read.h
M src/storage/remote/storage.c
M src/storage/remote/storage.h
M src/storage/remote/write.c
M src/storage/remote/write.h
M src/storage/s3/helper.c
M src/storage/s3/helper.h
M src/storage/s3/read.c
M src/storage/s3/read.h
M src/storage/s3/storage.c
M src/storage/s3/storage.h
M src/storage/s3/storage.intern.h
M src/storage/s3/write.c
M src/storage/s3/write.h
M src/storage/storage.c
M src/storage/storage.h
M src/storage/storage.intern.h
M src/storage/write.c
M src/storage/write.h
M src/storage/write.intern.h
M test/src/command/test/build.c

Remove MacOS from CirrusCI.

commit   : 9e29c01891225dd5f371b76d324366bbb3694ca4    
  
author   : David Steele <[email protected]>    
date     : Mon, 2 Jan 2023 15:11:37 +0700    
  
committer: David Steele <[email protected]>    
date     : Mon, 2 Jan 2023 15:11:37 +0700    

Click here for diff

CirrusCI stopped supporting Intel but the arm builds are not working, even with the same steps that work on an arm Mac.  
  
Remove to unstick the build pipeline until this can be resolved.  

M .cirrus.yml

Fix formatting.

commit   : 8993267df9864852efd59a9b5366e9a521a6c08e    
  
author   : David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 23:33:45 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 23:33:45 +0700    

Click here for diff

M src/command/archive/get/get.c

Clean up storage headers and move posix internal type.

commit   : 1793839e5a821a7177922e4cdad104eba772c3ec    
  
author   : David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 19:12:35 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 19:12:35 +0700    

Click here for diff

M src/storage/azure/storage.c
M src/storage/gcs/storage.c
M src/storage/posix/read.c
M src/storage/posix/read.h
M src/storage/posix/storage.h
M src/storage/posix/storage.intern.h
M src/storage/posix/write.c
M src/storage/posix/write.h
M src/storage/remote/storage.c
M src/storage/s3/storage.c

Add meson unity build and tests.

commit   : 4fb8a0ecdd12bdb01273cebbecf61f6beb22146d    
  
author   : David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 17:13:41 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 17:13:41 +0700    

Click here for diff

This is immediately useful because it will detect any extern'd functions or variables that are not being used. It also detects functions or variables that are declared but not defined.  
  
If a FV/VR_EXTERN macro is missing it will be detected either because of a mismatch in the declaration/definition or because a new defined symbol will appear in the nm test.  
  
Eventually the unity build will be used to create a more optimized pgbackrest binary but that will need to wait.  

A .github/workflows/symbol.out
M .github/workflows/test.yml
M doc/xml/release.xml
M meson.build
M meson_options.txt
M src/build.auto.h.in
M src/command/annotate/annotate.c
M src/command/annotate/annotate.h
M src/command/archive/common.c
M src/command/archive/common.h
M src/command/archive/get/file.c
M src/command/archive/get/file.h
M src/command/archive/get/get.c
M src/command/archive/get/get.h
M src/command/archive/get/protocol.c
M src/command/archive/get/protocol.h
M src/command/archive/push/file.c
M src/command/archive/push/file.h
M src/command/archive/push/protocol.c
M src/command/archive/push/protocol.h
M src/command/archive/push/push.c
M src/command/archive/push/push.h
M src/command/backup/backup.c
M src/command/backup/backup.h
M src/command/backup/common.c
M src/command/backup/common.h
M src/command/backup/file.c
M src/command/backup/file.h
M src/command/backup/pageChecksum.c
M src/command/backup/pageChecksum.h
M src/command/backup/protocol.c
M src/command/backup/protocol.h
M src/command/check/check.c
M src/command/check/check.h
M src/command/check/common.c
M src/command/check/common.h
M src/command/command.c
M src/command/command.h
M src/command/control/common.c
M src/command/control/common.h
M src/command/control/start.c
M src/command/control/start.h
M src/command/control/stop.c
M src/command/control/stop.h
M src/command/exit.c
M src/command/exit.h
M src/command/expire/expire.c
M src/command/expire/expire.h
M src/command/help/help.c
M src/command/help/help.h
M src/command/info/info.c
M src/command/info/info.h
M src/command/local/local.c
M src/command/local/local.h
M src/command/remote/remote.c
M src/command/remote/remote.h
M src/command/repo/common.c
M src/command/repo/common.h
M src/command/repo/create.c
M src/command/repo/create.h
M src/command/repo/get.c
M src/command/repo/get.h
M src/command/repo/ls.c
M src/command/repo/ls.h
M src/command/repo/put.c
M src/command/repo/put.h
M src/command/repo/rm.c
M src/command/repo/rm.h
M src/command/restore/file.c
M src/command/restore/file.h
M src/command/restore/protocol.c
M src/command/restore/protocol.h
M src/command/restore/restore.c
M src/command/restore/restore.h
M src/command/server/ping.c
M src/command/server/ping.h
M src/command/server/server.c
M src/command/server/server.h
M src/command/stanza/common.c
M src/command/stanza/common.h
M src/command/stanza/create.c
M src/command/stanza/create.h
M src/command/stanza/delete.c
M src/command/stanza/delete.h
M src/command/stanza/upgrade.c
M src/command/stanza/upgrade.h
M src/command/verify/file.c
M src/command/verify/file.h
M src/command/verify/protocol.c
M src/command/verify/protocol.h
M src/command/verify/verify.c
M src/command/verify/verify.h
M src/common/compress/bz2/common.c
M src/common/compress/bz2/common.h
M src/common/compress/bz2/compress.c
M src/common/compress/bz2/compress.h
M src/common/compress/bz2/decompress.c
M src/common/compress/bz2/decompress.h
M src/common/compress/gz/common.c
M src/common/compress/gz/common.h
M src/common/compress/gz/compress.c
M src/common/compress/gz/compress.h
M src/common/compress/gz/decompress.c
M src/common/compress/gz/decompress.h
M src/common/compress/helper.c
M src/common/compress/helper.h
M src/common/compress/helper.intern.h
M src/common/compress/lz4/common.c
M src/common/compress/lz4/common.h
M src/common/compress/lz4/compress.c
M src/common/compress/lz4/compress.h
M src/common/compress/lz4/decompress.c
M src/common/compress/lz4/decompress.h
M src/common/compress/zst/common.c
M src/common/compress/zst/common.h
M src/common/compress/zst/compress.c
M src/common/compress/zst/compress.h
M src/common/compress/zst/decompress.c
M src/common/compress/zst/decompress.h
M src/common/crypto/cipherBlock.c
M src/common/crypto/cipherBlock.h
M src/common/crypto/common.c
M src/common/crypto/common.h
M src/common/crypto/hash.c
M src/common/crypto/hash.h
M src/common/debug.c
M src/common/debug.h
M src/common/encode.c
M src/common/encode.h
M src/common/error.c
M src/common/error.h
M src/common/exec.c
M src/common/exec.h
M src/common/fork.c
M src/common/fork.h
M src/common/ini.c
M src/common/ini.h
M src/common/io/bufferRead.c
M src/common/io/bufferRead.h
M src/common/io/bufferWrite.c
M src/common/io/bufferWrite.h
M src/common/io/client.c
M src/common/io/client.h
M src/common/io/client.intern.h
M src/common/io/fd.c
M src/common/io/fd.h
M src/common/io/fdRead.c
M src/common/io/fdRead.h
M src/common/io/fdWrite.c
M src/common/io/fdWrite.h
M src/common/io/filter/buffer.c
M src/common/io/filter/buffer.h
M src/common/io/filter/filter.c
M src/common/io/filter/filter.h
M src/common/io/filter/filter.intern.h
M src/common/io/filter/group.c
M src/common/io/filter/group.h
M src/common/io/filter/sink.c
M src/common/io/filter/sink.h
M src/common/io/filter/size.c
M src/common/io/filter/size.h
M src/common/io/http/client.c
M src/common/io/http/client.h
M src/common/io/http/common.c
M src/common/io/http/common.h
M src/common/io/http/header.c
M src/common/io/http/header.h
M src/common/io/http/query.c
M src/common/io/http/query.h
M src/common/io/http/request.c
M src/common/io/http/request.h
M src/common/io/http/response.c
M src/common/io/http/response.h
M src/common/io/http/session.c
M src/common/io/http/session.h
M src/common/io/http/url.c
M src/common/io/http/url.h
M src/common/io/io.c
M src/common/io/io.h
M src/common/io/read.c
M src/common/io/read.h
M src/common/io/read.intern.h
M src/common/io/server.c
M src/common/io/server.h
M src/common/io/server.intern.h
M src/common/io/session.c
M src/common/io/session.h
M src/common/io/session.intern.h
M src/common/io/socket/client.c
M src/common/io/socket/client.h
M src/common/io/socket/common.c
M src/common/io/socket/common.h
M src/common/io/socket/server.c
M src/common/io/socket/server.h
M src/common/io/socket/session.c
M src/common/io/socket/session.h
M src/common/io/tls/client.c
M src/common/io/tls/client.h
M src/common/io/tls/common.c
M src/common/io/tls/common.h
M src/common/io/tls/server.c
M src/common/io/tls/server.h
M src/common/io/tls/session.c
M src/common/io/tls/session.h
M src/common/io/write.c
M src/common/io/write.h
M src/common/io/write.intern.h
M src/common/lock.c
M src/common/lock.h
M src/common/log.c
M src/common/log.h
M src/common/memContext.c
M src/common/memContext.h
M src/common/regExp.c
M src/common/regExp.h
M src/common/stackTrace.c
M src/common/stackTrace.h
M src/common/stat.c
M src/common/stat.h
M src/common/time.c
M src/common/time.h
M src/common/type/blob.c
M src/common/type/blob.h
M src/common/type/buffer.c
M src/common/type/buffer.h
M src/common/type/convert.c
M src/common/type/convert.h
M src/common/type/json.c
M src/common/type/json.h
M src/common/type/keyValue.c
M src/common/type/keyValue.h
M src/common/type/list.c
M src/common/type/list.h
M src/common/type/object.c
M src/common/type/object.h
M src/common/type/pack.c
M src/common/type/pack.h
M src/common/type/string.c
M src/common/type/string.h
M src/common/type/stringId.c
M src/common/type/stringId.h
M src/common/type/stringList.c
M src/common/type/stringList.h
M src/common/type/stringZ.c
M src/common/type/stringZ.h
M src/common/type/variant.c
M src/common/type/variant.h
M src/common/type/variantList.c
M src/common/type/variantList.h
M src/common/type/xml.c
M src/common/type/xml.h
M src/common/user.c
M src/common/user.h
M src/common/wait.c
M src/common/wait.h
M src/config/common.c
M src/config/common.h
M src/config/config.c
M src/config/config.h
M src/config/config.intern.h
M src/config/exec.c
M src/config/exec.h
M src/config/load.c
M src/config/load.h
M src/config/parse.c
M src/config/parse.h
M src/config/protocol.c
M src/config/protocol.h
M src/db/db.c
M src/db/db.h
M src/db/helper.c
M src/db/helper.h
M src/db/protocol.c
M src/db/protocol.h
M src/info/info.c
M src/info/info.h
M src/info/infoArchive.c
M src/info/infoArchive.h
M src/info/infoBackup.c
M src/info/infoBackup.h
M src/info/infoPg.c
M src/info/infoPg.h
M src/info/manifest.c
M src/info/manifest.h
M src/meson.build
M src/postgres/client.c
M src/postgres/client.h
M src/postgres/interface.c
M src/postgres/interface.h
M src/postgres/interface/page.c
M src/protocol/client.c
M src/protocol/client.h
M src/protocol/command.c
M src/protocol/command.h
M src/protocol/helper.c
M src/protocol/helper.h
M src/protocol/parallel.c
M src/protocol/parallel.h
M src/protocol/parallelJob.c
M src/protocol/parallelJob.h
M src/protocol/server.c
M src/protocol/server.h
M src/storage/azure/helper.c
M src/storage/azure/helper.h
M src/storage/azure/read.c
M src/storage/azure/read.h
M src/storage/azure/storage.c
M src/storage/azure/storage.h
M src/storage/azure/storage.intern.h
M src/storage/azure/write.c
M src/storage/azure/write.h
M src/storage/cifs/helper.c
M src/storage/cifs/helper.h
M src/storage/cifs/storage.c
M src/storage/cifs/storage.h
M src/storage/gcs/helper.c
M src/storage/gcs/helper.h
M src/storage/gcs/read.c
M src/storage/gcs/read.h
M src/storage/gcs/storage.c
M src/storage/gcs/storage.h
M src/storage/gcs/storage.intern.h
M src/storage/gcs/write.c
M src/storage/gcs/write.h
M src/storage/helper.c
M src/storage/helper.h
M src/storage/iterator.c
M src/storage/iterator.h
M src/storage/list.c
M src/storage/list.h
M src/storage/posix/read.c
M src/storage/posix/read.h
M src/storage/posix/storage.c
M src/storage/posix/storage.h
M src/storage/posix/storage.intern.h
M src/storage/posix/write.c
M src/storage/posix/write.h
M src/storage/read.c
M src/storage/read.h
M src/storage/read.intern.h
M src/storage/remote/protocol.c
M src/storage/remote/protocol.h
M src/storage/remote/read.c
M src/storage/remote/read.h
M src/storage/remote/storage.c
M src/storage/remote/storage.h
M src/storage/remote/write.c
M src/storage/remote/write.h
M src/storage/s3/helper.c
M src/storage/s3/helper.h
M src/storage/s3/read.c
M src/storage/s3/read.h
M src/storage/s3/storage.c
M src/storage/s3/storage.h
M src/storage/s3/storage.intern.h
M src/storage/s3/write.c
M src/storage/s3/write.h
M src/storage/storage.c
M src/storage/storage.h
M src/storage/storage.intern.h
M src/storage/write.c
M src/storage/write.h
M src/storage/write.intern.h
M test/src/command/test/build.c
M test/src/meson.build

Put logging functions unused by release builds into DEBUG blocks.

commit   : 8aa2b101bbd9fe07971794bf4bb4c8d2a61c7b07    
  
author   : David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 16:41:01 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 16:41:01 +0700    

Click here for diff

Also inline some functions that are needed in non-DEBUG builds.  

M src/common/debug.c
M src/common/debug.h
M src/common/io/http/url.c
M src/common/io/http/url.h
M src/common/type/convert.c
M src/common/type/convert.h
M src/common/type/json.c
M src/common/type/json.h
M test/src/module/common/typeConvertTest.c

Use memcpy() instead of strncpy when source size is known.

commit   : 4a64c5d80c9af2a3498943f326de7295679c63e6    
  
author   : David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 15:49:32 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 15:49:32 +0700    

Click here for diff

In this case the destination will be large enough to hold the source so memcpy is more efficient.  
  
Also, in highly optimized builds the compiler may warn for strncpy() when it can see that the source size won't include the terminator.  

M src/common/type/convert.c
M src/common/type/string.c
M src/common/type/variant.c

Move storageHelperFree() to storageHelper test harness.

commit   : 2332ce8ffc16494766f1f6ee07341242e2b7b7c2    
  
author   : David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 13:14:27 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 13:14:27 +0700    

Click here for diff

This function was only used for testing so move into a test harness.  

M src/storage/helper.c
M src/storage/helper.h
M test/define.yaml
M test/src/common/harnessConfig.c
A test/src/common/harnessStorageHelper.c
A test/src/common/harnessStorageHelper.h

Move regExpMatchPtr()/regExpMatchStr() to build/common/regExp module.

commit   : 8b218158ae70136d7a2ddc5a7347f79e69fbeb13    
  
author   : David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 12:54:33 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 12:54:33 +0700    

Click here for diff

Similar to b9be4fa5, these functions are not used by the core code so move them to the build module. The new implementation is a little less efficient but that is much less of a worry in the build/test code.  
  
Also remove regExpMatchSize() since it was not longer needed.  

M src/Makefile.in
A src/build/common/regExp.c
A src/build/common/regExp.h
M src/common/regExp.c
M src/common/regExp.h
M test/define.yaml
M test/src/common/harnessLog.c
M test/src/module/common/regExpTest.c

Use error*() getters where possible.

commit   : 45ece13678f94c57777180710a7ea71a1c60971a    
  
author   : David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 11:57:06 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 11:57:06 +0700    

Click here for diff

This makes it a little easier to change the underlying representation and ensures that the functions are used.  

M src/common/error.c

Move xmlNodeAttribute() to build/common/xml module.

commit   : fa9d831f9f722f28567c4997551cd6bd1d7077d3    
  
author   : David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 11:09:50 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 11:09:50 +0700    

Click here for diff

Similar to b9be4fa5, this function was not used by the core code so move it to the build module.  

M src/Makefile.in
M src/build/common/string.c
A src/build/common/xml.c
A src/build/common/xml.h
M src/build/help/parse.c
M src/build/help/parse.h
M src/common/type/xml.c
M src/common/type/xml.h
M src/meson.build
M test/define.yaml

Fix comment typo for strLower().

commit   : c6264ad4cf55920558513127d4e221ce8e85eb28    
  
author   : David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 10:31:15 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 10:31:15 +0700    

Click here for diff

M src/common/type/string.h

Move strReplace() and strUpper() to build/common/string module.

commit   : 163a004f30675403eba2a619412bd803eba4d71a    
  
author   : David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 10:26:11 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 10:26:11 +0700    

Click here for diff

Neither of these functions were used by the core code. strReplace() is only used in the tests but it doesn't hurt to put it in build since the build code is not distributed.  

M src/Makefile.in
M src/build/common/render.h
A src/build/common/string.c
A src/build/common/string.h
M src/build/postgres/parse.h
M src/common/type/string.c
M src/common/type/string.h
M src/meson.build
M test/define.yaml
M test/src/command/test/build.h
M test/src/command/test/define.h
M test/src/common/harnessConfig.c
M test/src/meson.build

Add explicit keyword for covered modules included in other modules.

commit   : d517d4a3283c0ccc5ca5d06593d1b244dd5e68b4    
  
author   : David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 10:10:44 +0700    
  
committer: David Steele <[email protected]>    
date     : Sat, 31 Dec 2022 10:10:44 +0700    

Click here for diff

This was done by checking the extension but it is possible to include a module that does not have a vendor or auto extension. Instead make it explicit that the module is included in another module.  
  
Also change the variable from "include" to "included" to make it clearer what it indicates.  

M test/define.yaml
M test/src/command/test/build.c
M test/src/command/test/define.c
M test/src/command/test/define.h

Put memContextSize() in a DEBUG block.

commit   : 729d7f071dafe22f85201bfaf2bae461ec54d285    
  
author   : David Steele <[email protected]>    
date     : Fri, 30 Dec 2022 18:45:11 +0700    
  
committer: David Steele <[email protected]>    
date     : Fri, 30 Dec 2022 18:45:11 +0700    

Click here for diff

This function is only used in unit tests so no need to include it in the release build.  

M src/common/memContext.c
M src/common/memContext.h

Remove unused functions.

commit   : cebbf0d012ad7204c4770efa3308daddc267415f    
  
author   : David Steele <[email protected]>    
date     : Fri, 30 Dec 2022 16:26:48 +0700    
  
committer: David Steele <[email protected]>    
date     : Fri, 30 Dec 2022 16:26:48 +0700    

Click here for diff

These functions were either added with the intention that they would be used or they became obsolete over time.  

M src/common/crypto/common.c
M src/common/crypto/common.h
M src/common/debug.h
M src/common/ini.c
M src/common/ini.h
M src/common/memContext.c
M src/common/memContext.h
M src/common/type/convert.c
M src/common/type/convert.h
M src/common/type/pack.c
M src/common/type/pack.h
M src/common/type/string.c
M src/common/type/string.h
M src/common/type/xml.c
M src/common/type/xml.h
M src/config/config.c
M src/config/config.h
M src/info/manifest.c
M src/info/manifest.h
M src/postgres/interface.c
M src/postgres/interface.h
M test/define.yaml
M test/src/common/harnessPack.c
M test/src/module/common/cryptoTest.c
M test/src/module/common/iniTest.c
M test/src/module/common/memContextTest.c
M test/src/module/common/typeConvertTest.c
M test/src/module/common/typePackTest.c
M test/src/module/common/typeStringTest.c
M test/src/module/common/typeXmlTest.c
M test/src/module/config/parseTest.c
M test/src/module/info/manifestTest.c
M test/src/module/postgres/interfaceTest.c

Remove declaration for function that is no longer defined.

commit   : 6f0c652e2c50f288fc4f541a994281032856be2b    
  
author   : David Steele <[email protected]>    
date     : Fri, 30 Dec 2022 14:59:16 +0700    
  
committer: David Steele <[email protected]>    
date     : Fri, 30 Dec 2022 14:59:16 +0700    

Click here for diff

M src/db/db.h

Mark functions not used externally as static.

commit   : 416fadd60cc0401e5e730867d98ae59ff54f8dcd    
  
author   : David Steele <[email protected]>    
date     : Fri, 30 Dec 2022 14:48:31 +0700    
  
committer: David Steele <[email protected]>    
date     : Fri, 30 Dec 2022 14:48:31 +0700    

Click here for diff

Also cleanup a stray linefeed.  

M src/command/backup/backup.c
M src/command/repo/get.c
M src/command/repo/put.c
M src/command/verify/verify.c
M src/common/io/filter/buffer.c
M src/common/io/filter/size.c
M src/common/io/socket/session.h
M src/storage/posix/storage.c
M src/storage/posix/storage.intern.h

Restore errors when no backup matches the current version of PostgreSQL.

commit   : b9be4fa54039e2c79fad0dc1552c7ffaf883004c    
  
author   : Stefan Fercot <[email protected]>    
date     : Thu, 29 Dec 2022 09:37:27 +0100    
  
committer: GitHub <[email protected]>    
date     : Thu, 29 Dec 2022 09:37:27 +0100    

Click here for diff

It is probably not a good idea to restore the latest backup when it was not made from the current PostgreSQL version. If there is no backup after a stanza-upgrade then replicas might be built with a prior version leading to failures.
  

  
Add an error in this case if the latest backup would be used, i.e. --set or --type=time/lsn is not specified.

M doc/xml/release.xml
M src/command/restore/restore.c
M test/src/module/command/restoreTest.c

Fix improper formatting in config/parse module.

commit   : aa1e72dfe662678919d3b01aa0e6454b677873ad    
  
author   : David Steele <[email protected]>    
date     : Thu, 29 Dec 2022 15:05:45 +0700    
  
committer: David Steele <[email protected]>    
date     : Thu, 29 Dec 2022 15:05:45 +0700    

Click here for diff

The prior formatting worked but was confusing to read.  

M src/config/parse.c

Updates and clarifications to index page.

commit   : 36ee30d118ce6cc7720653a3d3a49a06c655c463    
  
author   : David Steele <[email protected]>    
date     : Wed, 28 Dec 2022 19:15:44 +0700    
  
committer: GitHub <[email protected]>    
date     : Wed, 28 Dec 2022 19:15:44 +0700    

Click here for diff

In particular the section about other backup solutions not supporting parallel processing was no longer accurate, so reword it.
  

  
Also update some other sections that used older nomenclature, had awkward wording, or needed clarification.

M README.md
M doc/xml/index.xml
M doc/xml/release.xml

Clarify target-action behavior on various PostgreSQL versions.

commit   : 84a3ff8b7ac1243c0b47c6585697f4fcf3c12065    
  
author   : Chris Bandy <[email protected]>    
date     : Tue, 27 Dec 2022 21:48:44 -0600    
  
committer: GitHub <[email protected]>    
date     : Tue, 27 Dec 2022 21:48:44 -0600    

Click here for diff

The behavior of pause depends on the hot_standby parameter and the PostgreSQL version so mention both.
  

  
This behavior has been verified on PostgreSQL 9.6–15. PostgreSQL 12 is an inflection point because the behavior of an unset recovery_target_action with hot_standby=off changed in https://git.postgresql.org/gitweb/?p=postgresql.git;h=2dedf4d9a899b36d1a8ed29be5efbd1b31a8fe85.

M doc/xml/release.xml
M src/build/help/help.xml

Add replacement for linefeeds in monitoring example.

commit   : ae258f604e634f1d2a760ffdb92dd359fd1129bb    
  
author   : David Steele <[email protected]>    
date     : Tue, 27 Dec 2022 20:28:38 +0700    
  
committer: GitHub <[email protected]>    
date     : Tue, 27 Dec 2022 20:28:38 +0700    

Click here for diff

The copy command was converting \n to a linefeed, which the json conversion did not like. In a healthy repository there won't be any linefeeds but certain errors can contain them.
  

  
Fix by loading into a text field and then replacing the linefeed when converting to jsonb.

M doc/example/pgsql-pgbackrest-info.sql
M doc/xml/release.xml

Add compress-level range checking for each compress-type.

commit   : 44da314adb2b63f96b1d571f822e91a0e412e984    
  
author   : David Steele <[email protected]>    
date     : Tue, 27 Dec 2022 20:05:08 +0700    
  
committer: GitHub <[email protected]>    
date     : Tue, 27 Dec 2022 20:05:08 +0700    

Click here for diff

The prior range checking was done based on the valid values for gz. While this worked it was a subset of what is available for lz4 and zst.
  

  
Allow the range to be specified for each compress-type. Adding this functionality to the parse module would be a better solution but that is a bigger project than this fix deserves, at least for now.

M doc/lib/pgBackRestDoc/Custom/DocConfigData.pm
M doc/xml/release.xml
M src/build/config/config.yaml
M src/common/compress/bz2/compress.c
M src/common/compress/bz2/compress.h
M src/common/compress/gz/compress.c
M src/common/compress/gz/compress.h
M src/common/compress/helper.c
M src/common/compress/helper.intern.h
M src/common/compress/lz4/compress.c
M src/common/compress/lz4/compress.h
M src/common/compress/zst/compress.c
M src/common/compress/zst/compress.h
M src/config/load.c
M src/config/parse.auto.c.inc
M test/src/module/common/compressTest.c
M test/src/module/config/loadTest.c

Fix typo.

commit   : 34110cfa0134d181c749cc040446f703b643bc9c    
  
author   : Stefan Fercot <[email protected]>    
date     : Tue, 27 Dec 2022 11:31:59 +0700    
  
committer: David Steele <[email protected]>    
date     : Tue, 27 Dec 2022 11:31:59 +0700    

Click here for diff

M src/common/lock.c

Improve comment on forced WAL switch at backup start.

commit   : 0b67389185558d4593be1ca56143de6a43e45f9f    
  
author   : David Steele <[email protected]>    
date     : Tue, 27 Dec 2022 09:18:17 +0700    
  
committer: David Steele <[email protected]>    
date     : Tue, 27 Dec 2022 09:18:17 +0700    

Click here for diff

M src/db/db.c

Move function prototype to a better location in the header.

commit   : a63e87ea2cd0efbf9e9b78adccdf7285a6876b3b    
  
author   : David Steele <[email protected]>    
date     : Fri, 23 Dec 2022 14:06:35 +0700    
  
committer: David Steele <[email protected]>    
date     : Fri, 23 Dec 2022 14:06:35 +0700    

Click here for diff

M src/common/io/read.h

Add repository checksum to make verify and resume more efficient.

commit   : 56b55f81e894c0b2875f92913bda8f0679009b17    
  
author   : David Steele <[email protected]>    
date     : Thu, 22 Dec 2022 09:26:26 +0700    
  
committer: GitHub <[email protected]>    
date     : Thu, 22 Dec 2022 09:26:26 +0700    

Click here for diff

Calculate a checksum of the data stored in the repository when a file is transformed (e.g. compressed). This allows resume and verify to operate without needing to decompress/decrypt the data.
  

  
This can also be used to verify more complex formats such as block incremental and allow backups from the repository without needing to decompress the data to verify the checksum.
  

  
Add some basic encrypted tests to maintain coverage. These will be expanded in a future commit.

M doc/xml/release.xml
M src/command/backup/backup.c
M src/command/backup/file.c
M src/command/backup/file.h
M src/command/backup/protocol.c
M src/command/verify/verify.c
M src/info/manifest.c
M src/info/manifest.h
M test/lib/pgBackRestTest/Env/Host/HostBackupTest.pm
M test/src/module/command/backupTest.c
M test/src/module/command/verifyTest.c
M test/src/module/info/manifestTest.c

Store manifest checksums in memory more efficiently.

commit   : 2ab845e2636fcd865032075b4dce9e520d094d87    
  
author   : David Steele <[email protected]>    
date     : Tue, 20 Dec 2022 16:35:27 +0700    
  
committer: GitHub <[email protected]>    
date     : Tue, 20 Dec 2022 16:35:27 +0700    

Click here for diff

Manifest checksums were stored as hex-encoded strings due to legacy compatibility with Perl. Storing the checksums as binary in memory uses half the space and avoids many conversions.
  

  
There is no change to the on-disk manifest format which stores the checksum as a hex-encoded string.

M doc/xml/release.xml
M src/command/backup/backup.c
M src/command/backup/file.c
M src/command/backup/file.h
M src/command/backup/protocol.c
M src/command/restore/file.c
M src/command/restore/file.h
M src/command/restore/protocol.c
M src/command/restore/restore.c
M src/command/verify/file.c
M src/command/verify/file.h
M src/command/verify/protocol.c
M src/command/verify/verify.c
M src/common/crypto/hash.c
M src/common/crypto/hash.h
M src/info/manifest.c
M src/info/manifest.h
M test/src/module/command/backupTest.c
M test/src/module/command/restoreTest.c
M test/src/module/command/verifyTest.c
M test/src/module/info/manifestTest.c

Remove support for PostgreSQL 9.0/9.1/9.2.

commit   : 77c721eb635c6d757d2d5ed6f2ffc083720c10a7    
  
author   : David Steele <[email protected]>    
date     : Tue, 20 Dec 2022 12:20:47 +0700    
  
committer: GitHub <[email protected]>    
date     : Tue, 20 Dec 2022 12:20:47 +0700    

Click here for diff

Our new policy is to support ten versions of PostgreSQL, the five supported releases and the last five EOL releases. As of PostgreSQL 15, that means 9.0/9.1/9.2 are no longer supported by pgBackRest.
  

  
Remove all logic associated with 9.0/9.1/9.2 and update the tests.
  

  
Document the new support policy.
  

  
Update InfoPg to read/write control versions for the history in backup.info, since we can no longer rely on the mappings being available. In theory this could have been an issue after removing 8.3/8.4 if anybody was using a version that old.

M CONTRIBUTING.md
M README.md
M doc/xml/contributing.xml
M doc/xml/index.xml
M doc/xml/release.xml
M src/build/help/help.xml
M src/build/postgres/postgres.yaml
M src/command/archive/common.c
M src/command/backup/backup.c
M src/command/restore/restore.c
M src/command/verify/verify.c
M src/db/db.c
M src/info/infoPg.c
M src/info/infoPg.h
M src/info/manifest.c
M src/postgres/interface.c
M src/postgres/interface.h
M src/postgres/interface/version.intern.h
M src/postgres/interface/version.vendor.h
M src/postgres/version.h
M test/code-count/file-type.yaml
M test/container.yaml
M test/lib/pgBackRestTest/Common/DbVersion.pm
M test/lib/pgBackRestTest/Common/VmTest.pm
M test/lib/pgBackRestTest/Env/ExpireEnvTest.pm
M test/lib/pgBackRestTest/Env/Host/HostDbTest.pm
M test/lib/pgBackRestTest/Env/HostEnvTest.pm
M test/lib/pgBackRestTest/Env/Manifest.pm
M test/lib/pgBackRestTest/Module/Mock/MockExpireTest.pm
M test/lib/pgBackRestTest/Module/Real/RealAllTest.pm
M test/src/common/harnessPostgres.c
M test/src/common/harnessPostgres.h
D test/src/common/harnessPostgres/harness090.c
D test/src/common/harnessPostgres/harness091.c
D test/src/common/harnessPostgres/harness092.c
M test/src/common/harnessPostgres/harnessVersion.intern.h
M test/src/common/harnessPq.h
M test/src/module/build/postgresTest.c
M test/src/module/command/archiveCommonTest.c
M test/src/module/command/archiveGetTest.c
M test/src/module/command/backupTest.c
M test/src/module/command/checkTest.c
M test/src/module/command/restoreTest.c
M test/src/module/command/stanzaTest.c
M test/src/module/command/verifyTest.c
M test/src/module/db/dbTest.c
M test/src/module/info/infoPgTest.c
M test/src/module/info/manifestTest.c
M test/src/module/performance/typeTest.c
M test/src/module/postgres/interfaceTest.c

Use smaller type for decode tables.

commit   : 17ce738ff749c50f4ca721144cd9addce9e895f2    
  
author   : David Steele <[email protected]>    
date     : Sun, 11 Dec 2022 20:05:31 +0700    
  
committer: David Steele <[email protected]>    
date     : Sun, 11 Dec 2022 20:05:31 +0700    

Click here for diff

This saves a bit of space in the binary and should not have a noticeable impact on performance.  

M src/common/encode.c

Add hex encode/decoding to decode module.

commit   : 010efffb0c3c7935f789e5c560104e5a3019a28f    
  
author   : David Steele <[email protected]>    
date     : Sun, 11 Dec 2022 19:46:48 +0700    
  
committer: David Steele <[email protected]>    
date     : Sun, 11 Dec 2022 19:46:48 +0700    

Click here for diff

This replaces the bufHex() function and also allows hex to be decoded.  

M src/command/archive/push/file.c
M src/command/backup/backup.c
M src/command/backup/file.c
M src/command/restore/file.c
M src/command/verify/file.c
M src/command/verify/verify.c
M src/common/encode.c
M src/common/encode.h
M src/common/type/buffer.c
M src/common/type/buffer.h
M src/common/type/string.c
M src/info/info.c
M src/storage/gcs/write.c
M src/storage/s3/storage.c
M test/define.yaml
M test/src/common/harnessInfo.c
M test/src/common/harnessPack.c
M test/src/module/command/archivePushTest.c
M test/src/module/command/backupTest.c
M test/src/module/command/verifyTest.c
M test/src/module/common/cryptoTest.c
M test/src/module/common/encodeTest.c
M test/src/module/common/typeBufferTest.c
M test/src/module/common/typePackTest.c
M test/src/module/common/typeStringTest.c
M test/src/module/storage/s3Test.c

Rename EncodeType enum to EncodingType.

commit   : 9a9ee8e6406721c5a1825b8a25baef944802c92d    
  
author   : David Steele <[email protected]>    
date     : Sun, 11 Dec 2022 18:55:25 +0700    
  
committer: David Steele <[email protected]>    
date     : Sun, 11 Dec 2022 18:55:25 +0700    

Click here for diff

This avoids constructs such as decodeToBin(encodeBase64, ...) which are confusing since decode and encode are used in the same function call. decodeToBin(encodingBase64, ...) makes it clearer what is happening.  

M src/command/stanza/common.c
M src/common/encode.c
M src/common/encode.h
M src/common/type/buffer.c
M src/common/type/buffer.h
M src/common/type/string.c
M src/common/type/string.h
M src/storage/azure/helper.c
M src/storage/azure/storage.c
M src/storage/gcs/storage.c
M src/storage/gcs/write.c
M src/storage/s3/storage.c
M test/src/module/common/encodeTest.c
M test/src/module/common/typeBufferTest.c
M test/src/module/common/typeStringTest.c
M test/src/module/storage/azureTest.c
M test/src/module/storage/s3Test.c

Update missing flag in storage/posix test.

commit   : 1345caa3f70e24ff759967692c10c07e63f44d00    
  
author   : David Steele <[email protected]>    
date     : Wed, 7 Dec 2022 20:30:38 +0700    
  
committer: David Steele <[email protected]>    
date     : Wed, 7 Dec 2022 20:30:38 +0700    

Click here for diff

The storageNewItrP() permissions test was running twice with the errorOnMissing flag set to false. Fix by setting to true for one test.  
  
Also update the comments to be clearer about what the tests are doing and fix minor formatting.  

M test/src/module/storage/posixTest.c

Fix typos.

commit   : 81d84ab495bfeaf0102adce2425ab3a528bb8845    
  
author   : Stefan Fercot <[email protected]>    
date     : Wed, 7 Dec 2022 10:57:29 +0100    
  
committer: Stefan Fercot <[email protected]>    
date     : Wed, 7 Dec 2022 10:57:29 +0100    

Click here for diff

M src/build/help/help.xml

Add backup test harness.

commit   : 4dc632d57064420134f3a198fa18dc951d5bf574    
  
author   : David Steele <[email protected]>    
date     : Mon, 5 Dec 2022 14:15:15 +0800    
  
committer: David Steele <[email protected]>    
date     : Mon, 5 Dec 2022 14:15:15 +0800    

Click here for diff

This allows test backups to be run in other test modules.  
  
It is likely that more logic will be moved here but for now this suffices to get test backups working in the restore module.  

M test/define.yaml
A test/src/common/harnessBackup.c
A test/src/common/harnessBackup.h
M test/src/module/command/backupTest.c

Add missing header in lock module.

commit   : 96cf479d3c46b310b87e69bd2e19a30e71e5824c    
  
author   : David Steele <[email protected]>    
date     : Mon, 5 Dec 2022 14:00:25 +0800    
  
committer: David Steele <[email protected]>    
date     : Mon, 5 Dec 2022 14:00:25 +0800    

Click here for diff

M src/common/lock.h

Begin v2.44 development.

commit   : c972a9359beb5b75c4b0ea57bcb12a34fe5e7d84    
  
author   : David Steele <[email protected]>    
date     : Mon, 28 Nov 2022 17:56:59 +0800    
  
committer: David Steele <[email protected]>    
date     : Mon, 28 Nov 2022 17:56:59 +0800    

Click here for diff

M doc/resource/git-history.cache
M doc/xml/release.xml
M meson.build
M src/build/configure.ac
M src/configure
M src/version.h