pgBackRest 2.49 commit log

v2.48: Repository Storage Tags

commit   : a7ab686d0e3d48b3200986d91ea3489488800382    
  
author   : David Steele <[email protected]>    
date     : Mon, 25 Sep 2023 09:32:15 -0400    
  
committer: David Steele <[email protected]>    
date     : Mon, 25 Sep 2023 09:32:15 -0400    

Click here for diff

Bug Fixes:  
  
* Fix issue restoring block incremental without a block list. (Reviewed by Stephen Frost, Burak Yurdakul. Reported by Burak Yurdakul.)  
  
Features:  
  
* Add --repo-storage-tag option to create object tags. (Reviewed by Stephen Frost, Stefan Fercot, Timothée Peignier.)  
* Add known hosts checking for SFTP storage driver. (Contributed by Reid Thompson. Reviewed by Stephen Frost, David Steele.)  
* Support for dual stack connections. (Reviewed by Stephen Frost.)  
* Add backup size completed/total to info command JSON output. (Contributed by Stefan Fercot. Reviewed by David Steele.)  
  
Improvements:  
  
* Multi-stanza check command. (Reviewed by Stephen Frost.)  
* Retry reads of pg_control until checksum is valid. (Reviewed by Stefan Fercot, Stephen Frost.)  
* Optimize WAL segment check after successful backup. (Reviewed by Stephen Frost.)  
* Improve GCS multi-part performance. (Reviewed by Reid Thompson.)  
* Allow archive-get command to run when stanza is stopped. (Reviewed by Tom Swartz, David Christensen, Reid Thompson.)  
* Accept leading tilde in paths for SFTP public/private keys. (Contributed by Reid Thompson. Reviewed by David Steele.)  
* Reload GCS credentials before renewing authentication token. (Reviewed by Stephen Frost. Suggested by Daniel Farina.)  
  
Documentation Bug Fixes:  
  
* Fix configuration reference example for the tls-server-address option. (Fixed by Hartmut Goebel. Reviewed by David Steele.)  
* Fix command reference example for the filter option.  
  
Test Suite Improvements:  
  
* Allow storage/sftp unit test to run without libssh2 installed. (Contributed by Reid Thompson. Reviewed by David Steele. Suggested by Wu Ning.)  

M CONTRIBUTING.md
M README.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/2023/2.48.xml
M meson.build
M src/build/configure.ac
M src/build/help/help.xml
M src/configure
M src/version.h
M test/code-count/file-type.yaml

Fix command reference example for the filter option.

commit   : cb3ff6ed4336af9e4c0643d8224d5bc3d790a655    
  
author   : David Steele <[email protected]>    
date     : Sat, 23 Sep 2023 13:41:03 -0400    
  
committer: David Steele <[email protected]>    
date     : Sat, 23 Sep 2023 13:41:03 -0400    

Click here for diff

This example was broken by 24f7252. Revert to (almost) the prior code to fix this example until something better can be committed. The something better is in progress but it adds new build requirements so it is too late to include it for the release.  
  
Technically this breaks some other examples, but they are all internal and not visible in the user-facing documentation.  

M doc/lib/pgBackRestDoc/Common/DocConfig.pm
M doc/xml/release/2023/2.48.xml

Update help title for the --annotation option.

commit   : 6f0f2b371e6604552001b56e8931c6d15ceab41f    
  
author   : David Steele <[email protected]>    
date     : Tue, 19 Sep 2023 19:01:16 -0400    
  
committer: David Steele <[email protected]>    
date     : Tue, 19 Sep 2023 19:01:16 -0400    

Click here for diff

Fix capitalization and remove pluralization that is implied.  

M src/build/help/help.xml

Allow storage/sftp unit test to run without libssh2 installed.

commit   : c3c0834e170196a1241a368779162fcca65f9ad5    
  
author   : Reid Thompson <[email protected]>    
date     : Tue, 19 Sep 2023 16:26:13 -0400    
  
committer: GitHub <[email protected]>    
date     : Tue, 19 Sep 2023 16:26:13 -0400    

Click here for diff

Add missing #ifdefs and update tests to prevent test compilation failure and test run issues when libssh2 is not present.

M doc/xml/release/2023/2.48.xml
M doc/xml/release/contributor.xml
M test/src/module/common/userTest.c
M test/src/module/config/loadTest.c
M test/src/module/storage/sftpTest.c

Remove duplicate tests from storage/sftp unit test module.

commit   : bb752cd111b1257088e57137bdbe6715e96eb292    
  
author   : David Steele <[email protected]>    
date     : Tue, 19 Sep 2023 12:08:09 -0400    
  
committer: David Steele <[email protected]>    
date     : Tue, 19 Sep 2023 12:08:09 -0400    

Click here for diff

These tests are already run as part of storage/posix and do not need to be duplicated in storage/sftp.  

M test/define.yaml
M test/src/module/storage/sftpTest.c

Fix issue restoring block incremental without a block list.

commit   : 31de127cf42438b1fac04c161c47264aa1fb1060    
  
