pgBackRest 2.60 commit log

v2.55.0: Verification Improvements and PostgreSQL 18 Support

commit   : 6c90196e74ef0da38568f08fd7cb234d10130e79    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 21 Apr 2025 18:25:00 -0400    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 21 Apr 2025 18:25:00 -0400    

Click here for diff

Bug Fixes:  
  
* Fix block incremental restore issue on non-default repository. (Reviewed by David Christensen, Aleksander Łukasz. Reported by Aleksander Łukasz.)  
* Do not set recovery_target_timeline=current for PostgreSQL < 12. (Reviewed by Stefan Fercot.)  
* Fix expire archive range logging. (Reviewed by Stefan Fercot. Reported by Aleš Zelený.)  
* Fix error reporting for queries with no results. (Reviewed by Stefan Fercot. Reported by Susantha Bathige.)  
  
Features:  
  
* Verify recovery target timeline. (Reviewed by Stefan Fercot.)  
* Allow verification of a specified backup. (Contributed by Maxim Michkov. Reviewed by David Steele.)  
* Add support for S3/GCS requester pays. (Contributed by Timothée Peignier. Reviewed by David Steele.)  
* PostgreSQL 18 experimental support. (Reviewed by Stefan Fercot.)  
* Allow connections to PostgreSQL on abstract domain sockets. (Reviewed by Chris Bandy. Suggested by Chris Bandy.)  
* Add numeric output to version command. (Contributed by Stefan Fercot. Reviewed by David Steele.)  
  
Improvements:  
  
* Allow backup command to operate on remote repositories. (Reviewed by Stefan Fercot.)  
* Use lz4 for protocol compression. (Reviewed by Stefan Fercot.)  
* Calculate content-md5 on S3 only when required. (Reviewed by David Christensen.)  
* Warn when a value for a multi-key option is overwritten. (Reviewed by David Christensen, Stefan Fercot.)  
* Add detail logging for expired archive path. (Contributed by Stefan Fercot. Reviewed by David Steele.)  
* Remove support for PostgreSQL 9.4. (Reviewed by Stefan Fercot.)  
* Remove autoconf/make build. (Reviewed by David Christensen.)  
  
Documentation Improvements:  
  
* Fix documentation for specifying multiple stanzas with tls-server-auth. (Reviewed by David Christensen, Stefan Fercot. Suggested by Terry MacAndrew.)  
* Clarify incremental backup expiration. (Reviewed by Stefan Fercot.)  
* Clarify requirement for local/remote pgBackRest versions to match. (Contributed by Greg Clough. Reviewed by David Steele.)  
* Add FAQ about exporting self-contained cluster. (Contributed by Stefan Fercot. Reviewed by David Steele.)  
* Caveat --tablespace-map-all regarding tablespace creation. (Reviewed by Stefan Fercot, Christophe Courtois. Suggested by Christophe Courtois.)  
* Clarify behavior of --repo-retention-full-type. (Reviewed by Antoine Beaupré. Suggested by Antoine Beaupré.)  
* Change --process-max recommendation for object stores to --repo-bundle. (Reviewed by Stefan Fercot.)  
* Update unix_socket_directory to unix_socket_directories. (Contributed by hyunkyu han. Reviewed by David Steele.)  
* Recommend not placing spool-path within pg_xlog/pg_wal. (Reviewed by Martín Marqués, Don Seiler. Suggested by Martín Marqués.)  

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

Fix incorrect not-equal comparison in TEST_RESULT_Z_NE().

commit   : 4bb7cb1ac65a135e3f311ef288f2ad946493266b    
  
author   : Yegor <yegor.zhmak@gmail.com>    
date     : Mon, 21 Apr 2025 20:02:56 +0700    
  
committer: GitHub <noreply@github.com>    
date     : Mon, 21 Apr 2025 20:02:56 +0700    

Click here for diff

This comparison was not being used for strings in the tests but best to fix it so it does not cause confusion in the future.

M doc/xml/release/2025/2.55.0.xml
M test/src/common/harnessTest.c

Add FAQ about exporting self-contained cluster.

commit   : 9386920b79971347c6c57589190bf09b591d8b4d    
  
author   : Stefan Fercot <pgstef@fercot.be>    
date     : Wed, 16 Apr 2025 19:26:15 +0200    
  
committer: GitHub <noreply@github.com>    
date     : Wed, 16 Apr 2025 19:26:15 +0200    

Click here for diff

M doc/xml/faq.xml
M doc/xml/release/2025/2.55.0.xml

Fix highlight error in user guide.

commit   : c2f64bb03bdbb2ce883041118dbcfd79da3f1307    
  
author   : David Steele <david@pgbackrest.org>    
date     : Tue, 15 Apr 2025 16:50:40 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Tue, 15 Apr 2025 16:50:40 -0500    

Click here for diff

87776bc9 updated the RHEL documentation to PostgreSQL 13/14 but did not update recovery highlighting to be compatible with RHEL. This was not caught because the RHEL documentation was being build as PDF, which does not do highlighting.  
  
Instead build the RHEL documentation as HTML in the first stage (and PDF in the second) so the error is caught.  
  
Finally, fix the RHEL documentation to generate the highlight by concatenating the log.  

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

Clarify incremental backup expiration.

commit   : 8bdba747981e8805a9bf355050f70cdf19e9babc    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 14 Apr 2025 13:34:35 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Mon, 14 Apr 2025 13:34:35 -0500    

Click here for diff

The documentation was a bit misleading regarding how incremental backups are expired. Update the misleading part ("Differential and Incremental backups are count-based...") and move the explanation of how incremental expiration works out of differential expiration into the introductory paragraph.  
  
Also add a note about how full backups are considered as differential for the purpose of expiration.

M doc/xml/release/2025/2.55.0.xml
M doc/xml/user-guide.xml
M src/build/help/help.xml

PostgreSQL 18 experimental support.

commit   : 565d2e0c47cd21df890a40b3a94a8c865bed76d9    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 14 Apr 2025 12:29:31 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Mon, 14 Apr 2025 12:29:31 -0500    

Click here for diff

Support is experimental since PostgreSQL 18 is still in development and has not released a beta, but it may be useful for testing.

M doc/xml/release/2025/2.55.0.xml
M src/build/postgres/postgres.yaml
M src/postgres/interface/version.vendor.h
M src/postgres/version.auto.h
M test/container.yaml
M test/lib/pgBackRestTest/Common/ContainerTest.pm
M test/lib/pgBackRestTest/Common/DbVersion.pm
M test/lib/pgBackRestTest/Common/VmTest.pm
M test/src/common/harnessPostgres.c
M test/src/common/harnessPostgres.h
A test/src/common/harnessPostgres/harness180.c
M test/src/module/integration/allTest.c
M test/src/module/postgres/interfaceTest.c

Another fix for integration tests on alternate architectures.

commit   : 019e4cf8a779ee2572a5227ef2d80c3036f877f9    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 14 Apr 2025 10:46:55 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 14 Apr 2025 10:46:55 -0500    

Click here for diff

37544da5 missed another place where 57ffd2df had accidentally hard-coded the integration test architecture to x86_64.  
  
Fix the test code to use the correct image based on architecture.  

M test/src/common/harnessHost.c

Enable format-overflow=2 compiler warning.

commit   : 48a43e76e2657bbdd871268124c5580eb7ce7caa    
  
author   : David Steele <david@pgbackrest.org>    
date     : Fri, 11 Apr 2025 18:39:56 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Fri, 11 Apr 2025 18:39:56 -0500    

Click here for diff

Warn about calls to formatted input/output functions such as sprintf and vsprintf that might overflow the destination buffer.  
  
This warning found a few short float buffers. In practice these are unlikely to ever be a problem based on our float usage but best to be safe.  
  
Note that this warning only requires the buffer size to be 317 but it must be 318 to prevent warnings from -Wformat-truncation=2. We are not ready to enable that warning yet but seems better to get the buffer correct now.  

M meson.build
M src/common/type/convert.h
M src/common/type/string.c
M test/src/common/harnessTest.c

Remove implied -Wformat-nonliteral warning.

commit   : 5fe23ff07b0e6e1bea9f36d49b3f03a62a7be861    
  
author   : David Steele <david@pgbackrest.org>    
date     : Fri, 11 Apr 2025 17:02:14 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Fri, 11 Apr 2025 17:02:14 -0500    

Click here for diff

-Wformat-nonliteral is already implied by -format=2.  

M meson.build

Remove -Wno-implicit-fallthrough and explicitly mark fallthrough.

commit   : 9fba07c26dc5ff353f86afc7f7bdf61edf1c8781    
  
author   : David Steele <david@pgbackrest.org>    
date     : Fri, 11 Apr 2025 16:52:45 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Fri, 11 Apr 2025 16:52:45 -0500    

Click here for diff

Last time we tried this the markered seems a bit unreliable but __attribute__((fallthrough)) appears to work pretty well.  

M meson.build
M src/common/type/stringId.c
M src/storage/list.c

Remove unmaintained/unused development environment build files.

commit   : a076ee63bd99d1af293c30645f79893579382060    
  
author   : David Steele <david@pgbackrest.org>    
date     : Thu, 10 Apr 2025 15:29:37 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Thu, 10 Apr 2025 15:29:37 -0500    

Click here for diff

The Vagrantfile has not been maintained in years and the Dockerfile is only used by a single developer. There are instructions for building a development environment in CONTRIBUTING.md so these build files are no longer required.  

D test/Dockerfile
D test/Vagrantfile

Recommend not placing spool-path within pg_xlog/pg_wal.

commit   : dd3a7d99a78d0d604967d90e8a8dbf8915432896    
  
author   : David Steele <david@pgbackrest.org>    
date     : Thu, 10 Apr 2025 12:08:35 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Thu, 10 Apr 2025 12:08:35 -0500    

Click here for diff