author   : David Steele <[email protected]>    
date     : Tue, 19 Sep 2023 11:30:29 -0400    
  
committer: GitHub <[email protected]>    
date     : Tue, 19 Sep 2023 11:30:29 -0400    

Click here for diff

It is currently possible for a block map to be written without any accompanying blocks. This happens when a file timestamp is updated but the file has not changed. On restore, this caused problems when encryption was enabled, the block map was bundled after a file that had been stored without block incremental, and both files were included in a single bundle read. In this case the block map would not be decrypted and the encrypted data was passed to blockMapNewRead() with unpredictable results. In many cases built-in retries would rectify this problem as long as delta was enabled since block maps would move to the beginning of the bundle read and be decrypted properly. If enough files were affected, however, it could overwhelm the retries and throw an error. Subsequent delta restores would eventually be able to produce a valid result.
  

  
Fix this by moving block map decryption so it works correctly no matter where the block map is located in the read. This has the additional benefit of limiting how far the block map can read so it will error earlier if corrupt. Though in this case there was no repository corruption involved, it appeared that way to blockMapNewRead() since it was reading encrypted data.
  

  
Arguably block maps without blocks should not be written at all, but it would be better to consider that as a separate change. This pattern clearly exists in the wild and needs to be handled, plus the new implementation has other benefits.

M doc/xml/release/2023/2.48.xml
M doc/xml/release/contributor.xml
M src/command/restore/file.c
M test/src/module/command/restoreTest.c

Add block incremental info to restore detail logging.

commit   : 88edea4571d954e54a561247de587f747eaaadca    
  
author   : David Steele <[email protected]>    
date     : Mon, 18 Sep 2023 11:30:42 -0400    
  
committer: David Steele <[email protected]>    
date     : Mon, 18 Sep 2023 11:30:42 -0400    

Click here for diff

Log that block incremental was used and the delta size if less than the entire file was updated.  

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 test/src/module/command/restoreTest.c

Fix manifest command filter for files in a tablespace.

commit   : d27533b40f039ff8da3a284d77fccff101083492    
  
author   : David Steele <[email protected]>    
date     : Sun, 17 Sep 2023 17:06:42 -0400    
  
committer: David Steele <[email protected]>    
date     : Sun, 17 Sep 2023 17:06:42 -0400    

Click here for diff

pg_data/ was appended at the beginning of the filter, which meant that files in tablespaces could never be queried directly.  
  
Update the filter to require the full path, including pg_data/ or pg_tblspc/.  

M src/command/manifest/manifest.c
M test/src/module/command/manifestTest.c

Add missing comma in protocolParallelJobToLog().

commit   : ed88f0483e8c87fde6dc098102b1c49e281d96e1    
  
author   : David Steele <[email protected]>    
date     : Sat, 16 Sep 2023 09:35:27 -0400    
  
committer: David Steele <[email protected]>    
date     : Sat, 16 Sep 2023 09:35:27 -0400    

Click here for diff

M src/protocol/parallelJob.c

Add known hosts checking for SFTP storage driver.

commit   : ce9ba0fadee652d409488bee701ea6a51cafec75    
  
author   : Reid Thompson <[email protected]>    
date     : Fri, 15 Sep 2023 20:22:38 -0400    
  
committer: GitHub <[email protected]>    
date     : Fri, 15 Sep 2023 20:22:38 -0400    

Click here for diff

By default require a known hosts match as part of the SFTP storage driver's authentication process, i.e. repo-sftp-host-key-check-type=strict. The match is expected to be found in the default list or in a list of known hosts files provided by the user. An exception is made if a fingerprint has been manually configured with repo-sftp-host-fingerprint or repo-sftp-host-key-check-type=accept-new can be used to automatically add new hosts.
  

  
Also allow host key verification to be skipped, as before, but require the user to explicitly set this (repo-sftp-host-key-check-type=none) rather than it being the default.

M doc/xml/release/2023/2.48.xml
M doc/xml/user-guide.xml
M src/build/config/config.yaml
M src/build/help/help.xml
M src/common/user.c
M src/config/config.auto.h
M src/config/load.c
M src/config/parse.auto.c.inc
M src/storage/sftp/helper.c
M src/storage/sftp/storage.c
M src/storage/sftp/storage.h
M test/lib/pgBackRestTest/Env/Host/HostBackupTest.pm
M test/src/common/harnessLibSsh2.c
M test/src/common/harnessLibSsh2.h
M test/src/module/command/helpTest.c
M test/src/module/config/loadTest.c
M test/src/module/storage/sftpTest.c

Add prefix to meson build target to avoid conflicts.

commit   : f5c730fd03ff27088bd91c148ed285c63b5e7502    
  
author   : David Steele <[email protected]>    
date     : Fri, 15 Sep 2023 18:15:02 -0400    
  
committer: David Steele <[email protected]>    
date     : Fri, 15 Sep 2023 18:15:02 -0400    

Click here for diff

Older versions of meson fail when a build target in a subproject has the same name as another subproject.  
  
This has been fixed in newer versions, but we still need to support older versions and in any case this seems cleaner and the help build target is already prefixed in this fashion.  

M test/src/config/meson.build

Add report option to check command.

commit   : 9039d20b5bd73d3732ed6dac0a2bba4558176d8f    
  
author   : David Steele <[email protected]>    
date     : Fri, 15 Sep 2023 09:30:40 -0400    
  
committer: GitHub <[email protected]>    
date     : Fri, 15 Sep 2023 09:30:40 -0400    

Click here for diff

This option is intended to eventually create a comprehensive report about the state of the pgBackRest configuration based on the results of the check command.
  

  
Implement a detailed report of the configuration options in the environment and configuration files. This should be useful information when debugging configuration errors, since invalid options and configurations are automatically noted. While custom config locations will not be found automatically, it will at least be clear that the config is not in a standard location.
  

  
For now keep this option internal since there is a lot of work to be done, but commit it so that it can be used when needed and tested in various environments.
  

  
Note that for now when --report is specified, the check command is not being run at all. Only the config report is generated. This behavior will be improved in the future.

M doc/xml/release/2023/2.48.xml
M src/Makefile.in
M src/build/config/config.yaml
M src/build/help/help.xml
M src/command/check/check.c
A src/command/check/report.c
A src/command/check/report.h
M src/config/config.auto.h
M src/config/parse.auto.c.inc
M src/config/parse.c
M src/config/parse.h
M src/meson.build
M test/define.yaml
M test/src/module/command/checkTest.c
M test/src/module/config/parseTest.c

Finalize catalog number for PostgreSQL 16 release.

commit   : 657c1a3e069910106bc3642153c27b0542c61dc3    
  
author   : David Steele <[email protected]>    
date     : Thu, 14 Sep 2023 18:41:36 -0400    
  
committer: David Steele <[email protected]>    
date     : Thu, 14 Sep 2023 18:41:36 -0400    

Click here for diff

M src/build/postgres/postgres.yaml
M src/postgres/interface/version.vendor.h
M test/container.yaml
M test/lib/pgBackRestTest/Common/ContainerTest.pm
M test/lib/pgBackRestTest/Env/HostEnvTest.pm

Add --repo-storage-tag option to create object tags.

commit   : 1b4e0cce5f3ff5ea3ee0b889e6d4ce4de1430b04    
  
author   : David Steele <[email protected]>    
date     : Thu, 14 Sep 2023 08:22:21 -0400    
  
committer: GitHub <[email protected]>    
date     : Thu, 14 Sep 2023 08:22:21 -0400    

Click here for diff

This new option allows tags to be added to objects in S3, GCS, and Azure repositories.
  

  
This was fairly straightforward for S3 and Azure, but GCS does not allow tags for a simple upload using the JSON interface. If tags are required then the resumable interface must be used even if the file falls below the limit that usually triggers a resumable upload (i.e. size < repo-storage-upload-chunk-size).
  

  
This option is structured so that tags must be specified per-repo rather than globally for all repos. This seems logical since the tag keys and values may vary by service, e.g. S3 vs GCS.
  

  
These storage tags are independent of backup annotations since they are likely to be used for different purposes, e.g. billing, while the backup annotations are primarily intended for monitoring.

M doc/xml/release/2023/2.48.xml
M doc/xml/release/contributor.xml
M doc/xml/user-guide.xml
M src/build/config/config.yaml
M src/build/help/help.xml
M src/common/io/http/query.c
M src/common/io/http/query.h
M src/config/config.auto.h
M src/config/parse.auto.c.inc
M src/storage/azure/helper.c
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/gcs/helper.c
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/s3/helper.c
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 test/define.yaml
M test/src/module/command/helpTest.c
M test/src/module/common/ioHttpTest.c
M test/src/module/storage/azureTest.c
M test/src/module/storage/gcsTest.c
M test/src/module/storage/s3Test.c

Use PROJECT_NAME constant instead of string literal.

commit   : 3b9c31f6e3a0c23674f97b02c42133192fb51724    
  
author   : Reid Thompson <[email protected]>    
date     : Wed, 13 Sep 2023 16:59:52 -0400    
  
committer: David Steele <[email protected]>    
date     : Wed, 13 Sep 2023 16:59:52 -0400    

Click here for diff

M src/storage/sftp/storage.c
M test/src/common/harnessLibSsh2.h
M test/src/module/storage/sftpTest.c

Support for dual stack connections.

commit   : 39bb8a0d3a96eef63219dff262a9306a4f59dae9    
  
author   : David Steele <[email protected]>    
date     : Tue, 12 Sep 2023 18:09:58 -0400    
  
committer: GitHub <[email protected]>    
date     : Tue, 12 Sep 2023 18:09:58 -0400    

Click here for diff

The prior code would only connect to the first address provided by getaddrinfo().
  

  
Instead try each address in the list. If all connections fail then wait and try them all again until timeout.
  

  
Currently a round robin approach is used where each connection attempt must fail before the next connection is attempted. This works fine, for example, when an ipv6 address has no route to the host, but will work less well when a host answers but doesn't respond in a timely fashion.
  

  
We may consider a Happy Eyeballs approach in the future, but since pgBackRest is primarily a background process, it is not clear that slightly improved response time (in the case of failed connections) is worth the extra complexity.