This is generally not a good idea and it can cause problems for PostgreSQL tools such as pg_rewind.

M doc/xml/release/2025/2.55.0.xml
M doc/xml/release/contributor.xml
M src/build/help/help.xml

Warn when a value for a multi-key option is overwritten.

commit   : cab4d6fd5c775d6e1a9cd9889d825eee667b5322    
  
author   : David Steele <david@pgbackrest.org>    
date     : Thu, 10 Apr 2025 10:26:50 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Thu, 10 Apr 2025 10:26:50 -0500    

Click here for diff

Some options can contain multiple key/value pairs. However, if if the key is specified again the value will be silently overwritten. In most cases one value per key is appropriate, but it makes sense to warn the user about the overwrite.

M doc/xml/release/2025/2.55.0.xml
M src/config/parse.c
M test/src/module/config/parseTest.c

Allow connections to PostgreSQL on abstract domain sockets.

commit   : 68f22aea6665b9dcbe76dbfaa731f37187e1ce20    
  
author   : David Steele <david@pgbackrest.org>    
date     : Wed, 9 Apr 2025 14:50:16 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Wed, 9 Apr 2025 14:50:16 -0500    

Click here for diff

Currently the pg-socket-path option is required to be a valid absolute path but this precludes the use of abstract domain sockets.  
  
Set the option type to string so abstract domain sockets are allowed. This removes some validation but libpq will report if the path is invalid and we don't use it for any other purpose.

M doc/xml/release/2025/2.55.0.xml
M src/build/config/config.yaml
M src/config/parse.auto.c.inc
M test/src/module/config/parseTest.c

Calculate content-md5 on S3 only when required.

commit   : 20bfd14b73ad6d75b6fb1169565b18dcfa183c9b    
  
author   : David Steele <david@pgbackrest.org>    
date     : Wed, 9 Apr 2025 12:27:27 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Wed, 9 Apr 2025 12:27:27 -0500    

Click here for diff

The content-md5 header was generated for all requests with content but it is only required for batch delete requests. It is not clear why this header is required when x-amz-content-sha256 is also provided or why it  
is required only for this request but the documentation is clear on the matter. However, the content for these requests is relatively small compared to uploading files so omitting content-md5 where possible will  
save some CPU cycles.  
  
Current AWS S3 and recent Minio don't complain if this header is missing but since it is still required by older versions of Minio and it is specified in the documentation for batch delete it is makes sense to  
keep it.

M doc/xml/release/2025/2.55.0.xml
M src/storage/s3/storage.c
M src/storage/s3/storage.intern.h
M test/src/module/storage/s3Test.c

Add LSTDEF() macro.

commit   : c925832e1737f1b5cac347c482a725a87f2237cb    
  
author   : David Steele <david@pgbackrest.org>    
date     : Wed, 9 Apr 2025 12:02:19 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Wed, 9 Apr 2025 12:02:19 -0500    

Click here for diff

This macro allows static List objects to be created which simplifies usage when passing lists to functions. Also, since List objects are commonly used this makes the code base a bit more consistent.  
  
For now skip static lists that are only used locally within a function since the benefit is not as clear.  

M src/command/backup/backup.c
M src/command/local/local.c
M src/command/remote/remote.c
M src/common/type/list.c
M src/common/type/list.h
M src/info/manifest.c
M src/info/manifest.h
M src/protocol/server.c
M src/protocol/server.h
M src/storage/remote/protocol.c
M src/storage/remote/protocol.h
M test/src/common/harnessProtocol.c
M test/src/common/harnessProtocol.h
M test/src/module/command/archiveGetTest.c
M test/src/module/command/archivePushTest.c
M test/src/module/command/backupTest.c
M test/src/module/command/manifestTest.c
M test/src/module/command/restoreTest.c
M test/src/module/command/verifyTest.c
M test/src/module/common/typeListTest.c
M test/src/module/config/protocolTest.c
M test/src/module/db/dbTest.c
M test/src/module/info/manifestTest.c
M test/src/module/performance/storageTest.c
M test/src/module/protocol/protocolTest.c
M test/src/module/storage/remoteTest.c

Fix documentation for specifying multiple stanzas with tls-server-auth.

commit   : 53a45d25c3e60e5067010b2676f5d6216638fbe3    
  
author   : David Steele <david@pgbackrest.org>    
date     : Tue, 8 Apr 2025 10:45:06 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Tue, 8 Apr 2025 10:45:06 -0500    

Click here for diff

The prior documentation said that multiple stanzas should be specified by repeating the tls-server-auth option. This is incorrect -- in fact a comma-separated list of stanza should be used.  
  
Fix the documentation and add a test to confirm this behavior.  
  
In passing add some const qualifiers that were missing in the relevant code.

M doc/xml/release/2025/2.55.0.xml
M doc/xml/release/contributor.xml
M src/build/help/help.xml
M src/protocol/helper.c
M test/src/module/command/serverTest.c

Fix integration tests on alternate architectures.

commit   : 37544da56c711fc0a344d0a292488d4265b9cabc    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 7 Apr 2025 11:57:00 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 7 Apr 2025 11:57:00 -0500    

Click here for diff

57ffd2df accidentally hard-coded the integration test architecture to x86_64 and it was not noticed because in CI all the integration tests run on that architecture.  
  
Fix the test code to retrieve the current architecture and use it for integration tests.  

M test/src/command/test/build.c
M test/src/command/test/build.h
M test/src/command/test/test.c
M test/src/common/harnessHost.c
M test/src/common/harnessTest.c
M test/src/common/harnessTest.h
M test/src/common/harnessTest.intern.h
M test/src/module/test/testTest.c
M test/src/test.c

Remove extraneous const from cvtIntToZ() prototype.

commit   : e18ca19895bd3dbb0a6718bb6f01b9e43010fbb7    
  
author   : Yegor <yegor.zhmak@gmail.com>    
date     : Fri, 4 Apr 2025 22:26:03 +0700    
  
committer: GitHub <noreply@github.com>    
date     : Fri, 4 Apr 2025 22:26:03 +0700    

Click here for diff

M doc/xml/release/2025/2.55.0.xml
M src/common/type/convert.h

Fix test logging in storageHelperDryRunInit().

commit   : aeea81a3883e320d071f72152b86cff9944dd50f    
  
author   : Yegor <yegor.zhmak@gmail.com>    
date     : Fri, 4 Apr 2025 22:07:32 +0700    
  
committer: GitHub <noreply@github.com>    
date     : Fri, 4 Apr 2025 22:07:32 +0700    

Click here for diff

M doc/xml/release/2025/2.55.0.xml
M src/storage/helper.c

Revert "full/incremental backup method".

commit   : cc50e1aecd0ba7b35b451c97ac082fbd3b46591b    
  
author   : David Steele <david@pgbackrest.org>    
date     : Wed, 2 Apr 2025 15:25:23 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Wed, 2 Apr 2025 15:25:23 -0500    

Click here for diff

This method was introduced in cad595f but on further reflection it does not seem worth the added complexity just to make restore consistency faster without improving the speed of the overall backup. The most common recovery case is PITR and this method produces diminishing returns as the recovery time gets further from the backup end time.  
  
A better solution (not implemented here) is to copy unmodified files from prior backups. This is much faster than recopying and compressing files from the cluster (especially on object stores with a copy command) and can even be done after the backup window to further reduce WAL replay required for consistency. It also reduces load on the host where the backup is made.

M doc/xml/release/2025/2.55.0.xml
M src/build/config/config.yaml
M src/build/help/help.xml
M src/command/backup/backup.c
M src/command/backup/file.c
M src/common/time.h
M src/config/config.auto.h
M src/config/parse.auto.c.inc
M src/info/manifest.c
M src/info/manifest.h
M src/postgres/interface.h
M src/postgres/interface/version.intern.h
M test/src/common/harnessBackup.c
M test/src/common/harnessBackup.h
M test/src/common/harnessHost.c
M test/src/common/harnessHost.h
M test/src/common/harnessPostgres/harnessVersion.intern.h
M test/src/module/command/backupTest.c
M test/src/module/command/manifestTest.c
M test/src/module/info/manifestTest.c
M test/src/module/integration/allTest.c
M test/src/module/postgres/interfaceTest.c

Set noResetLogLevel in config/parse unit tests where required.

commit   : 4a42eec552233f34e0ace251e201a4e7e5021f21    
  
author   : David Steele <david@pgbackrest.org>    
date     : Wed, 2 Apr 2025 11:59:38 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Wed, 2 Apr 2025 11:59:38 -0500    

Click here for diff

This prevents the logging from getting reset so later tests can validate warnings.  

M test/src/module/config/parseTest.c

Use latest Minio image for testing.

commit   : 33655095f469d37a34aa7ed33855d1b2fa2e529c    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 31 Mar 2025 19:30:41 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 31 Mar 2025 19:30:41 -0500    

Click here for diff

It has been a while since a Minio bug has broken the tests so go back to testing against the latest version until the trust is broken again.  

M doc/xml/user-guide.xml
M test/src/common/harnessHost.c

Fix instances of "of of".

commit   : dcfe30e322091dae49b00d77c731c9b31f1ae7dd    
  
author   : albertchae <217050+albertchae@users.noreply.github.com>    
date     : Mon, 31 Mar 2025 12:18:29 -0700    
  
committer: GitHub <noreply@github.com>    
date     : Mon, 31 Mar 2025 12:18:29 -0700    

Click here for diff

M doc/xml/release/2017/1.26.xml
M doc/xml/release/2025/2.55.0.xml
M doc/xml/release/contributor.xml
M doc/xml/user-guide.xml

Update unix_socket_directory to unix_socket_directories.

commit   : b28ae98cec7ae7e881e6476c1cba1ba7e1abc358    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 31 Mar 2025 12:24:03 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 31 Mar 2025 12:24:03 -0500    

Click here for diff