M doc/xml/release/2023/2.48.xml
M src/common/io/socket/client.c
M test/src/module/common/ioHttpTest.c
M test/src/module/common/ioTlsTest.c

Optimize WAL segment check after successful backup.

commit   : 9d3a605900644059ff0e030d71a818b3965eb031    
  
author   : David Steele <[email protected]>    
date     : Sun, 10 Sep 2023 12:45:58 -0400    
  
committer: GitHub <[email protected]>    
date     : Sun, 10 Sep 2023 12:45:58 -0400    

Click here for diff

The prior code did one list command against the storage for each WAL segment. This led to a lot of lists and was especially inefficient when the WAL (or the majority of it) was already present.
  

  
Optimize to keep the contents of a WAL directory and use them on a subsequent search. Leave the optimizations for a single WAL segment since other places still use that mode.

M doc/xml/release/2023/2.48.xml
M src/Makefile.in
M src/command/archive/common.c
M src/command/archive/common.h
A src/command/archive/find.c
A src/command/archive/find.h
M src/command/archive/push/file.c
M src/command/backup/backup.c
M src/command/check/check.c
M src/meson.build
M test/define.yaml
M test/src/module/command/archiveCommonTest.c

Refactor address list lookup to include all returned addresses.

commit   : edbd520c81f5d437963aaf42d1c79b2c51d01665    
  
author   : David Steele <[email protected]>    
date     : Sun, 10 Sep 2023 10:36:58 -0400    
  
committer: GitHub <[email protected]>    
date     : Sun, 10 Sep 2023 10:36:58 -0400    

Click here for diff

sckHostLookup() only returned the first address record returned from getaddrinfo(). The new AddressInfo object provides a full list of values returned from getaddrinfo(). Freeing the list is also handled by the object so there is no longer a need for FINALLY blocks to ensure the list is freed.
  

  
Add the selected address to the client/server names for debugging purposes.
  

  
This code does not attempt to connect to multiple addresses. It just lays the groundwork for a future commit to do so.

M src/Makefile.in
A src/common/io/socket/address.c
A src/common/io/socket/address.h
M src/common/io/socket/client.c
M src/common/io/socket/common.c
M src/common/io/socket/common.h
M src/common/io/socket/server.c
M src/meson.build
M test/define.yaml
M test/src/module/common/ioHttpTest.c
M test/src/module/common/ioTlsTest.c

Retry reads of pg_control until checksum is valid.

commit   : f42d927d2dcd58cf5a80d68eaf6888bcf2c67a4b    
  
author   : David Steele <[email protected]>    
date     : Sun, 10 Sep 2023 09:47:49 -0400    
  
committer: GitHub <[email protected]>    
date     : Sun, 10 Sep 2023 09:47:49 -0400    

Click here for diff

On certain file systems (e.g. ext4) pg_control may appear torn if there is a concurrent write while reading the file. To prevent an invalid read, retry until the checksum matches the control data.
  

  
Special handling is required for the pg-version-force feature since the offset of the checksum is not known. In this case, scan from the default position to the end of the data looking for a checksum match. This is a bit imprecise, but better than nothing, and the chance of a random collision in the control data seems very remote considering the ratio of data size (< 512 bytes) to checksum size (4 bytes).
  

  
This was discovered and a possible solution proposed for PostgreSQL in [1]. The proposed solution may work for backup, but pgBackRest needs to be able to read pg_control reliably outside of backup. So no matter what fix is adopted for PostgreSQL, pgBackRest need retries. Further adjustment may be required as the PostgreSQL fix evolves.
  

  
[1] https://www.postgresql.org/message-id/20221123014224.xisi44byq3cf5psi%40awork3.anarazel.de

M doc/xml/release/2023/2.48.xml
M src/Makefile.in
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/meson.build
M src/postgres/interface.c
M src/postgres/interface.h
A src/postgres/interface/crc32.c
A src/postgres/interface/crc32.h
M src/postgres/interface/version.intern.h
M test/define.yaml
M test/lib/pgBackRestTest/Env/HostEnvTest.pm
M test/lib/pgBackRestTest/Module/Mock/MockAllTest.pm
M test/src/common/harnessBackup.c
M test/src/common/harnessPostgres.c
M test/src/common/harnessPostgres.h
M test/src/common/harnessPostgres/harnessVersion.intern.h
M test/src/module/command/backupTest.c
M test/src/module/postgres/interfaceTest.c

Aggregate error retries in ErrorRetry output.

commit   : c1805134b370f0c5c54c40a2df8978599328784f    
  
author   : David Steele <[email protected]>    
date     : Sat, 9 Sep 2023 12:54:55 -0400    
  
committer: David Steele <[email protected]>    
date     : Sat, 9 Sep 2023 12:54:55 -0400    

Click here for diff

If there are a lot of retries then the output might be very large and even be truncated by the error module. Either way, it is not good information for the user.  
  
When a message is repeated, aggregate so that total retries and time range are output for the message. This provides helpful information about what happened without overwhelming the user with data.  

M src/common/error/retry.c
M src/common/error/retry.h
M test/define.yaml
M test/src/common/harnessErrorRetry.c
M test/src/module/common/errorRetryTest.c

Adjust Wait object to be more accurate when nested.

commit   : 5314dbffc761bc7507db02693f2421c1578efe10    
  
author   : David Steele <[email protected]>    
date     : Sat, 9 Sep 2023 11:22:33 -0400    
  
committer: David Steele <[email protected]>    
date     : Sat, 9 Sep 2023 11:22:33 -0400    

Click here for diff

The prior code gave a "free" extra iteration at the end of the wait, functionality that was copied directly from the equivalent code in Perl. This works and is mostly negligible except when wait loops are nested, in which case outer loops will always run twice even if an inner loop times out, which has a multiplying effect. For example, three nested wait loops with a timeout of three seconds will result in the inner loop being run four times (for a total of twelve seconds) even if it times out each time.  
  
Instead make waitMore() stop exactly when time is up. This makes more sense because a complete failure and timeout of an inner loop means retrying an outer loop is probably a waste of time since that inner loop will likely continue to fail.  
  
Also make waitRemaining() recalculate the remaining time rather than depending on the prior result.  
  
Some tests needed to be adjusted to take into account there being one less loop. In general this led to a simplification of the tests.  
  
Reinit a begin value in the wait unit tests. This is not related to the current change but it does make the time measurements more accurate and less likely to fail on an edge case, which has been observed from time to time.  
  
This change appears to have a benefit for test runtime, which seems plausible especially for nested waits, but a larger sample of CI runs are needed to be sure.  

M src/common/wait.c
M src/common/wait.h
M test/src/module/common/execTest.c
M test/src/module/common/ioHttpTest.c
M test/src/module/common/ioTlsTest.c
M test/src/module/common/waitTest.c
M test/src/module/db/dbTest.c
M test/src/module/postgres/clientTest.c
M test/src/module/storage/sftpTest.c

Improve backup test harness to handle very large quantities of WAL.

commit   : d57900839addeac56b89a445352a8efc96a197f0    
  
author   : David Steele <[email protected]>    
date     : Mon, 4 Sep 2023 18:51:44 -0400    
  
committer: David Steele <[email protected]>    
date     : Mon, 4 Sep 2023 18:51:44 -0400    

Click here for diff

The current tests only generate small quantities of WAL per backup but sometimes it is useful to generate large quantities for testing.  
  
Fix the issues with generating large quantities of WAL and also improve memory management.  

M test/src/common/harnessBackup.c

Fix configuration reference example for the tls-server-address option.

commit   : 43524a47a4c6a847f76514812f94b87cb7af4c05    
  
author   : Hartmut Goebel <[email protected]>    
date     : Mon, 4 Sep 2023 19:39:11 +0200    
  
committer: GitHub <[email protected]>    
date     : Mon, 4 Sep 2023 19:39:11 +0200    

Click here for diff

The prior example (::*) was not valid and would result in the following error:
  

  
ERROR: [049]: unable to get address for '::*': [-2] Name or service not known
  

  
Correct values are either * for IPv4 or :: for IPv6. The IPv4 value is used as the example since only one example is allowed.

M doc/xml/release/2023/2.48.xml
M doc/xml/release/contributor.xml
M src/build/help/help.xml

Split release notes into individual files.

commit   : c0935b79924686ebf4efef99c7dc69aea9efb28d    
  
author   : David Steele <[email protected]>    
date     : Mon, 4 Sep 2023 12:00:06 -0400    
  
committer: David Steele <[email protected]>    
date     : Mon, 4 Sep 2023 12:00:06 -0400    

Click here for diff

The release.xml file was getting pretty unwieldy so break release notes into separate files. Also break contributors into a separate file.  
  
In theory most of release.xml could now be generated automatically but adding a new release does not represent a serious maintenance burden, so for the time being it does not seem worth it.  