unix_socket_directory has not been valid since PostgreSQL 9.2 and since 9.5 is now the minimum supported version there is no reason to document both.  

M doc/xml/release/2025/2.55.0.xml
M doc/xml/release/contributor.xml
M src/build/help/help.xml

Allow verification of a specified backup.

commit   : e4def8845eb5c3fe9fb8cc44d9f64766cfb348c2    
  
author   : Maxim Michkov <m.michkov@arenadata.io>    
date     : Wed, 26 Mar 2025 17:44:29 +0300    
  
committer: GitHub <noreply@github.com>    
date     : Wed, 26 Mar 2025 17:44:29 +0300    

Click here for diff

Add support for the verify command --set option. This (internal) option was already accepted without errors but was not implemented.  
  
The default behavior for verify is to check all the backups present. With the --set option only the specified backup will be verified. If the specified backup label is not valid an error is added to the result and verification is skipped. In addition, only WAL required to make the specified backup consistent will be verified.

M doc/xml/release/2025/2.55.0.xml
M doc/xml/release/contributor.xml
M src/build/config/config.yaml
M src/command/verify/verify.c
M test/define.yaml
M test/src/module/command/verifyTest.c

Update verify command summary.

commit   : 945c7d1eb67a97c00c32d8f121bca93d90c3ec80    
  
author   : David Steele <david@pgbackrest.org>    
date     : Tue, 25 Mar 2025 12:43:32 -0600    
  
committer: David Steele <david@pgbackrest.org>    
date     : Tue, 25 Mar 2025 12:43:32 -0600    

Click here for diff

The prior text implied that verify could only operate on a single repository. Make the summary more general to indicate that the command can work on any repository.  

M src/build/help/help.xml
M test/src/module/command/helpTest.c

Strip version from RHEL label in user guide.

commit   : 1cfafa386c860a8f756c658130de869446445cdd    
  
author   : David Steele <david@pgbackrest.org>    
date     : Tue, 25 Mar 2025 11:00:53 -0600    
  
committer: David Steele <david@pgbackrest.org>    
date     : Tue, 25 Mar 2025 11:00:53 -0600    

Click here for diff

RHEL 7 is EOL so remove it from the label. Rather than update the version range just remove it from the label since the user guide is generally applicable to RHEL.  

M doc/xml/user-guide.xml

Update PostgresQL versions in user guide.

commit   : 87776bc9cfb4af369ed22d8a116145cb1e5a5eae    
  
author   : David Steele <david@pgbackrest.org>    
date     : Tue, 25 Mar 2025 10:28:46 -0600    
  
committer: David Steele <david@pgbackrest.org>    
date     : Tue, 25 Mar 2025 10:28:46 -0600    

Click here for diff

PostgreSQL 12 is EOL and no longer available in the yum.postgresql.org repository.  
  
Update the base and update versions of the RHEL and Debian documentation to better cover supported versions.  

M doc/xml/user-guide.xml

Clarify behavior of --repo-retention-full-type.

commit   : 84eb9a742dcf75f071e011946263dedaa985099e    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 24 Mar 2025 12:21:31 -0600    
  
committer: GitHub <noreply@github.com>    
date     : Mon, 24 Mar 2025 12:21:31 -0600    

Click here for diff

Make some clarifications and add explicit documentation for repo-retention-full-type=count.

M doc/xml/release/2025/2.55.0.xml
M doc/xml/release/contributor.xml
M src/build/help/help.xml

Fix block incremental restore issue on non-default repository.

commit   : 5d2c67c3c6975ea3ed08c7425f6e410ae378913f    
  
author   : David Steele <david@pgmasters.net>    
date     : Fri, 21 Mar 2025 10:37:20 -0600    
  
committer: GitHub <noreply@github.com>    
date     : Fri, 21 Mar 2025 10:37:20 -0600    

Click here for diff

If the selected backup to restore was not in the default (lowest number) repository and block incremental was used, then restore would erroneously try to load the file super block list from the default repository. Specifying --repo would fix this since it changed the default repository.  
  
Fix by updating the super block read to the specified repository.

M doc/xml/release/2025/2.55.0.xml
M doc/xml/release/contributor.xml
M src/command/restore/file.c
M test/src/module/command/restoreTest.c

Fix missing return in FUNCTION_LOG_RETURN_VOID().

commit   : 723f900eaa41d58edc5cc58444029ab7c272acb1    
  
author   : Yegor <yegor.zhmak@gmail.com>    
date     : Fri, 21 Mar 2025 22:01:02 +0700    
  
committer: GitHub <noreply@github.com>    
date     : Fri, 21 Mar 2025 22:01:02 +0700    

Click here for diff

This macro is only ever called last in functions so this is not an active issue, but it makes sense to fix since it would pose a risk for future development.

M doc/xml/release/2025/2.55.0.xml
M src/common/debug.h

Fix test logging.

commit   : d10ad3780a46ae321aa1db4f146655eba1cfda8b    
  
author   : Yegor <yegor.zhmak@gmail.com>    
date     : Thu, 20 Mar 2025 00:17:59 +0700    
  
committer: GitHub <noreply@github.com>    
date     : Thu, 20 Mar 2025 00:17:59 +0700    

Click here for diff

M doc/xml/release/2025/2.55.0.xml
M src/storage/helper.c

Fix comments in unit tests.

commit   : f00c0d4e853a2384fe9e333daa640659e6cd6d31    
  
author   : Yegor <yegor.zhmak@gmail.com>    
date     : Wed, 19 Mar 2025 22:34:32 +0700    
  
committer: GitHub <noreply@github.com>    
date     : Wed, 19 Mar 2025 22:34:32 +0700    

Click here for diff

M doc/xml/release/2025/2.55.0.xml
M doc/xml/release/contributor.xml
M test/src/module/common/userTest.c

Add numeric output to version command.

commit   : 750a051b7aeccc3dd7ae9c07af2c73cb25057de9    
  
author   : Stefan Fercot <pgstef@fercot.be>    
date     : Fri, 28 Feb 2025 23:53:03 +0100    
  
committer: GitHub <noreply@github.com>    
date     : Fri, 28 Feb 2025 23:53:03 +0100    

Click here for diff

Add a new output option to the version command that defaults to text (current behavior) but can be set to num to output the version in a numeric format, e.g. 2055000.  
  
This makes it easier to compare and identify versions of pgBackRest.

M doc/src/build/config/config.yaml
M doc/src/build/help/help.xml
M doc/xml/release/2025/2.55.0.xml
M src/build/config/config.yaml
M src/build/help/help.xml
M src/command/help/help.c
M src/config/config.auto.h
M src/config/parse.auto.c.inc
M src/version.h
M test/src/build/config/config.yaml
M test/src/build/help/help.xml
M test/src/module/command/helpTest.c
M test/test.pl

Fix multi-architecture unit testing.

commit   : 57ffd2dfcbc47300d61d901789c6d09ffc8e25b2    
  
author   : David Steele <david@pgbackrest.org>    
date     : Fri, 28 Feb 2025 15:38:05 -0600    
  
committer: David Steele <david@pgbackrest.org>    
date     : Fri, 28 Feb 2025 15:38:05 -0600    

Click here for diff

The Github action we were using for multi-architecture testing stopped working. The project does not seem to be getting regular maintenance so it seems better to roll multi-architecture testing into our existing container builds.  
  
Introduce multi-architecture builds and testing into our test framework. For now this only works for unit tests -- integration tests will still only run on x86_64. That could be updated in the future but since emulation is so slow it is not clear if it would be useful.  
  
Also fix an invalid 32-bit checksum. The d11 test had not been running as 32-bit since d8ff89a so the checksum was not updated when it should have been in 48f511d.  

M .github/workflows/test.yml
M test/container.yaml
M test/lib/pgBackRestTest/Common/ContainerTest.pm
M test/lib/pgBackRestTest/Common/JobTest.pm
M test/lib/pgBackRestTest/Common/VmTest.pm
M test/src/common/harnessHost.c
M test/src/module/command/backupTest.c
M test/test.pl

Add support for GCS requester pays.

commit   : 814bf487c3955e877d226faaa22324d3c79863b2    
  
author   : Timothée Peignier <timothee.peignier@icloud.com>    
date     : Tue, 25 Feb 2025 14:37:22 -0800    
  
committer: GitHub <noreply@github.com>    
date     : Tue, 25 Feb 2025 14:37:22 -0800    

Click here for diff

GCS user projects allow the bucket requester to be billed rather than the bucket owner. This is useful for hosted services that create backups and want to provide direct (probably read-only) access to the backups.

M doc/xml/release/2025/2.55.0.xml
M src/build/config/config.yaml
M src/build/help/help.xml
M src/config/config.auto.h
M src/config/parse.auto.c.inc
M src/storage/gcs/helper.c
M src/storage/gcs/storage.c
M src/storage/gcs/storage.h
M test/src/common/harnessHost.c
M test/src/module/command/helpTest.c
M test/src/module/storage/gcsTest.c

Add support for S3 requester pays.

commit   : 4db0263fd63274a8168eb4de17b320d2f86251a2    
  
author   : Timothée Peignier <timothee.peignier@icloud.com>    
date     : Tue, 25 Feb 2025 14:12:28 -0800    
  
committer: GitHub <noreply@github.com>    
date     : Tue, 25 Feb 2025 14:12:28 -0800    

Click here for diff

S3 requester pays allows the bucket requester to be billed rather than the bucket owner. This is useful for hosted services that create backups and want to provide direct (probably read-only) access to the backups.

M doc/xml/release/2025/2.55.0.xml
M src/build/config/config.yaml
M src/build/help/help.xml
M src/config/config.auto.h
M src/config/parse.auto.c.inc
M src/storage/s3/helper.c
M src/storage/s3/storage.c
M src/storage/s3/storage.h
M test/src/common/harnessHost.c
M test/src/module/command/helpTest.c
M test/src/module/storage/s3Test.c