M doc/xml/release.xml
A doc/xml/release/2014/0.10.xml
A doc/xml/release/2014/0.11.xml
A doc/xml/release/2014/0.15.xml
A doc/xml/release/2014/0.16.xml
A doc/xml/release/2014/0.17.xml
A doc/xml/release/2014/0.18.xml
A doc/xml/release/2014/0.19.xml
A doc/xml/release/2014/0.30.xml
A doc/xml/release/2015/0.50.xml
A doc/xml/release/2015/0.60.xml
A doc/xml/release/2015/0.61.xml
A doc/xml/release/2015/0.65.xml
A doc/xml/release/2015/0.70.xml
A doc/xml/release/2015/0.75.xml
A doc/xml/release/2015/0.77.xml
A doc/xml/release/2015/0.78.xml
A doc/xml/release/2015/0.80.xml
A doc/xml/release/2015/0.82.xml
A doc/xml/release/2015/0.85.xml
A doc/xml/release/2015/0.87.xml
A doc/xml/release/2015/0.88.xml
A doc/xml/release/2015/0.89.xml
A doc/xml/release/2016/0.90.xml
A doc/xml/release/2016/0.91.xml
A doc/xml/release/2016/0.92.xml
A doc/xml/release/2016/1.00.xml
A doc/xml/release/2016/1.01.xml
A doc/xml/release/2016/1.02.xml
A doc/xml/release/2016/1.03.xml
A doc/xml/release/2016/1.04.xml
A doc/xml/release/2016/1.05.xml
A doc/xml/release/2016/1.06.xml
A doc/xml/release/2016/1.07.xml
A doc/xml/release/2016/1.08.xml
A doc/xml/release/2016/1.09.xml
A doc/xml/release/2016/1.10.xml
A doc/xml/release/2016/1.11.xml
A doc/xml/release/2016/1.12.xml
A doc/xml/release/2017/1.13.xml
A doc/xml/release/2017/1.14.xml
A doc/xml/release/2017/1.15.xml
A doc/xml/release/2017/1.16.xml
A doc/xml/release/2017/1.17.xml
A doc/xml/release/2017/1.18.xml
A doc/xml/release/2017/1.19.xml
A doc/xml/release/2017/1.20.xml
A doc/xml/release/2017/1.21.xml
A doc/xml/release/2017/1.22.xml
A doc/xml/release/2017/1.23.xml
A doc/xml/release/2017/1.24.xml
A doc/xml/release/2017/1.25.xml
A doc/xml/release/2017/1.26.xml
A doc/xml/release/2017/1.27.xml
A doc/xml/release/2018/1.28.xml
A doc/xml/release/2018/1.29.xml
A doc/xml/release/2018/2.00.xml
A doc/xml/release/2018/2.01.xml
A doc/xml/release/2018/2.02.xml
A doc/xml/release/2018/2.03.xml
A doc/xml/release/2018/2.04.xml
A doc/xml/release/2018/2.05.xml
A doc/xml/release/2018/2.06.xml
A doc/xml/release/2018/2.07.xml
A doc/xml/release/2019/2.08.xml
A doc/xml/release/2019/2.09.xml
A doc/xml/release/2019/2.10.xml
A doc/xml/release/2019/2.11.xml
A doc/xml/release/2019/2.12.xml
A doc/xml/release/2019/2.13.xml
A doc/xml/release/2019/2.14.xml
A doc/xml/release/2019/2.15.xml
A doc/xml/release/2019/2.16.xml
A doc/xml/release/2019/2.17.xml
A doc/xml/release/2019/2.18.xml
A doc/xml/release/2019/2.19.xml
A doc/xml/release/2019/2.20.xml
A doc/xml/release/2020/2.21.xml
A doc/xml/release/2020/2.22.xml
A doc/xml/release/2020/2.23.xml
A doc/xml/release/2020/2.24.xml
A doc/xml/release/2020/2.25.xml
A doc/xml/release/2020/2.26.xml
A doc/xml/release/2020/2.27.xml
A doc/xml/release/2020/2.28.xml
A doc/xml/release/2020/2.29.xml
A doc/xml/release/2020/2.30.xml
A doc/xml/release/2020/2.31.xml
A doc/xml/release/2021/2.32.xml
A doc/xml/release/2021/2.33.xml
A doc/xml/release/2021/2.34.xml
A doc/xml/release/2021/2.35.xml
A doc/xml/release/2021/2.36.xml
A doc/xml/release/2022/2.37.xml
A doc/xml/release/2022/2.38.xml
A doc/xml/release/2022/2.39.xml
A doc/xml/release/2022/2.40.xml
A doc/xml/release/2022/2.41.xml
A doc/xml/release/2022/2.42.xml
A doc/xml/release/2022/2.43.xml
A doc/xml/release/2023/2.44.xml
A doc/xml/release/2023/2.45.xml
A doc/xml/release/2023/2.46.xml
A doc/xml/release/2023/2.47.xml
A doc/xml/release/2023/2.48.xml
A doc/xml/release/contributor.xml

Improve GCS multi-part performance.

commit   : 6cb9c40fb8ea18e6572bf3f6e44bbb1d8f922682    
  
author   : David Steele <[email protected]>    
date     : Mon, 4 Sep 2023 10:39:19 -0400    
  
committer: GitHub <[email protected]>    
date     : Mon, 4 Sep 2023 10:39:19 -0400    

Click here for diff

The prior code avoided uploading a chunk if it was not clear whether the write was complete or not. This was primarily due to the GCS documentation being very vague on what to do in the case of a zero-size chunk.
  

  
Now chunks are uploaded as they are available. This should improve performance and also reduces the diff against a future commit that absolutely requires zero-size chunks.

M doc/xml/release.xml
M src/storage/gcs/write.c
M test/src/module/storage/gcsTest.c

Add missing const qualifier to errorTypeList.

commit   : fd9c6b0e9ddd38de57475d1325bc53b79833a983    
  
author   : David Steele <[email protected]>    
date     : Fri, 1 Sep 2023 12:03:39 -0400    
  
committer: David Steele <[email protected]>    
date     : Fri, 1 Sep 2023 12:03:39 -0400    

Click here for diff

M src/build/error/render.c
M src/common/error/error.auto.c.inc
M test/src/module/build/errorTest.c

New CI container build for PostgreSQL 16 rc1.

commit   : 4f52015b14a1f4e5df9373707179a5447cb5a4a6    
  
author   : David Steele <[email protected]>    
date     : Thu, 31 Aug 2023 20:22:01 -0400    
  
committer: David Steele <[email protected]>    
date     : Thu, 31 Aug 2023 20:22:01 -0400    

Click here for diff

M test/container.yaml

Add backup size completed/total to info command JSON output.

commit   : e3fcd8cd9e0be42a32fc4cbd2ae3db2c072eabcd    
  
author   : Stefan Fercot <[email protected]>    
date     : Thu, 31 Aug 2023 22:36:52 +0200    
  
committer: GitHub <[email protected]>    
date     : Thu, 31 Aug 2023 22:36:52 +0200    

Click here for diff

This allows for backup progress to be monitored by external processes, whereas before backup progress was only available via text output.

M doc/xml/release.xml
M src/command/backup/backup.c
M src/command/info/info.c
M src/common/lock.c
M src/common/lock.h
M test/src/module/command/infoTest.c
M test/src/module/common/lockTest.c

Allow archive-get command to run when stanza is stopped.

commit   : fbd992adc7b18db5e70774d675c160c8c8e2f031    
  
author   : David Steele <[email protected]>    
date     : Tue, 29 Aug 2023 13:49:49 -0400    
  
committer: David Steele <[email protected]>    
date     : Tue, 29 Aug 2023 13:49:49 -0400    

Click here for diff

The restore command can run while the stanza is stopped so it makes sense for the archive-get command to follow the same rule.  
  
The important thing is to ensure that all commands that write to the repository are stopped when the stanza is stopped.  

M doc/xml/release.xml
M src/command/archive/get/file.c
M test/lib/pgBackRestTest/Module/Mock/MockArchiveTest.pm

Encode key in HTTP query.

commit   : 8424737697edfee7cbea195b3bccb4077e1c2ee5    
  
author   : David Steele <[email protected]>    
date     : Tue, 29 Aug 2023 12:35:29 -0400    
  
committer: David Steele <[email protected]>    
date     : Tue, 29 Aug 2023 12:35:29 -0400    

Click here for diff

The key also needs to be encoded (not just the value).  
  
This is not currently an issue because none of the keys in use require encoding.  

M src/common/io/http/query.c
M test/src/module/common/ioHttpTest.c

Fix conflicting group in test containers.

commit   : d24180e4da49a8e2ef2a10a02e76cd204fe1ae8f    
  
author   : David Steele <[email protected]>    
date     : Tue, 29 Aug 2023 12:28:02 -0400    
  
committer: David Steele <[email protected]>    
date     : Tue, 29 Aug 2023 12:28:02 -0400    

Click here for diff

The tests expect the group name/id to match between the host system and the container. If there is a conflict rename the group with the required id to the expected name.  
  
This could have unintended consequences but it seems reasonably safe since we control everything that runs in the container and there should never be any system processes running.  

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

Refactor IoRead handling in backupFile().

commit   : 1e6efd73e1fcf7bbe3d3f04d925fefde44847109    
  
author   : David Steele <[email protected]>    
date     : Wed, 23 Aug 2023 12:56:49 -0400    
  
committer: David Steele <[email protected]>    
date     : Wed, 23 Aug 2023 12:56:49 -0400    

Click here for diff

Store the value of storageReadIo() rather than calling it each time. This is slightly more efficient, but more importantly it will be needed for an upcoming commit.  

M src/command/backup/file.c

Adjust range check per Coverity complaint.

commit   : 82c12fed123df057fce109757aa5c72dce605440    
  
author   : David Steele <[email protected]>    
date     : Mon, 21 Aug 2023 13:10:48 -0400    
  
committer: David Steele <[email protected]>    
date     : Mon, 21 Aug 2023 13:10:48 -0400    

Click here for diff

Coverity complained that: Overrunning array "optionGroupIndexKeep[optionGroupIdx]" of 512 bytes at byte offset 4294967550 using index "keyIdx" (which evaluates to 4294967294).  
  
This does not seem possible but adjust the code to make Coverity happy, as usual.  

M src/config/parse.c

Accept leading tilde in paths for SFTP public/private keys.

commit   : eb32d6de5e1575a37efb166abbf7df400d93352e    
  
author   : Reid Thompson <[email protected]>    
date     : Tue, 8 Aug 2023 03:41:34 -0400    
  
committer: GitHub <[email protected]>    
date     : Tue, 8 Aug 2023 03:41:34 -0400    

Click here for diff

The documentation indicates that leading tilde file paths for public/private keys are valid but the functionality was omitted from the original implementation.

M doc/xml/release.xml
M src/common/user.c
M src/common/user.h
M src/storage/sftp/storage.c
M test/src/module/common/userTest.c
M test/src/module/storage/sftpTest.c

Multi-stanza check command.