Remove unneeded verbiage from option descriptions.

commit   : 7941d6506e26cbfa1979b636554b1b5377f05c20    
  
author   : David Steele <david@pgbackrest.org>    
date     : Tue, 25 Feb 2025 15:36:55 -0600    
  
committer: David Steele <david@pgbackrest.org>    
date     : Tue, 25 Feb 2025 15:36:55 -0600    

Click here for diff

"Setting this option" didn't really add anything and was inconsistent with other option descriptions.  

M src/build/help/help.xml

Fix case in option summary.

commit   : f2bbfad29cee8468239d2340d5cf12204e352d10    
  
author   : David Steele <david@pgbackrest.org>    
date     : Fri, 21 Feb 2025 08:24:57 -0600    
  
committer: David Steele <david@pgbackrest.org>    
date     : Fri, 21 Feb 2025 08:24:57 -0600    

Click here for diff

M src/build/help/help.xml
M test/src/module/command/helpTest.c

Add detail logging for expired archive path.

commit   : 2155a12a3d861645de5618518350f90962fbc26d    
  
author   : Stefan Fercot <stefan.fercot@dalibo.com>    
date     : Mon, 17 Feb 2025 18:51:51 +0100    
  
committer: GitHub <noreply@github.com>    
date     : Mon, 17 Feb 2025 18:51:51 +0100    

Click here for diff

When archive expiration has a large number of files to remove it may look like the process has hung, at least at higher log levels.  
  
Add a log message at detail level to show that progress is being made.

M doc/xml/release/2025/2.55.0.xml
M src/command/expire/expire.c
M test/src/module/command/expireTest.c

Add detail logging to expire test.

commit   : 4dcfa9ef59c5e75c6c0ee83390c64b9a3d4af1fc    
  
author   : Stefan Fercot <stefan.fercot@dalibo.com>    
date     : Mon, 17 Feb 2025 10:56:57 -0600    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 17 Feb 2025 10:56:57 -0600    

Click here for diff

This is required to test logging to be added in a subsequent commit.  

M test/src/module/command/expireTest.c

Clarify requirement for local/remote pgBackRest versions to match.

commit   : 82299eb4cd997524eeddef170ad99669ed6651cf    
  
author   : Greg Clough <greg.clough@ihsmarkit.com>    
date     : Sat, 15 Feb 2025 18:00:00 +0000    
  
committer: GitHub <noreply@github.com>    
date     : Sat, 15 Feb 2025 18:00:00 +0000    

Click here for diff

M doc/xml/release/2025/2.55.0.xml
M doc/xml/release/contributor.xml
M doc/xml/user-guide.xml

Fix expire archive range logging.

commit   : 47f050f8fd816e57326d881f4253d8a13c0f8da6    
  
author   : David Steele <david@pgmasters.net>    
date     : Sat, 15 Feb 2025 12:17:04 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Sat, 15 Feb 2025 12:17:04 -0500    

Click here for diff

The prior logging only output the last path to be removed since start was overwritten as each path was deleted. This had no affect on expire functionality but was confusing since many more files might be expired than the logs indicated.  
  
Fix logging so the correct start path is logged.

M doc/xml/release/2025/2.55.0.xml
M src/command/expire/expire.c
M test/src/module/command/expireTest.c

Update Cirrus-CI FreeBSD runner versions.

commit   : ef0a71d629bfd0729f3f8a55f38588ea25c64fb9    
  
author   : David Steele <david@pgbackrest.org>    
date     : Sat, 15 Feb 2025 11:02:23 -0600    
  
committer: David Steele <david@pgbackrest.org>    
date     : Sat, 15 Feb 2025 11:02:23 -0600    

Click here for diff

M .cirrus.yml

Change --process-max recommendation for object stores to --repo-bundle.

commit   : aa7210a1830825e0a3e6b6740937357341127a6f    
  
author   : David Steele <david@pgbackrest.org>    
date     : Tue, 4 Feb 2025 11:15:51 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Tue, 4 Feb 2025 11:15:51 -0500    

Click here for diff

While process-max is as useful for object stores as any other storage type, for file creation time in particular file bundling is far more effective since fewer files are created.  
  
Update the recommendation to reflect this.  

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

Verify recovery target timeline.

commit   : 922e9f0775c39b64e009251a6bec8ef9b83c190f    
  
author   : David Steele <david@pgbackrest.org>    
date     : Tue, 4 Feb 2025 10:06:17 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Tue, 4 Feb 2025 10:06:17 -0500    

Click here for diff

If the user picks an invalid timeline (or the default is invalid) they will not discover it until after the restore is complete and recovery starts. In that case they'll receive a message like this:  
  
FATAL:  requested timeline 2 is not a child of this server's history  
DETAIL:  Latest checkpoint is at 0/7000028 on timeline 1, but in the history of the requested timeline, the server forked off from that timeline at 0/600AA20.  
  
This message generally causes confusion unless one is familiar with it. In this case 1) a standby was promoted creating a new timeline 2) a new backup was made from the primary 3) the new backup was restored but could not follow the new timeline because the backup was made after the new timeline forked off. Since PostgreSQL 12 following the latest timeline has been the default so this error has become common in split brain situations.  
  
Improve pgBackRest to read the history files and provide better error messages. Now this error is thrown before the restore starts:  
  
ERROR: [058]: target timeline 2 forked from backup timeline 1 at 0/600aa20 which is before backup lsn of 0/7000028  
       HINT: was the target timeline created by accidentally promoting a standby?  
       HINT: was the target timeline created by testing a restore without --archive-mode=off?  
       HINT: was the backup made after the target timeline was created?  
  
This saves time since it happens before the restore and gives more information about what has gone wrong.  
  
If the backup timeline is not an ancestor of the target timeline the error message is:  
  
ERROR: [058]: backup timeline 6, lsn 0/4ffffff is not in the history of target timeline B  
       HINT: was the target timeline created by promoting from a timeline < latest?  
  
This situation should be rare but can happen during complex recovery scenarios where the user is explicitly setting the target time.  

M doc/xml/release/2025/2.55.0.xml
M src/command/restore/restore.c
A src/command/restore/timeline.c
A src/command/restore/timeline.h
M src/meson.build
M test/code-count/file-type.yaml
M test/define.yaml
M test/src/common/harnessHost.c
M test/src/common/harnessHost.h
M test/src/module/command/restoreTest.c
M test/src/module/integration/allTest.c

Add Coverity build to release instructions.

commit   : 322e764f295f65b2a1189e207f6115471f943b1b    
  
author   : David Steele <david@pgbackrest.org>    
date     : Thu, 30 Jan 2025 21:43:48 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Thu, 30 Jan 2025 21:43:48 -0500    

Click here for diff

M doc/RELEASE.md

Refactor backupBlockIncrMapSize() range handling to satisfy Coverity.

commit   : 6e437defa93b8bc43e93aefcc4e7320633ac9651    
  
author   : David Steele <david@pgbackrest.org>    
date     : Thu, 30 Jan 2025 14:28:28 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Thu, 30 Jan 2025 14:28:28 -0500    

Click here for diff

Coverity complained about a possible overflow of result in the prior implementation.  
  
It appears that Coverity was not able to follow the logic through the try block, but refactor and add an assertion to silence the complaint.  

M src/command/backup/backup.c
M test/src/module/command/backupTest.c

Refactor loop in restoreManifestMap() to satisfy Coverity.

commit   : 89615eee654388ea046812bfaa30d514b269c5d1    
  
author   : David Steele <david@pgbackrest.org>    
date     : Thu, 30 Jan 2025 13:59:42 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Thu, 30 Jan 2025 13:59:42 -0500    

Click here for diff

Coverity complained that decrementing targetIdx would result in it equaling UINT_MAX. While this is true it had no impact overall (at it least in the current code) since targetIdx was immediately incremented in the loop.  
  
However, Coverity's suggestion is better and safer for future code updates so it makes sense to change it.  

M src/command/restore/restore.c

Add cast to suppress Coverity complaint about volatile used in assert().

commit   : 5421ef3e92fb01efdddd235bd7a7c18d7dac6c37    
  
author   : David Steele <david@pgbackrest.org>    
date     : Thu, 30 Jan 2025 13:48:59 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Thu, 30 Jan 2025 13:48:59 -0500    

Click here for diff

Coverity had this complaint:  
  
assert_side_effect: Argument openData of ASSERT() has a side effect because the variable is volatile. The containing function might work differently in a non-debug build.  
  
It appears this can also be fixed by assigning the volatile variable to an automatic but the cast seems to work just as well.  

M src/common/io/socket/client.c

Fix error reporting for queries with no results.

commit   : d5cefb7290c34c64a2b9aa89ff04a718df4ec18b    
  
author   : David Steele <david@pgmasters.net>    
date     : Wed, 29 Jan 2025 13:48:26 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Wed, 29 Jan 2025 13:48:26 -0500    

Click here for diff

If a query that expected no results returned an error then it would incorrectly report that no results were expected because the error was interpreted as a result.  
  
Switch the order of the checks so that an error is reported instead and add a test to prevent regression.

M doc/xml/release/2025/2.55.0.xml
M doc/xml/release/contributor.xml
M src/postgres/client.c
M test/src/module/postgres/clientTest.c

Add assertions to satisfy Coverity about possible underflows.

commit   : d50b01b4852d82020b840496603d620b00ea98f9    
  
author   : David Steele <david@pgbackrest.org>    
date     : Tue, 28 Jan 2025 18:48:11 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Tue, 28 Jan 2025 18:48:11 -0500    

Click here for diff

Coverity complained about possible underflows so add assertions to demonstrate that the values in question are greater than zero.  

M src/command/backup/blockMap.c
M src/common/io/filter/group.c

Lower log level of backupDbPing()/dbPing() to trace.

commit   : e46374dc7dc90275ff2836f152fb2b976dbe0e2a    
  
author   : David Steele <david@pgbackrest.org>    
date     : Tue, 28 Jan 2025 15:30:23 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Tue, 28 Jan 2025 15:30:23 -0500    

Click here for diff

These functions get called very frequently even though they generally result in a noop at the protocol level.  
  
Lower the log level to reduce noise in the log at debug level.  

M src/command/backup/backup.c
M src/db/db.c

Caveat --tablespace-map-all regarding tablespace creation.

commit   : e625ed8be2228cb99c3801f9d1776909a2201c5a    
  
author   : David Steele <david@pgmasters.net>    
date     : Tue, 28 Jan 2025 09:14:30 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Tue, 28 Jan 2025 09:14:30 -0500    

Click here for diff

If a tablespace is created after the backup starts then it cannot be mapped using --tablespace-map-all since there is no record of it in the manifest.  
  
This would be extremely complex to fix but it can be documented.

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

Add StringId linter.

commit   : dde1b0477209512aabe1e9ca58836922a3c1661f    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 27 Jan 2025 17:14:34 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 27 Jan 2025 17:14:34 -0500    

Click here for diff

Verify that all StringIds in the project have been generated correctly.  
  
This also makes it easy to generate new StringIds by copying an existing StringId and modifying the string. The error message will provide the required value.  

M doc/src/meson.build
M src/meson.build
M test/define.yaml
A test/src/command/test/lint.c
A test/src/command/test/lint.h
M test/src/command/test/test.c
M test/src/meson.build
M test/src/module/test/testTest.c

Convert 5-bit test StringId to 6-bit.

commit   : d582739d822bbdb705a6a946db6c87675d5c2ccc    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 27 Jan 2025 15:51:57 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 27 Jan 2025 15:51:57 -0500    

Click here for diff

The original string was valid as either 5-bit or 6-bit but since we're trying to test 6-bit update the string to something only valid for 6-bit.  

M test/src/module/common/typeStringTest.c

Separate version into component parts.

commit   : 6df96f505fd0f70d84b50ad36498c3a4c05a61bc    
  
author   : David Steele <david@pgbackrest.org>    
date     : Thu, 23 Jan 2025 17:12:05 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Thu, 23 Jan 2025 17:12:05 -0500    

Click here for diff

This guarantees a consistent version representation and allows the version to be easily represented in other ways.  

M doc/lib/pgBackRestDoc/ProjectInfo.pm
M src/version.h
M test/test.pl

Use three part version in development builds.

commit   : 6776940c3bbe8b61e851921099354c4e63d80d7b    
  
author   : David Steele <david@pgbackrest.org>    
date     : Thu, 23 Jan 2025 14:55:44 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Thu, 23 Jan 2025 14:55:44 -0500    

Click here for diff

This makes the versioning more consistent and is required by a subsequent commit that will separate the version components.  

M doc/xml/release/2025/2.55.0.xml
M meson.build
M src/version.h

Update CI containers to include newest PostgreSQL patch releases.

commit   : e59385718c5bc207e96325a2f9ed06b9b4395218    
  
author   : David Steele <david@pgbackrest.org>    
date     : Thu, 23 Jan 2025 08:10:37 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Thu, 23 Jan 2025 08:10:37 -0500    

Click here for diff

M test/container.yaml

Do not set recovery_target_timeline=current for PostgreSQL < 12.

commit   : 6fbb28fa2d615576be78376c7f539921f6b8bc6a    
  
author   : David Steele <david@pgmasters.net>    
date     : Thu, 23 Jan 2025 07:58:41 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Thu, 23 Jan 2025 07:58:41 -0500    

Click here for diff

PostgreSQL < 12 defaults recovery_target_timeline to current but if current is explicitly set it behaves as if latest was set. Since current is not handled in the PostgreSQL code it looks as if there should be an error during the integer conversion but that doesn't happen due to incorrect strtoul() usage (not checking endptr).  
  
Handle this by omitting recovery_target_timeline from recovery.conf when it is explicitly set by the user to current.

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

Fix typo.

commit   : e58d468e27cb13346d50fe32af44ef12a057455b    
  
author   : David Steele <david@pgbackrest.org>    
date     : Tue, 21 Jan 2025 18:39:51 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Tue, 21 Jan 2025 18:39:51 -0500    

Click here for diff

M src/protocol/client.c

Allow backup command to operate on remote repositories.

commit   : 931435c0177ded2189903385d520d5c8819c4f5e    
  
author   : David Steele <david@pgmasters.net>    
date     : Tue, 21 Jan 2025 11:45:50 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Tue, 21 Jan 2025 11:45:50 -0500    

Click here for diff

The backup command has always been limited to working only when the repository is local. This was due to some limitations in storage (addressed in 01b81f9) and the protocol helper (addressed in 4a94b6be).  
  
Now that there a no limitations preventing this feature it makes sense to enable it. This allows for more flexibility in where backups are run.

M doc/xml/release/2025/2.55.0.xml
M src/build/config/config.yaml
M src/command/backup/backup.c
M src/command/expire/expire.c
M src/config/parse.auto.c.inc
M src/protocol/helper.c
M src/protocol/helper.h
M test/src/module/command/expireTest.c
M test/src/module/integration/allTest.c
M test/src/module/protocol/protocolTest.c

Specify length of encoding strings.

commit   : 844f91fe3f3b04464a6a7b1fc7c743800db01933    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 20 Jan 2025 15:12:27 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 20 Jan 2025 15:12:27 -0500    

Click here for diff

This saves a byte per string but more importantly makes them match the declaration of encodeHexLookup.  

M src/common/encode.c

Remove "Additional Notes" header from release notes.

commit   : 4bc9376d6fe276a3bf40a5c5e7891676a0c88392    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 20 Jan 2025 14:19:25 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 20 Jan 2025 14:19:25 -0500    

Click here for diff

This was intended to separate the code changes from documentation and test suite changes but it arguably does not add any clarity.  
  
Since documentation and test suite changes are explicitly marked as such that should be clear enough.  

M doc/lib/pgBackRestDoc/Custom/DocCustomRelease.pm

Improve hex encode performance with bytewise lookup.

commit   : 23bd392bdcf76ecadc0eb9e76b60c34580590fae    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 20 Jan 2025 14:09:54 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 20 Jan 2025 14:09:54 -0500    

Click here for diff

Previously, hex encode looked up each nibble of the input separately. Instead use a larger lookup table containing the two-byte encoding of every possible input byte, resulting in a 1/3 reduction in encoding time.  
  
Inspired by and mostly cribbed from PostgreSQL commit e24d7708.  

M doc/xml/release/2025/2.55.0.xml
M doc/xml/release/contributor.xml
M src/common/encode.c
M test/src/module/common/encodeTest.c

Merge v2.54.2 release.

commit   : 713f6657d36746221a47989ee2e6ea369fd008dd    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 20 Jan 2025 10:57:27 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 20 Jan 2025 10:57:27 -0500    

Click here for diff

M CONTRIBUTING.md
M README.md
M doc/release.pl
M doc/xml/release.xml
A doc/xml/release/2025/2.54.2.xml
M doc/xml/release/2025/2.55.0.xml
M test/code-count/file-type.yaml

Replace constant version with macro in backup test module.

commit   : 7a33d6168b2650515ded488c2e1b7eabd1d942a8    
  
author   : David Steele <david@pgbackrest.org>    
date     : Tue, 14 Jan 2025 13:10:32 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Tue, 14 Jan 2025 13:10:32 -0500    

Click here for diff

M doc/xml/release/2025/2.55.0.xml
M test/src/module/command/backupTest.c

Update runner versions on Github actions.

commit   : 6244f02bb3f44f985df5562a90400b3e7c9b9163    
  
author   : David Steele <david@pgbackrest.org>    
date     : Tue, 14 Jan 2025 10:50:48 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Tue, 14 Jan 2025 10:50:48 -0500    

Click here for diff

Ubuntu 20.04 will be EOL soon so update all actions that are using it. Update other actions as far as possible without making too many changes.  

M .github/workflows/symbol.out
M .github/workflows/test.yml

Remove extraneous const qualifier.

commit   : fd23257c6a52acd39b3d2deab8bcf905605dbc12    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 6 Jan 2025 13:50:14 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 6 Jan 2025 13:50:14 -0500    

Click here for diff

M src/db/db.h

Remove makefile formatting from editor config.

commit   : b5bb1aa72c3a2fce6b5a024a815db4a09aa421e1    
  
author   : David Steele <david@pgbackrest.org>    
date     : Sun, 5 Jan 2025 13:32:09 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Sun, 5 Jan 2025 13:32:09 -0500    

Click here for diff

This is no longer required since the makefile has been removed.  

M .editorconfig

commit   : 5fac1b405869e126330a99586364517c5917172e    
  
author   : David Steele <david@pgbackrest.org>    
date     : Thu, 2 Jan 2025 09:11:19 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Thu, 2 Jan 2025 09:11:19 -0500    

Click here for diff

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

Refactor protocol helper.

commit   : 4a94b6bef9108ab775c0070571a1fb7dd8883eeb    
  
author   : David Steele <david@pgbackrest.org>    
date     : Fri, 27 Dec 2024 13:51:50 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Fri, 27 Dec 2024 13:51:50 -0500    

Click here for diff

Simplify and improve data structures that track protocol client connections. The prior code could not store pg or repo clients but not both. We don't have a need for that yet, but tracking clients only by hostIdx was not flexible for some upcoming improvements. It is important to be able to identify and free clients very precisely.  
  
In general this code should be easier to understand and removes duplicated code for local/remote clients.  

M src/command/backup/backup.c
M src/db/helper.c
M src/protocol/helper.c
M src/protocol/helper.h
M src/protocol/parallel.c
M src/storage/helper.c
M test/src/common/harnessProtocol.c
M test/src/module/command/serverTest.c
M test/src/module/protocol/protocolTest.c
M test/src/module/storage/remoteTest.c