commit   : 1141dc20708cf0c68296f83e74c872a7db9c2bd9    
  
author   : David Steele <[email protected]>    
date     : Mon, 7 Aug 2023 17:03:09 +0100    
  
committer: GitHub <[email protected]>    
date     : Mon, 7 Aug 2023 17:03:09 +0100    

Click here for diff

Check command now checks multiple stanzas when the stanza option is omitted.
  

  
The stanza list is extracted from the current configuration rather than scanning the repository like the info command. Scanning the repository is a problem because configuration for each stanza may not be present in the current configuration. Since this functionality is new for check there is no regression.
  

  
Add a new section to the user guide to cover multi-stanza configuration and provide additional coverage for this feature.
  

  
Also fix a small issue in the parser when an indexed option has a dependency on a non-indexed option. There were no examples of this case in the previous configuration.

M doc/xml/release.xml
M doc/xml/user-guide.xml
M src/build/config/config.yaml
M src/command/check/check.c
M src/common/ini.c
M src/common/ini.h
M src/config/load.c
M src/config/load.h
M src/config/parse.auto.c.inc
M src/config/parse.c
M src/config/parse.h
M src/storage/helper.c
M src/storage/helper.h
M test/code-count/file-type.yaml
M test/define.yaml
M test/lib/pgBackRestTest/Env/Host/HostBackupTest.pm
M test/lib/pgBackRestTest/Module/Real/RealAllTest.pm
M test/src/common/harnessConfig.c
D test/src/common/harnessStorageHelper.c
D test/src/common/harnessStorageHelper.h
M test/src/module/command/checkTest.c
M test/src/module/common/iniTest.c
M test/src/module/config/loadTest.c
M test/src/module/config/parseTest.c

Reload GCS credentials before renewing authentication token.

commit   : 995a8e96691d23eaf3914a425669f89deb3ce002    
  
author   : David Steele <[email protected]>    
date     : Mon, 7 Aug 2023 13:30:50 +0100    
  
committer: GitHub <[email protected]>    
date     : Mon, 7 Aug 2023 13:30:50 +0100    

Click here for diff

This allows the service key to be updated while a command is running. The new key should be written atomically and ideally the old key should remain valid for some period of time to avoid a race condition if the old token happens to expire at the same time that the new key is being generated.

M doc/xml/release.xml
M src/build/help/help.xml
M src/storage/gcs/storage.c

Remove UNCONSTIFY() from gz compression module.

commit   : cbafcfabf2eb593de9ee95483da93f278c9ff1ee    
  
author   : David Steele <[email protected]>    
date     : Mon, 7 Aug 2023 12:38:33 +0100    
  
committer: David Steele <[email protected]>    
date     : Mon, 7 Aug 2023 12:38:33 +0100    

Click here for diff

The ZLIB_CONST macro may be used since 1.2.5.2 (17 Dec 2011) to specify that the input buffers are const. This is sufficiently old to cover all non-EOL distributions, i.e. everything we test on.  
  
Compiling on older distributions may generate warnings but will continue to work.  

M meson.build
M src/build.auto.h.in
M src/common/compress/gz/compress.c
M src/common/compress/gz/decompress.c

Update xxHash to v0.8.2.

commit   : 6c75c99d0b3024311ea7b254953f1c6a901bcb70    
  
author   : David Steele <[email protected]>    
date     : Mon, 31 Jul 2023 11:09:17 +0200    
  
committer: David Steele <[email protected]>    
date     : Mon, 31 Jul 2023 11:09:17 +0200    

Click here for diff

This release fixes compilation errors on some platforms and contains numerous performance improvements.  

M src/common/crypto/xxhash.vendor.c.inc

Rename HRN_PG_CONTROL_OVERRIDE_PUT().

commit   : f55c8f1b813fadbc7b19a1cc4eb8f90e36b2b18c    
  
author   : David Steele <[email protected]>    
date     : Wed, 26 Jul 2023 10:45:12 +0200    
  
committer: David Steele <[email protected]>    
date     : Wed, 26 Jul 2023 10:45:12 +0200    

Click here for diff

Rename to HRN_PG_CONTROL_OVERRIDE_VERSION_PUT() since other types of overrides are possible (and coming).  

M test/src/common/harnessPostgres.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/stanzaTest.c
M test/src/module/postgres/interfaceTest.c

Update config.guess and config.sub to latest versions.

commit   : 65fb3b3b2d89e2fc80698e52a8378395b18e6d2a    
  
author   : David Steele <[email protected]>    
date     : Mon, 24 Jul 2023 09:17:46 +0200    
  
committer: David Steele <[email protected]>    
date     : Mon, 24 Jul 2023 09:17:46 +0200    

Click here for diff

M src/build/config.guess
M src/build/config.sub

Begin v2.48 development.

commit   : c585ddaf48b806b5d038f0c90e7848875f7a533e    
  
author   : David Steele <[email protected]>    
date     : Mon, 24 Jul 2023 09:15:38 +0200    
  
committer: David Steele <[email protected]>    
date     : Mon, 24 Jul 2023 09:15:38 +0200    

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