Fix issue after disabling bundling with block incremental enabled.

commit   : 13f23f21683eef2d309f76d76cafc1f9b3852693    
  
author   : David Steele <david@pgmasters.net>    
date     : Thu, 26 Dec 2024 12:01:59 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Thu, 26 Dec 2024 12:01:59 -0500    

Click here for diff

When bundling and block incremental are both enabled the bundleRaw flag is set to indicate that headers are omitted (whenever possible) for encryption and compression. This is intended to save space, especially when there are very large numbers of small files.  
  
If bundling is disabled this flag needs to be preserved so that existing bundles from prior backups are read correctly. However, the prior code was only saving the flag when bundling was enabled, which caused prior backups to be unreadable if bundling was disabled.  
  
Fix so that the flag is preserved and backups are not broken.

M doc/xml/release/2025/2.55.0.xml
M src/info/manifest.c
M test/src/module/command/backupTest.c
M test/src/module/info/manifestTest.c

Fix compression type in integration tests.

commit   : 9ee3b2c59309fd86e5504374ad9f195bb363736b    
  
author   : David Steele <david@pgbackrest.org>    
date     : Thu, 26 Dec 2024 10:45:11 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Thu, 26 Dec 2024 10:45:11 -0500    

Click here for diff

Due to this bug the compression type in integration tests was always set to none. There are sufficient other tests for compression that this was not masking any bugs, but it was obviously not ideal.  

M test/src/common/harnessHost.c

Move linkCreate interface function to alphabetical order.

commit   : 8b9e03d618d748e36ac006a0b0bb633930961512    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 23 Dec 2024 10:30:41 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 23 Dec 2024 10:30:41 -0500    

Click here for diff

M src/storage/remote/storage.c

Clarify behavior of multiple configuration files.

commit   : 48ecbe422da95a87c24e125f0f52bd5de2c02f6e    
  
author   : David Steele <david@pgbackrest.org>    
date     : Thu, 19 Dec 2024 13:52:59 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Thu, 19 Dec 2024 13:52:59 -0500    

Click here for diff

M doc/xml/release/2025/2.55.0.xml
M doc/xml/release/contributor.xml
M doc/xml/user-guide.xml

Clarify that unhandled errors may occur in edge cases.

commit   : 3210c9283fb7b14f26013dbea05df96e16b77e51    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 16 Dec 2024 14:55:44 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 16 Dec 2024 14:55:44 -0500    

Click here for diff

M src/build/error/error.yaml

Add missing const qualifier.

commit   : 690c9803c3fa420d62bb62eccd4ae0f29266ff11    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 16 Dec 2024 12:56:03 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 16 Dec 2024 12:56:03 -0500    

Click here for diff

M src/common/log.c

Merge v2.54.1 release.

commit   : 005c7e974f7966d49fbdc8cbdffcf819f532b96b    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 16 Dec 2024 12:04:21 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 16 Dec 2024 12:04:21 -0500    

Click here for diff

M CONTRIBUTING.md
M README.md
M doc/xml/auto/metric-coverage-report.auto.xml
M doc/xml/release.xml
A doc/xml/release/2024/2.54.1.xml
M doc/xml/release/2025/2.55.0.xml
M test/code-count/file-type.yaml

Rephrase invitation to star on Github.

commit   : 4d4d23131c75bf29655f6cd7625c25063ed09408    
  
author   : David Steele <david@pgbackrest.org>    
date     : Sun, 15 Dec 2024 11:11:04 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Sun, 15 Dec 2024 11:11:04 -0500    

Click here for diff

M doc/xml/index.xml

Change "find" to "visit" in introduction.

commit   : fbb31eefca5b7f79f55ee96517c05159a9cf7390    
  
author   : David Steele <david@pgbackrest.org>    
date     : Wed, 11 Dec 2024 10:03:52 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Wed, 11 Dec 2024 10:03:52 -0500    

Click here for diff

M doc/xml/index.xml

Remove reference to disabling network compression in the documentation.

commit   : 5c8296df066564be35d3936610ebff1c332f38da    
  
author   : David Steele <david@pgbackrest.org>    
date     : Tue, 10 Dec 2024 11:22:45 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Tue, 10 Dec 2024 11:22:45 -0500    

Click here for diff

Previously setting compress-level-network=0 would disable compression. This worked because gzip disables compression at this level but still transmits the data in gz format.  
  
lz4 does not provide similar functionality so we would need to disable the compression filter entirely. This does not seem worth it however since lz4 compression is very efficient and 0 is the default fast mode.  

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

Add missing const qualifier.

commit   : d96966065b937b595b6c45d41511f6f28e01a8e3    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 9 Dec 2024 13:19:55 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 9 Dec 2024 13:19:55 -0500    

Click here for diff

M src/command/backup/backup.c

Remove --min-gen option from test.pl.

commit   : 0e143ba7e7bf5c2d8c94fd44db57f768d0cdc72d    
  
author   : David Steele <david@pgbackrest.org>    
date     : Wed, 27 Nov 2024 17:05:31 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Wed, 27 Nov 2024 17:05:31 -0500    

Click here for diff

This option was useful for the Perl code generation and autoconf generation, which were both slow. These are both gone now and the C code generation is fast enough that there is no need to exclude it.  
  
--dry-run will still prevent certain code generation from running. This may not be necessary any more but removing it should be the subject of a separate commit.  

M .cirrus.yml
M .github/workflows/test.yml
M test/test.pl

Full/incremental backup method.

commit   : cad595f9f8e6aaa9b64c9dcad8aa878c0c72a4d6    
  
author   : David Steele <david@pgmasters.net>    
date     : Tue, 26 Nov 2024 11:23:43 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Tue, 26 Nov 2024 11:23:43 -0500    

Click here for diff

This backup method does a preliminary copy of all files that were last modified prior to a defined interval before calling pg_backup_start(). Then the backup is started as usual and the remainder of the files are copied. The advantage is that generally a smaller set of WAL will be required to make the backup consistent, provided there are some files that have not been recently modified.
  

  
The length of the prior full backup is used to determine the interval used for the preliminary copy since any files modified within this interval will likely be modified again during the backup. If no prior full backup exists then the interval is set to one day.
  

  
This feature is being committed as internal-only for the time being.

M doc/xml/release/2025/2.55.0.xml
M src/build/config/config.yaml
M src/build/help/help.xml
M src/command/backup/backup.c
M src/command/backup/file.c
M src/common/time.h
M src/config/config.auto.h
M src/config/parse.auto.c.inc
M src/db/db.c
M src/info/manifest.c
M src/info/manifest.h
M src/postgres/interface.h
M src/postgres/interface/version.intern.h
M test/src/common/harnessBackup.c
M test/src/common/harnessBackup.h
M test/src/common/harnessHost.c
M test/src/common/harnessHost.h
M test/src/common/harnessLog.c
M test/src/common/harnessLog.h
M test/src/common/harnessPostgres/harnessVersion.intern.h
M test/src/common/harnessPq.h
M test/src/module/command/backupTest.c
M test/src/module/command/manifestTest.c
M test/src/module/info/manifestTest.c
M test/src/module/integration/allTest.c
M test/src/module/postgres/interfaceTest.c

Use lz4 for protocol compression.

commit   : 0577b0301689bc19d49c4081cc652971de5da8cf    
  
author   : David Steele <david@pgmasters.net>    
date     : Tue, 26 Nov 2024 11:03:27 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Tue, 26 Nov 2024 11:03:27 -0500    

Click here for diff

lz4 provides much better compression speed and gives similar compression ratios to gz when used at low levels (the gz default was 3).

M doc/xml/release/2025/2.55.0.xml
M src/build/config/config.yaml
M src/config/parse.auto.c.inc
M src/storage/remote/read.c
M src/storage/remote/write.c
M test/src/module/command/helpTest.c
M test/src/module/config/parseTest.c

Update release notes for PostgreSQL 17 support.

commit   : 4af42d93b2a0201182d16c5163e9813635d12e3c    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 25 Nov 2024 10:38:37 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 25 Nov 2024 10:38:37 -0500    

Click here for diff

Accurately reflect when different versions of PostgreSQL were supported since an update was required for beta3.  

M doc/resource/git-history.cache
M doc/xml/release/2024/2.52.xml
M doc/xml/release/2024/2.53.1.xml

Fix typos.

commit   : c351263a1d09829c91fc3f9016fefe666b5b6c62    
  
author   : Kian-Meng Ang <kianmeng.ang@gmail.com>    
date     : Sat, 23 Nov 2024 04:25:43 +0800    
  
committer: GitHub <noreply@github.com>    
date     : Sat, 23 Nov 2024 04:25:43 +0800    

Click here for diff

Found using `codespell -S *.eps,*.cache,*.xml -L inout,te,fo,bload,fase,collet,hilight,debians,keep-alives` and `typos --hidden --format brief`.

M doc/lib/pgBackRestDoc/Common/DocConfig.pm
M doc/lib/pgBackRestDoc/Common/DocExecute.pm
M doc/xml/user-guide.xml
M src/command/restore/restore.c
M src/command/verify/verify.c
M src/common/memContext.h
M src/config/config.c
M src/config/parse.c
M src/info/manifest.c
M src/storage/remote/protocol.c
M src/storage/sftp/storage.c
M src/storage/storage.h
M test/lib/pgBackRestTest/Common/ContainerTest.pm
M test/src/common/harnessDebug.h
M test/src/common/harnessHost.h
M test/src/common/harnessLibSsh2.h
M test/src/common/harnessLog.c
M test/src/common/harnessProtocol.h
M test/src/common/harnessStorage.c
M test/src/module/command/backupTest.c
M test/src/module/command/restoreTest.c
M test/src/module/db/dbTest.c
M test/src/module/info/manifestTest.c
M test/src/module/performance/storageTest.c
M test/src/module/storage/sftpTest.c

Update Fedora test image to Fedora 41.

commit   : 7f2dfc021c6689a5bddfbd7ed85d64ae93c01324    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 18 Nov 2024 13:33:03 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 18 Nov 2024 13:33:03 -0500    

Click here for diff

M .github/workflows/test.yml
M test/container.yaml
M test/lib/pgBackRestTest/Common/ContainerTest.pm
M test/lib/pgBackRestTest/Common/VmTest.pm

Enable missing-variable-declarations compiler warning.

commit   : 33d7681347ccdbaf2c026fd482ed3949d75d447a    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 18 Nov 2024 10:58:00 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 18 Nov 2024 10:58:00 -0500    

Click here for diff

Warn if a global variable is defined without a previous declaration. Use this option to detect global variables that do not have a matching extern declaration in a header file.  

M meson.build
M src/storage/gcs/storage.c
M test/src/common/harnessLibSsh2.c
M test/src/common/harnessLog.c
M test/src/common/harnessServer.c
M test/src/common/harnessTest.c
M test/src/test.c

Add wait for async archive log exists check in integration test.

commit   : 4ae160aa34747128d2a45aa1f31893ebd7b86f3b    
  
author   : David Steele <david@pgbackrest.org>    
date     : Fri, 15 Nov 2024 09:44:15 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Fri, 15 Nov 2024 09:44:15 -0500    

Click here for diff

They may be a small delay before the log exists, especially on slower platforms. Add a wait so the test does not fail in this case.  

M test/src/common/harnessStorage.c
M test/src/common/harnessStorage.h
M test/src/module/integration/allTest.c

Allow negative values for integer options.

commit   : 12fe1393159bf63724279f03d43bc0a69ad2b636    
  
author   : David Steele <david@pgbackrest.org>    
date     : Wed, 13 Nov 2024 17:48:14 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Wed, 13 Nov 2024 17:48:14 -0500    

Click here for diff

This mostly worked but there was a rendering issue that prevented compilation.  

M src/build/config/render.c
M test/src/module/build/configTest.c

Move compression driver param list management to a common module.

commit   : d7c2d2ba1b97bb05ef7d97c4622c92e97282cafd    
  
author   : David Steele <david@pgbackrest.org>    
date     : Wed, 13 Nov 2024 17:28:21 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Wed, 13 Nov 2024 17:28:21 -0500    

Click here for diff

This code was duplicated in each driver so this means less duplication.  
  
In addition, some drivers were not creating a parameter list for decompression which meant they could not be used remotely. This is not a currently a bug since none of them were being used remotely, but it was a blocker for using lz4 for protocol compression.  

M doc/src/meson.build
M src/common/compress/bz2/compress.c
M src/common/compress/bz2/decompress.c
A src/common/compress/common.c
A src/common/compress/common.h
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/meson.build
M test/define.yaml
M test/src/meson.build

Stabilize async archiving in integration tests.

commit   : 274bb24a5ab122b599d31dd6cee197995a564c46    
  
author   : Viktor Kurilko <v.kurilko@arenadata.io>    
date     : Wed, 13 Nov 2024 21:56:42 +0700    
  
committer: GitHub <noreply@github.com>    
date     : Wed, 13 Nov 2024 21:56:42 +0700    

Click here for diff

The integration tests could fail if:
  

  
1. After restoring the PostgreSQL instance the recovery process starts, which calls asynchronous archive-get.
  
2. After archive-get checks the existence of the queue directory, but before writing the WAL file, there are restores when the next test is begun, which leads to the deletion of the queue directory.
  
3. Since the directory no longer exists, writing the WAL file will fail, and archive-get will write the error file to the queue.
  
4. A new PostgreSQL instance will start and the recovery process will begin, which requests the WAL file.
  
5. The new archive-get looks into the queue directory, finds the error file, and throws out the error, after which the PostgreSQL recovery fails because the previous archive-get background process has not finished yet.
  

  
This patch fixes the problem by using a separate spool directory for each test.

M doc/xml/release/2025/2.55.0.xml
M test/src/common/harnessHost.c

Exclude function void return logging macros from coverage reporting.

commit   : db912c049c7e4b98ec1cdfa5b4e45b3bbb7d1a6b    
  
author   : David Steele <david@pgbackrest.org>    
date     : Fri, 8 Nov 2024 10:21:25 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Fri, 8 Nov 2024 10:21:25 -0500    

Click here for diff

An in 355e27d6, it makes sense to exclude FUNCTION_(LOG|TEST)_RETURN_VOID() macros when then they are on the last line of a function because in this case they are a noop (but are still used for debugging).  

M doc/xml/auto/metric-coverage-report.auto.xml
M test/src/command/test/coverage.c
M test/src/module/test/coverageTest.c

Fix issue with version/help commands attempting to load pgbackrest.conf.

commit   : c9c73ede9d8182374372c46face4433997e8c0ea    
  
author   : David Steele <david@pgmasters.net>    
date     : Thu, 7 Nov 2024 10:30:16 -0500    
  
committer: GitHub <noreply@github.com>    
date     : Thu, 7 Nov 2024 10:30:16 -0500    

Click here for diff

8d6bceb5 refactored version/help to operate more like regular commands in part to simplify the implementation of --version and --help. Unfortunately this had the side effect of these commands also loading pgbackrest.conf which would lead to an error if the file could not be read or parsed.
  

  
Add a filter to prevent version or help from loading pgbackrest.conf. Also prevent reads from the env to stop any warnings or errors from that source.

M doc/xml/release/2025/2.55.0.xml
M doc/xml/release/contributor.xml
M src/config/parse.c
M test/src/module/config/parseTest.c

Remove conditional compilation for lz4.

commit   : c6785431653d81d793b9c683091bfa20156c0c2f    
  
author   : David Steele <david@pgbackrest.org>    
date     : Thu, 7 Nov 2024 09:27:02 -0500    
  
committer: David Steele <david@pgbackrest.org>    
date     : Thu, 7 Nov 2024 09:27:02 -0500    

Click here for diff

0c32757f made lz4 required in the meson build but conditional compilation was left in to make reverting easy for packagers just in case.  
  
Since a few releases have gone by without any complaints, remove conditional compilation for lz4.  

M meson.build
M src/build/config/config.yaml
M src/common/compress/helper.c
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/config/parse.auto.c.inc
M test/src/module/common/compressTest.c
M test/src/module/performance/storageTest.c

Exclude function logging macros from coverage reporting.

commit   : 355e27d69ce80c87fb9458f8240699ec5ce5dc5e    
  
author   : David Steele <david@pgbackrest.org>    
date     : Sat, 2 Nov 2024 11:50:30 -0400    
  
committer: David Steele <david@pgbackrest.org>    
date     : Sat, 2 Nov 2024 11:50:30 -0400    

Click here for diff

It makes sense to exclude these from reporting since they are always covered when the function is covered and they are purely for debugging.  

M test/src/command/test/coverage.c
M test/src/module/test/coverageTest.c

Fix incorrect log macros.

commit   : fc5fdb8d358ae09d398922c1a8df44f47c8b40d6    
  
author   : David Steele <david@pgbackrest.org>    
date     : Sat, 2 Nov 2024 11:36:56 -0400    
  
committer: David Steele <david@pgbackrest.org>    
date     : Sat, 2 Nov 2024 11:36:56 -0400    

Click here for diff

These led to incorrect log output in some cases. Probably not very noticeable, but definitely wrong.  
  
Also fix types in the log macro comments.  

M doc/src/command/build/man.c
M src/command/check/common.c
M src/command/expire/expire.c
M src/command/verify/verify.c
M src/common/debug.h
M src/common/exec.c
M src/protocol/helper.c

Enable float-equal and init-self compiler warnings.

commit   : ed390780685adf1a463c74ee1cd3dad1b3dd9895    
  
author   : David Steele <david@pgbackrest.org>    
date     : Tue, 29 Oct 2024 14:15:12 +0200    
  
committer: David Steele <david@pgbackrest.org>    
date     : Tue, 29 Oct 2024 14:15:12 +0200    

Click here for diff

No code changes were required to enable these warnings.  

M meson.build

Enable redundant-decls compiler warning.

commit   : 98670aee8927e4f7125318faeb1f18c4facf51e3    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 28 Oct 2024 19:13:38 +0200    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 28 Oct 2024 19:13:38 +0200    

Click here for diff

Warn if anything is declared more than once in the same scope, even when the extra declaration is valid and changes nothing. This is primarily useful for catching missing header ifdef barriers.  
  
Move the environ variable into config/parse.h since it must be declared by us and we use it multiple times.  

M meson.build
M src/command/check/report.c
M src/config/parse.c
M src/config/parse.h
M test/src/common/harnessStackTrace.h

Enable missing-prototypes compiler warning.

commit   : 9ec9b9d120c8b1113dfad734a006e0f91427cf3f    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 28 Oct 2024 17:49:55 +0200    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 28 Oct 2024 17:49:55 +0200    

Click here for diff

Warn if a global function is defined without a previous prototype declaration. This helps detect when a function that should be static is accidentally declared extern.  
  
Most of the changes are to add missing header files so functions can see their declarations.  
  
In a some cases functions that should have been static were marked as such. There were only five of these in the core but every little bit counts.  
  
Lastly, it was necessary to suppress the warning in the postgres test modules where the function declarations are not available. This is fixable by aligning the module with the auto-generated code in core, but is not a priority.  

M doc/src/command/build/build.c
M doc/src/command/build/man.c
M doc/src/command/build/reference.c
M doc/src/config/load.c
M meson.build
M src/build/common/regExp.c
M src/build/common/string.c
M src/build/config/render.c
M src/build/help/render.c
M src/command/archive/get/get.c
M src/command/archive/push/push.c
M src/command/backup/pageChecksum.c
M src/command/command.c
M src/command/control/start.c
M src/command/control/stop.c
M src/command/expire/expire.c
M src/command/help/help.c
M src/command/local/local.c
M src/command/manifest/manifest.c
M src/command/remote/remote.c
M src/command/repo/get.c
M src/command/repo/ls.c
M src/command/repo/put.c
M src/command/repo/rm.c
M src/command/stanza/common.c
M src/common/compress/helper.c
M src/common/crypto/cipherBlock.c
M src/common/fork.c
M src/common/io/limitRead.c
M src/common/io/socket/session.c
M src/config/parse.c
M src/protocol/client.c
M test/src/command/test/build.c
M test/src/command/test/test.c
M test/src/common/harnessHost.c
M test/src/common/harnessLog.c
M test/src/common/harnessLog.h
M test/src/common/harnessPostgres/harness095.c
M test/src/common/harnessPostgres/harness096.c
M test/src/common/harnessPostgres/harness100.c
M test/src/common/harnessPostgres/harness110.c
M test/src/common/harnessPostgres/harness120.c
M test/src/common/harnessPostgres/harness130.c
M test/src/common/harnessPostgres/harness140.c
M test/src/common/harnessPostgres/harness150.c
M test/src/common/harnessPostgres/harness160.c
M test/src/common/harnessPostgres/harness170.c
M test/src/common/harnessStorageHelper.c
M test/src/common/harnessTest.c
M test/src/config/load.c
M test/src/module/command/serverTest.c
M test/src/module/common/stackTraceTest.c
M test/src/module/test/testTest.c
M test/src/test.c

Enable cast-qual compiler warning.

commit   : 21f7d2d3a840852d7964c5684dd04f29ce9cc68a    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 28 Oct 2024 14:21:38 +0200    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 28 Oct 2024 14:21:38 +0200    

Click here for diff

Warn whenever a pointer is cast so as to remove a type qualifier from the target type. For example, warn if a const char * is cast to an ordinary char *.  
  
Most of the changes for this are fairly rote: just add a const qualifier where needed. In some cases functions needed to be reworked to return non-const where before they had returned const and then cast it back to non-const. None of these patterns appeared to be bugs, but they were certainly misleading.  
  
Some cases (especially excvp() and calls to bz2) could not be fixed because of how functions out of our control are defined. In those cases the warnings have been suppressed and a comment added to detail the exception. This was also done a few places in the tests.  

M meson.build
M src/build/common/xml.c
M src/build/config/render.c
M src/build/help/render.c
M src/command/archive/common.c
M src/command/backup/backup.c
M src/command/backup/blockMap.c
M src/command/backup/blockMap.h
M src/command/backup/pageChecksum.c
M src/command/restore/restore.c
M src/common/compress/bz2/compress.c
M src/common/compress/bz2/decompress.c
M src/common/crypto/md5.vendor.c.inc
M src/common/exec.c
M src/common/io/filter/group.c
M src/common/io/http/request.c
M src/common/io/tls/client.c
M src/common/memContext.c
M src/common/memContext.h
M src/common/type/list.c
M src/common/type/list.h
M src/common/type/object.h
M src/common/type/pack.c
M src/common/type/string.c
M src/common/type/stringList.c
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/common/type/xml.h
M src/info/manifest.c
M src/info/manifest.h
M src/postgres/interface.c
M src/postgres/interface/version.intern.h
M src/storage/sftp/storage.c
M test/src/common/harnessLibSsh2.c
M test/src/common/harnessLibSsh2.h
M test/src/common/harnessPq.c
M test/src/common/harnessServer.c
M test/src/common/harnessTest.c
M test/src/module/command/backupTest.c
M test/src/module/common/encodeTest.c
M test/src/module/common/typeListTest.c
M test/src/module/performance/typeTest.c
M test/src/module/storage/sftpTest.c

Update String, Buffer, and Variant constants to work with cast-qual.

commit   : bb7e1724a95a4bf087bae6782ae255e1583bc9b7    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 28 Oct 2024 13:21:35 +0200    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 28 Oct 2024 13:21:35 +0200    

Click here for diff

These three objects can be created as constants at compile time using specialized macros. Unfortunately since the values assigned are also const, cast-qual complained about the cost qualifier being lost.  
  
Fix this by creating new structures to be used just for creating these constants. This is not ideal due to the need to keep the duplicated structures in sync, but in practice these structures are almost never modified. Testing should catch any out of sync structures and this feature is valuable enough to keep even though in theory there could be memory safety issues. In practice the APIs prevent const objects from being used in an unsafe way and testing provides a fair assurance of safety. Writing to these consts would be a fatal error even if it did not cause a segfault.  
  
Ideally, we would be able to use warning suppression in these macros to avoid the extra struct, but due to the way they are used it is not possible to add the required pragmas (even using _Pragma).  
  
Finally this construction makes it obvious that something special is being done, rather than it being under the covers.  

M src/build/config/render.c
M src/common/type/buffer.h
M src/common/type/string.h
M src/common/type/variant.h
M src/config/parse.auto.c.inc
M src/config/parse.c
M test/src/module/build/configTest.c

Fix misplaced volatile qualifiers in GCS authorization JWT generation.

commit   : a981ef08d70fdd5faf8052a75d2e066ebcca7057    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 28 Oct 2024 13:20:19 +0200    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 28 Oct 2024 13:20:19 +0200    

Click here for diff

The volatile qualifiers should be on the pointers that are stored on the stack, not on the structures that are allocated by OpenSSL functions.  
  
Also remove all the casts that were required when volatile was in wrong place.  

M src/storage/gcs/storage.c

Update Cirrus MacOS runner to OpenSSL 3.

commit   : 118f93baab39339a2c22deeb360f28370e139dd6    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 28 Oct 2024 13:07:35 +0200    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 28 Oct 2024 13:07:35 +0200    

Click here for diff

OpenSSL 1.1 is no longer available in HomeBrew.  

M .cirrus.yml

Remove support for PostgreSQL 9.4.

commit   : 48f511dad339ef9357e00f7bd8e2bf4b7c800dd4    
  
author   : David Steele <david@pgmasters.net>    
date     : Mon, 21 Oct 2024 13:56:04 +0300    
  
committer: GitHub <noreply@github.com>    
date     : Mon, 21 Oct 2024 13:56:04 +0300    

Click here for diff

Per our policy to support five EOL versions of PostgreSQL, 9.4 is no longer supported by pgBackRest. Remove all logic associated with 9.4 and update the tests.
  

  
This includes a small fix in infoPg.c to allow backup.info files with old versions to be saved. This allows expire to function when old versions are present. Even though those older versions cannot be used, they can be expired.
  

  
Tests for 9.4 are left in the expire/info tests to demonstrate that these commands work with old versions present.

M CONTRIBUTING.md
M doc/xml/contributing.xml
M doc/xml/release/2025/2.55.0.xml
M src/build/help/help.xml
M src/build/postgres/postgres.yaml
M src/command/archive/common.h
M src/command/expire/expire.c
M src/command/restore/restore.c
M src/command/verify/verify.c
M src/info/infoPg.c
M src/postgres/interface.c
M src/postgres/interface/crc32.c
M src/postgres/interface/crc32.h
M src/postgres/interface/version.intern.h
M src/postgres/interface/version.vendor.h
M src/postgres/version.auto.h
M src/postgres/version.h
M test/code-count/file-type.yaml
M test/lib/pgBackRestTest/Common/DbVersion.pm
M test/lib/pgBackRestTest/Common/JobTest.pm
M test/lib/pgBackRestTest/Common/VmTest.pm
M test/src/common/harnessPostgres.c
M test/src/common/harnessPostgres.h
D test/src/common/harnessPostgres/harness094.c
M test/src/common/harnessPostgres/harnessVersion.intern.h
M test/src/module/command/archiveCommonTest.c
M test/src/module/command/archivePushTest.c
M test/src/module/command/backupTest.c
M test/src/module/command/checkTest.c
M test/src/module/command/expireTest.c
M test/src/module/command/infoTest.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/infoArchiveTest.c
M test/src/module/info/infoBackupTest.c
M test/src/module/info/infoPgTest.c
M test/src/module/info/manifestTest.c
M test/src/module/integration/allTest.c
M test/src/module/postgres/interfaceTest.c
M test/src/module/storage/posixTest.c
M test/src/module/storage/sftpTest.c

Remove autoconf/make build.

commit   : 89c9baba72fc99616083a7adc4be2c3e2bf9e4dd    
  
author   : David Steele <david@pgmasters.net>    
date     : Mon, 21 Oct 2024 13:32:35 +0300    
  
committer: GitHub <noreply@github.com>    
date     : Mon, 21 Oct 2024 13:32:35 +0300    

Click here for diff

2.54.0 is the last release to support the autoconf/make build. Remove the autoconf/make build to reduce maintenance going forward.

M .github/workflows/test.yml
M doc/RELEASE.md
M doc/xml/release/2025/2.55.0.xml
M doc/xml/user-guide.xml
D src/Makefile.in
D src/build.auto.h.in
D src/build/aclocal.m4
D src/build/config.guess
D src/build/config.sub
D src/build/configure.ac
D src/build/install-sh
D src/configure
M test/code-count/file-type.yaml
M test/lib/pgBackRestTest/Common/CodeCountTest.pm
M test/test.pl

Begin v2.55.0 development.

commit   : 4125f726a857629c4500f82a3989dc1b69977500    
  
author   : David Steele <david@pgbackrest.org>    
date     : Mon, 21 Oct 2024 09:11:49 +0300    
  
committer: David Steele <david@pgbackrest.org>    
date     : Mon, 21 Oct 2024 09:11:49 +0300    

Click here for diff

M doc/RELEASE.md
M doc/resource/git-history.cache
M doc/xml/release.xml
A doc/xml/release/2025/2.55.0.xml
M meson.build
M src/build/configure.ac
M src/configure
M src/version.h
M test/code-count/file-type.yaml