1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2024-12-12 10:04:14 +02:00

v2.27: Expiration Improvements and Compression Drivers

Bug Fixes:

* Fix issue checking if file links are contained in path links. (Reviewed by Cynthia Shang. Reported by Christophe Cavallié.)
* Allow pg-path1 to be optional for synchronous archive-push. (Reviewed by Cynthia Shang. Reported by Jerome Peng.)
* The expire command now checks if a stop file is present. (Fixed by Cynthia Shang. Reviewed by David Steele.)
* Handle missing reason phrase in HTTP response. (Reviewed by Cynthia Shang. Reported by Tenuun.)
* Increase buffer size for lz4 compression flush. (Reviewed by Cynthia Shang. Reported by Eric Radman.)
* Ignore pg-host* and repo-host* options for the remote command. (Reviewed by Cynthia Shang. Reported by Pavel Suderevsky.)
* Fix possibly missing pg1-* options for the remote command. (Reviewed by Cynthia Shang. Reported by Andrew L'Ecuyer.)

Features:

* Time-based retention for full backups. The --repo-retention-full-type option allows retention of full backups based on a time period, specified in days. (Contributed by Cynthia Shang, Pierre Ducroquet. Reviewed by David Steele.)
* Ad hoc backup expiration. Allow the user to remove a specified backup regardless of retention settings. (Contributed by Cynthia Shang. Reviewed by David Steele.)
* Zstandard compression support. Note that setting compress-type=zst will make new backups and archive incompatible (unrestorable) with prior versions of pgBackRest. (Reviewed by Cynthia Shang.)
* bzip2 compression support. Note that setting compress-type=bz2 will make new backups and archive incompatible (unrestorable) with prior versions of pgBackRest. (Contributed by Stephen Frost. Reviewed by David Steele, Cynthia Shang.)
* Add backup/expire running status to the info command. (Contributed by Stefan Fercot. Reviewed by David Steele.)

Improvements:

* Expire WAL archive only when repo-retention-archive threshold is met. WAL prior to the first full backup was previously expired after the first full backup. Now it is preserved according to retention settings. (Contributed by Cynthia Shang. Reviewed by David Steele.)
* Add local MD5 implementation so S3 works when FIPS is enabled. (Reviewed by Cynthia Shang, Stephen Frost. Suggested by Brian Almeida, John Kelley.)
* PostgreSQL 13 beta1 support. Changes to the control/catalog/WAL versions in subsequent betas may break compatibility but pgBackRest will be updated with each release to keep pace. (Reviewed by Cynthia Shang.)
* Reduce buffer-size default to 1MiB. (Reviewed by Stephen Frost.)
* Throw user-friendly error if expire is not run on repository host. (Contributed by Cynthia Shang. Reviewed by David Steele.)
This commit is contained in:
David Steele 2020-05-26 08:11:50 -04:00
parent 20d8c76b6c
commit d8214e0d78
12 changed files with 1221 additions and 686 deletions

View File

@ -12,7 +12,8 @@ pgbackrest-dev => Install development tools
```
sudo apt-get install rsync git devscripts build-essential valgrind lcov autoconf \
autoconf-archive libssl-dev zlib1g-dev libxml2-dev libpq-dev pkg-config \
libxml-checker-perl libyaml-libyaml-perl libdbd-pg-perl liblz4-dev liblz4-tool
libxml-checker-perl libyaml-libyaml-perl libdbd-pg-perl liblz4-dev liblz4-tool \
zstd libzstd-dev bzip2 libbz2-dev
```
Some unit tests and all the integration test require Docker. Running in containers allows us to simulate multiple hosts, test on different distributions and versions of PostgreSQL, and use sudo without affecting the host system.
@ -45,12 +46,12 @@ pgbackrest/test/test.pl --vm=none --dry-run
P00 INFO: test begin - log level info
P00 INFO: check version info
P00 INFO: builds required: bin
--> P00 INFO: 63 tests selected
--> P00 INFO: 66 tests selected
P00 INFO: P1-T01/63 - vm=none, module=common, test=error
[filtered 60 lines of output]
P00 INFO: P1-T62/63 - vm=none, module=performance, test=type
P00 INFO: P1-T63/63 - vm=none, module=performance, test=storage
P00 INFO: P1-T01/66 - vm=none, module=common, test=error
[filtered 63 lines of output]
P00 INFO: P1-T65/66 - vm=none, module=performance, test=type
P00 INFO: P1-T66/66 - vm=none, module=performance, test=storage
--> P00 INFO: DRY RUN COMPLETED SUCCESSFULLY
```
@ -135,7 +136,7 @@ pgbackrest/test/test.pl --vm-build --vm=u18
--- output ---
P00 INFO: test begin - log level info
P00 INFO: Using cached pgbackrest/test:u18-base-20200310A image (5e295130131d5fe96e2483885c171677b52c8ce3) ...
P00 INFO: Using cached pgbackrest/test:u18-base-20200521A image (7df9a43ce9b6736e5f8dc797edd0f6326908fd2b) ...
P00 INFO: Building pgbackrest/test:u18-test image ...
P00 INFO: Build Complete
```

View File

@ -4,7 +4,7 @@
pgBackRest aims to be a simple, reliable backup and restore solution that can seamlessly scale up to the largest databases and workloads by utilizing algorithms that are optimized for database-specific requirements.
pgBackRest [v2.26](https://github.com/pgbackrest/pgbackrest/releases/tag/release/2.26) is the current stable release. Release notes are on the [Releases](http://www.pgbackrest.org/release.html) page.
pgBackRest [v2.27](https://github.com/pgbackrest/pgbackrest/releases/tag/release/2.27) is the current stable release. Release notes are on the [Releases](http://www.pgbackrest.org/release.html) page.
Documentation for v1 can be found [here](http://www.pgbackrest.org/1). No further releases are planned for v1 because v2 is backward-compatible with v1 options and repositories.

View File

@ -13,26 +13,6 @@ export PGBR_REPO=/backrest
git checkout -b release-ci
```
## Update automake/config scripts
These scripts are required by `src/config` and should be updated with each release, when needed. Note that these files are updated very infrequently.
Check the latest version of `automake` and see if it is > `1.16.1`:
```
https://git.savannah.gnu.org/gitweb/?p=automake.git
```
If so, update the version above and copy `lib/install-sh` from the `automake` repo to the `pgbackrest` repo at `[repo]/src/build/install-sh`:
```
wget -O ${PGBR_REPO?}/src/build/install-sh '[URL]'
```
Get the latest versions of `config.sub` and `config.guess`. These files are not versioned so only keep the version if it is at least two months old to help ensure stability.
```
wget -O ${PGBR_REPO?}/src/build/config.guess 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD'
wget -O ${PGBR_REPO?}/src/build/config.sub 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD'
```
## Update the date, version, and release title
Edit the latest release in `doc/xml/release.xml`, e.g.:
@ -167,3 +147,23 @@ Commit and push to integration:
git commit -m "Begin v2.15 development."
git push origin integration
```
## Update automake/config scripts
These scripts are required by `src/config` and should be updated after each release, when needed. Note that these files are updated very infrequently.
Check the latest version of `automake` and see if it is > `1.16.1`:
```
https://git.savannah.gnu.org/gitweb/?p=automake.git
```
If so, update the version above and copy `lib/install-sh` from the `automake` repo to the `pgbackrest` repo at `[repo]/src/build/install-sh`:
```
wget -O ${PGBR_REPO?}/src/build/install-sh '[URL]'
```
Get the latest versions of `config.sub` and `config.guess`. These files are not versioned so only keep the version if it is at least two months old to help ensure stability.
```
wget -O ${PGBR_REPO?}/src/build/config.guess 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD'
wget -O ${PGBR_REPO?}/src/build/config.sub 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD'
```

View File

@ -214,7 +214,7 @@ eval
# Generate coverage summary
&log(INFO, "Generate Coverage Summary");
executeTest(
"${strTestExe} --no-valgrind --no-optimize --vm-max=3 --coverage-summary",
"${strTestExe} --no-valgrind --clean --no-optimize --vm-max=3 --coverage-summary",
{bShowOutputAsync => true});
}

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,449 @@
[
{
"commit": "20d8c76b6cbf4d803b155680802e8dd245f3d107",
"date": "2020-05-22 13:51:26 -0400",
"subject": "Ignore pg-host* and repo-host* options for the remote command.",
"body": "The purpose of the remote command is to get access to local resources, so a remote should never start another remote. However, this could happen if there were host settings on the remote host, which ended badly with lock errors, loops, etc.\r\n\r\nAdd pg-local and repo-local options to indicate that the resource is local even if there are host settings.\r\n\r\nNote that for the time being these options are internal and not intended for general usage. However, this is likely the direction needed to allow for more symmetric and manageable configurations."
},
{
"commit": "35ab61da708c6b42341449ed5fb68b24bd3a854c",
"date": "2020-05-22 09:28:50 -0400",
"subject": "Remove extra spaces.",
"body": "These spaces crept in over time and then got copy-pasted all over the place."
},
{
"commit": "ae75ffc1731e2d3e7f230d8cceee1e6050b37a33",
"date": "2020-05-21 16:09:23 -0400",
"subject": "Fix possibly missing pg1-* options for the remote command.",
"body": "Some pg1-* options are required by the remote so if they are not provided in the remote's configuration file then it may cause a configuration error, depending on the operation. This currently only applies to the pg1-path option.\r\n\r\nThis is still an issue for repo-* options but the same solution cannot be applied because some repo-* options are secure and cannot be passed on the command-line."
},
{
"commit": "ec7b7c5a3e2062de05e68baec987c35eef4d0a27",
"date": "2020-05-21 13:46:16 -0400",
"subject": "PostgreSQL 13 beta1 support.",
"body": "There don't appear to be any behavioral changes since PostgreSQL 12 and all the tests pass.\r\n\r\nChanges to the control/catalog/WAL versions in subsequent betas may break compatibility but pgBackRest will be updated with each release to keep pace."
},
{
"commit": "ed814321514259a55e84607cd28358ec8cfae754",
"date": "2020-05-21 13:43:12 -0400",
"subject": "Revert PostgreSQL comment to original source version.",
"body": "Not sure how \"iff\" got changed to \"if\". Perhaps an unintentional spell check."
},
{
"commit": "f15d6104d245330db0de59714e9872a18a65e658",
"date": "2020-05-20 14:56:13 -0400",
"subject": "Add local MD5 implementation so S3 works when FIPS is enabled.",
"body": "S3 requires the Content-MD5 header for many requests but MD5 is not available via OpenSSL when FIPS is enabled because it is considered to be insecure.\r\n\r\nEven though our usage does not present any security risks a local M5 implementation is required to circumvent the over-broad FIPS restriction.\r\n\r\nVendorize the MD5 implementation found at https://openwall.info/wiki/people/solar/software/public-domain-source-code/md5 and add full coverage for the module in the common/crypto unit tests."
},
{
"commit": "d5f451a8b99609b220e24346df636e902e9f1aee",
"date": "2020-05-20 08:52:15 -0400",
"subject": "Add missing asserts."
},
{
"commit": "ea9147e2e082ef4bcb793de31b166e65719e9d08",
"date": "2020-05-19 16:58:49 -0400",
"subject": "Reduce buffer-size default to 1MiB.",
"body": "The prior default was determined by benchmarking the Perl code prior to the 1.0 release. In general buffer allocation was more expensive in Perl so large buffers gave the best performance. This was due to multiple buffer allocations for each filter in an IO operation.\n\nThe C code allocates fixed buffers for each IO operation so the cost for buffer allocation is lower than Perl. That being the case it made sense to benchmark the C code to determine the optimal buffer default.\n\nThe performance/storage tests were used to measure the performance of a variety of filters. 1GiB of data was processed by each filter 10 times and the results of the tests were averaged.\n\nWhile most buffer sizes gave similar performance, 1MiB appeared to perform the best overall. Of course, different architectures are likely to yield different results but this seems like a sensible default. The buffer-size option may still need to be manually configured to give optimal results.\n\nRaw test data for reference:\n\n4MB buffer (prior default)\n\ncopy time 1807ms, avg time 180ms, avg throughput: 5942MB/s\nmd5 time 14200ms, avg time 1420ms, avg throughput: 756MB/s\nsha1 time 11431ms, avg time 1143ms, avg throughput: 939MB/s\nsha256 time 23463ms, avg time 2346ms, avg throughput: 457MB/s\ngzip -6 time 381199ms, avg time 38119ms, avg throughput: 28MB/s\nlz4 -1 time 15484ms, avg time 1548ms, avg throughput: 693MB/s\n\n1MB buffer (new default)\n\ncopy time 1760ms, avg time 176ms, avg throughput: 6100MB/s\nmd5 time 13739ms, avg time 1373ms, avg throughput: 781MB/s\nsha1 time 11025ms, avg time 1102ms, avg throughput: 973MB/s\nsha256 time 22539ms, avg time 2253ms, avg throughput: 476MB/s\ngzip -6 time 372995ms, avg time 37299ms, avg throughput: 28MB/s\nlz4 -1 time 15118ms, avg time 1511ms, avg throughput: 710MB/s\n\n512K buffer\n\ncopy time 1782ms, avg time 178ms, avg throughput: 6025MB/s\nmd5 time 13724ms, avg time 1372ms, avg throughput: 782MB/s\nsha1 time 10959ms, avg time 1095ms, avg throughput: 979MB/s\nsha256 time 22982ms, avg time 2298ms, avg throughput: 467MB/s\ngzip -6 time 378120ms, avg time 37812ms, avg throughput: 28MB/s\nlz4 -1 time 15484ms, avg time 1548ms, avg throughput: 693MB/s\n\n256K buffer\n\ncopy time 1805ms, avg time 180ms, avg throughput: 5948MB/s\nmd5 time 13706ms, avg time 1370ms, avg throughput: 783MB/s\nsha1 time 11074ms, avg time 1107ms, avg throughput: 969MB/s\nsha256 time 22588ms, avg time 2258ms, avg throughput: 475MB/s\ngzip -6 time 372645ms, avg time 37264ms, avg throughput: 28MB/s\nlz4 -1 time 16346ms, avg time 1634ms, avg throughput: 656MB/s"
},
{
"commit": "f773d909be42ba68125df991e8fbabb30f2bbe4a",
"date": "2020-05-19 14:35:20 -0400",
"subject": "Improve storage filter performance tests.",
"body": "Improve the accuracy of the calculations in several areas with better integer expressions.\n\nMake the input buffer size configurable. Previously it was always 1mb, i.e. block size.\n\nUse a macro for output results to reduce code duplication."
},
{
"commit": "a3d9d9a387c61d02cf66eac0c6ab84517898dc34",
"date": "2020-05-19 08:20:33 -0400",
"subject": "Handle missing reason phrase in HTTP response.",
"body": "Reason phrases (e.g. OK) are optional in HTTP 1.1 but the space after the status code is not. When the reason phrase was missing the required space was trimmed along with the trailing CR leading to a format error.\n\nRework the logic to preserve the space and allow empty reason phrases.\n\nFound while testing against the Backblaze S3-compatible API."
},
{
"commit": "cffdadad927e3860bd33247ef6b7c3037fc7d9cb",
"date": "2020-05-18 19:55:09 -0400",
"subject": "Fix typo pp64le -> ppc64le.",
"body": "Travis-CI guessed the correct value but logged a warning."
},
{
"commit": "688ec2a8f5634694a3985ec003d118ed8c74b540",
"date": "2020-05-18 19:11:26 -0400",
"subject": "Use an extension to denote vendorized code.",
"body": "Vendorized code is copied from another project when a library is not available and a git subproject won't work. Currently all the vendorized code is copied from PostgreSQL but it makes sense to have a more general mechanism for indicating vendorized code.\n\nThe .vendor extension will be used to denote vendorized code in the same way that .auto is used to denote auto-generated code."
},
{
"commit": "a329afd3be16206e0397732f0de79c93686702f1",
"date": "2020-05-18 19:02:11 -0400",
"subject": "Add MD5 hash filter to performance tests."
},
{
"commit": "92c036b966b3f88b4914c5be24c96c22d5019e98",
"date": "2020-05-18 18:09:41 -0400",
"subject": "Add code count rule for valgrind suppression missed in 6be5ea33.",
"body": "6be5ea33 changed valgrind suppression file naming but failed to update the code count rules."
},
{
"commit": "ac5d46dc50a662c97c2948aac9101c0df71110f3",
"date": "2020-05-16 18:25:31 -0400",
"subject": "Increase buffer size for lz4 compression flush.",
"body": "Some lz4 versions between r131 and 1.7.5 did not return a sufficient buffer size from LZ4F_compressBound() to allow LZ4F_compressEnd() to complete reliably. While this issue was fixed in lz4 1.7.5 there are affected versions in supported distributions such as CentOS/RHEL 7.\n\nUse one of the hacks suggested in https://github.com/lz4/lz4/issues/290 to increase the buffer size enough for LZ4F_compressEnd() to complete. This means that a slightly larger buffer size is required for all versions but it seems worth it to (hopefully) to fix the issue in all lz4 versions."
},
{
"commit": "f4e6e6bd80c68dca6a33a8e23e0fa32026f52d23",
"date": "2020-05-15 07:49:23 -0400",
"subject": "Add missing cryptoInit() in cryptoHmacOne().",
"body": "If cryptoInit() had not already been called then EVP_get_digestbyname() would fail.\n\nThis does not appear to be a problem currently because of call order. Also, newer versions of OpenSSL auto-initialize."
},
{
"commit": "ea485e916bb29c9c0306b7c28148f09883835482",
"date": "2020-05-14 18:45:23 -0400",
"subject": "Add jq to tools installed by Vagrantfile."
},
{
"commit": "ed5149c9be9e41ba4b2ccccac3644f24ecb36bd7",
"date": "2020-05-14 18:27:26 -0400",
"subject": "Disable package builds for CentOS 7 which are broken upstream."
},
{
"commit": "e7ad795ffba6f963457b27142fe17d4aa6bd5c01",
"date": "2020-05-13 19:00:48 -0400",
"subject": "Move common HTTP headers to HTTP client.",
"body": "Some headers in the S3 driver were common HTTP headers that may be used by other drivers that utilize HTTP.\n\nAlso change the order of HTTP_HEADER_TRANSFER_ENCODING to be alphabetical."
},
{
"commit": "4cbd1f1e7efe5217540e2e69bb3baf5d55556068",
"date": "2020-05-13 14:27:28 -0400",
"subject": "Fix incorrect whitespace."
},
{
"commit": "b5dd14e6f306b18f4a1f555ccde28ffda8e41ac8",
"date": "2020-05-12 18:55:20 -0400",
"subject": "Make storage type more generic in the integration tests.",
"body": "Rather than bS3 use strStorage which can indicate more than two storage types.\n\nFor the moment there are still only two storage types but this change is required before more can be added."
},
{
"commit": "9639a2c15fa3e3bb5cffc6bf6ac4eb82f85aef49",
"date": "2020-05-12 13:30:46 -0400",
"subject": "Add missing do...while loop to harness macro."
},
{
"commit": "b8a5c3ac6fe5b4c321270ae256492e11b8276445",
"date": "2020-05-12 13:13:04 -0400",
"subject": "Fix incorrect command in reference documentation.",
"body": "Also update process to command to be more consistent with the surrounding text."
},
{
"commit": "33cbdb78fd3f51f758b2da948faaee97d6bcd870",
"date": "2020-05-11 10:10:22 -0400",
"subject": "Add ppc64le to Travis-CI build matrix.",
"body": "apt.postgresql.org provides packages for ppcle64 so it's important that we support it.\n\nRearrange jobs a bit based on current runtimes and importance. Also reduce the number of tests run for arm64 since it is slower than other architectures."
},
{
"commit": "86855e271d476e9cf04d5844a7630a979b0398d6",
"date": "2020-05-09 12:12:29 -0400",
"subject": "Fix subtle timing issue in command/expire tests.",
"body": "cdebfb09 added relative times to backup.into but a subtle issue was introduced that would cause the tests to fail if the time acquired by cmdExpire() was exactly the same as timeNow used to format backup.info. cmdExpire() was working correctly given the inputs, but the tests did not run predictably.\n\nThis was found while running the tests with --no-valgrind --no-coverage which allows them to run a lot faster, thus exposing the timing issue."
},
{
"commit": "22d260ad53c4517ece42fe64ff75e022e5054466",
"date": "2020-05-09 09:17:33 -0400",
"subject": "Allow more tests to run outside of containers.",
"body": "These tests required sudo to achieve complete coverage.\n\nAdd a new coverage exception, vm_covered, that applies to code that can only be covered in a container. When the test is run outside of a container code sections that require a container will be excluded with TEST_CONTAINER_REQUIRED and the coverage exception will be added to prevent a coverage error.\n\nThis does require marking up the core code with vm_covered, which in some modules (e.g. common/io/tls/client) can be extensive. It's possible that some of these tests can be rewritten to be less dependent on sudo but no attempt was made to do that here.\n\nOnly allow coverage summaries in a vm since coverage summaries outside a vm will not be complete, which was true even before this commit."
},
{
"commit": "b4fc1804a83beb2628b1094cec2962f550e40bcd",
"date": "2020-05-08 16:27:54 -0400",
"subject": "Minor updates for bzip2 compression after more review.",
"body": "Update error types throw by bzip2 to be more consistent with gzip.\r\n\r\nUpdate the bzip2 and gzip error default to be AssertError as that's the more common case in both, and add a 'break;' to the default clause -- we don't intend to be just falling through those case statements, even if the default is the last, we should be explicit about that.\r\n\r\nClean up some tabs that snuck in, rename a variable to be more clear, and add some comments."
},
{
"commit": "14369c1c3c8231e7b09b60493f2ad5047f39053c",
"date": "2020-05-08 15:36:20 -0400",
"subject": "Mark variables modified in TRY block as volatile.",
"body": "It's important that the values in these variables are maintained even after an exception is thrown, so they must be marked volatile.\n\nFound while testing on the ppc64le architecture."
},
{
"commit": "cdebfb09e01e64d6acfe650345a56d2b1805374e",
"date": "2020-05-08 15:25:03 -0400",
"subject": "Add time-based retention for full backups.",
"body": "The --repo-retention-full-type option allows retention of full backups based on a time period, specified in days.\r\n\r\nThe new option will default to 'count' and therefore will not affect current installations. Setting repo-retention-full-type to 'time' will allow the user to use a time period, in days, to indicate full backup retention. Using this method, a full backup can be expired only if the time the backup completed is older than the number of days set with repo-retention-full (calculated from the moment the 'expire' command is run) and at least one full backup meets the retention period. If archive retention has not been configured, then the default settings will expire archives that are prior to the oldest retained full backup. For example, if there are three full backups ending in times that are 25 days old (F1), 20 days old (F2) and 10 days old (F3), then if the full retention period is 15 days, then only F1 will be expired; F2 will be retained because F1 is not at least 15 days old."
},
{
"commit": "e873ad6da0b1c2b15a360a117f71df386aa23a0d",
"date": "2020-05-07 17:26:46 -0400",
"subject": "Update Minio version to 2020-05-06T23-23-25Z in tests/documentation.",
"body": "This release fixes the issue we submitted regarding an unquoted eTag: https://github.com/minio/minio/issues/9517"
},
{
"commit": "faabf1227d05dcfbefcd0dfa57fae9a537e2fc08",
"date": "2020-05-07 11:06:56 -0400",
"subject": "Update Fedora container to Fedora 32.",
"body": "This allows unit testing on gcc 10.\n\nAlso fix an incorrect enum in the config/config unit test that was caught by the new compiler."
},
{
"commit": "6646446d2a1ed6182c8388c0007e184d15522127",
"date": "2020-05-07 10:22:22 -0400",
"subject": "Use Z_STREAM_END to detect gz compression finish.",
"body": "Checking for free space in the output buffer worked, but if the buffer was completely filled then deflate() would need to be called again, which was wasteful and a bit confusing for debugging.\n\nInstead, use Z_STREAM_END to detect that compression is done.\n\nThis change was inspired by the bz2 implementation in a021c9fe since bz2 does not allow BZ2_bzCompress() to be called after BZ_STREAM_END is returned. That made it obvious that gz would prefer the same implementation, even if it is more tolerant. The documentation at https://www.zlib.net/manual.html agrees."
},
{
"commit": "f8509ab76ca9fc3469ab8a9752223c6462213e00",
"date": "2020-05-07 07:38:28 -0400",
"subject": "Don't allow sudo to disable core dumps in test containers.",
"body": "Newer versions of sudo output this message to stderr when run in a container:\n\nsudo: setrlimit(RLIMIT_CORE): Operation not permitted\n\nSee https://github.com/sudo-project/sudo/issues/42 for details.\n\nA simple workaround is to prevent sudo from disabling core dumps. This seems safe enough because if sudo is segfaulting then core files are the least of our worries."
},
{
"commit": "3a7558985505ce1a764e846aa01e943dc1e470d1",
"date": "2020-05-07 07:23:15 -0400",
"subject": "Don't allow sudo to disable core dumps in documentation.",
"body": "Newer versions of sudo output this message to stdout when run in a container:\n\nsudo: setrlimit(RLIMIT_CORE): Operation not permitted\n\nSee https://github.com/sudo-project/sudo/issues/42 for details.\n\nA simple workaround is to prevent sudo from disabling core dumps. This seems safe enough because if sudo is segfaulting then core files are the least of our worries."
},
{
"commit": "ad784e19971d43d886abdec9ee2c326954d9d7a3",
"date": "2020-05-07 07:12:42 -0400",
"subject": "Add libz-dev to required build packages in Debian documentation.",
"body": "This is apparently not installed by default in Ubuntu 20.04 as it was in prior versions."
},
{
"commit": "12a5d8a155aeb999a4683caaa0e2ca22925be443",
"date": "2020-05-06 19:11:28 -0400",
"subject": "Add arm64 to Travis-CI build matrix.",
"body": "apt.postgresql.org will soon be providing packages for arm64 so it's important that we support it.\n\nTesting on multiple architectures also helps expose potential issues in popular architectures. See 10a5182d for an example."
},
{
"commit": "6be5ea3388a0238247e2a2cf47f9efd6b1a21d74",
"date": "2020-05-06 18:24:48 -0400",
"subject": "Suppress Valgrind errors on a per-VM basis.",
"body": "There are a number of Valgrind errors on Ubuntu 12.04 which do not happen on newer distro versions. However, suppressions for these errors have masked legitimate issues in subsequent code.\n\nInstead, make suppressions VM specific so errors in other VMs are not masked."
},
{
"commit": "28967951abb47d82914b3b8822a6bc4b79502ac0",
"date": "2020-05-06 18:17:50 -0400",
"subject": "Fix leak in TlsClient object.",
"body": "sckClientOpen() is the most likely part of this code to error so move it up above SSL session creation to reduce the chance of a leak."
},
{
"commit": "e67792980249b2e35c81d26d2fa574bab52250cb",
"date": "2020-05-06 18:09:11 -0400",
"subject": "Fix leak in CipherBlock object.",
"body": "EVP_CIPHER_CTX_cleanup() was being called instead of EVP_CIPHER_CTX_free() so most of the memory was being freed but not all of it.\n\nThis leak was masked by Valgrind suppressions which are only applicable to Ubuntu 12.04, which will be addressed in a future commit."
},
{
"commit": "10a5182d626bd4ba55d4c6ae711555fb030121ca",
"date": "2020-05-06 15:00:34 -0400",
"subject": "Simplify retry handling in tls/http/socket clients.",
"body": "Travis-CI arm64 was not happy with this pattern, perhaps because connected was being reset after a longjmp() even though it should have stayed with its originally initialized value of false. In any case, tlsClientOpen() ended up returning NULL on error rather than throwing an exception.\n\nThe new pattern seems simpler and passes all tests unmodified, so even though the error was only seen in TlsClient it makes sense to propagate to the other clients."
},
{
"commit": "8aede3353cac6a7ddd08f89e23343c6e8b81d3fd",
"date": "2020-05-06 14:49:03 -0400",
"subject": "Always use 127.0.0.1 on TLS tests outside of containers.",
"body": "Resolving localhost can vary based on the local network configuration so it is safer to just use a static IP.\n\nThis was found while testing on Travis-CI arm64."
},
{
"commit": "3fe6ad5047515f51b6ef9bf783e41900eca21c24",
"date": "2020-05-06 10:23:42 -0400",
"subject": "Build branches with -cit suffix on Travis-CI.",
"body": "This allows a branch to be targeted at only Travis-CI and not other CI services."
},
{
"commit": "4c6dbe17eaea15b342f03292dd899de335ff2971",
"date": "2020-05-06 09:12:50 -0400",
"subject": "Remove redundant Cirrus-CI branch filter."
},
{
"commit": "a021c9fe053934b9b620f20caffbbf311c457bb8",
"date": "2020-05-05 16:49:01 -0400",
"subject": "Add bzip2 compression support.",
"body": "bzip2 is a widely available, high-quality data compressor. It typically compresses files to within 10% to 15% of the best available techniques (the PPM family of statistical compressors), while being around twice as fast at compression and six times faster at decompression.\r\n\r\nbzip2 is currently available on all supported platforms."
},
{
"commit": "98f30ef2225e849ecaf501ff11db3952c7ff93c7",
"date": "2020-05-05 15:00:13 -0400",
"subject": "Move PostgreSQL 9.4 real integration tests to Ubuntu 18.04.",
"body": "PostgreSQL 9.4 packages for RHEL 6 were dropped from yum.p.o."
},
{
"commit": "99405cbb1582c6dcc133ce9d722beef6e4a0cf78",
"date": "2020-05-05 13:23:36 -0400",
"subject": "Replace booleans with enums in compressType parameters.",
"body": "This was an oversight in 438b957f which added multiple compression type support. The booleans were interpreted as none and gz which works fine for the CompressType enum until the position of gz or none changes."
},
{
"commit": "d04c21ca83163e875ad4d9e06c57402f45979272",
"date": "2020-05-04 19:05:38 -0400",
"subject": "Centralize String and Buffer constants in stringz.h.",
"body": "It's not clear how useful single-character zero-terminated constants are or if we want propagate them through the code, but it at least makes sense to centralize the constants used by the Buffer and String objects."
},
{
"commit": "47aa765375844509edc1b6e406d4d020590b2e1d",
"date": "2020-05-04 15:25:27 -0400",
"subject": "Add Zstandard compression support.",
"body": "Zstandard is a fast lossless compression algorithm targeting real-time compression scenarios at zlib-level and better compression ratios. It's backed by a very fast entropy stage, provided by Huff0 and FSE library.\n\nZstandard version >= 1.0 is required, which is generally only available on newer distributions."
},
{
"commit": "1aaaa94253c3d50b5f4adbe5521cf2cee6cadbe3",
"date": "2020-05-04 14:02:25 -0400",
"subject": "Remove Ubuntu 19.04 container definition.",
"body": "Ubuntu 19.04 is no longer supported."
},
{
"commit": "39f5f3a0b484f16c2820bd47c0a12a530bd04c30",
"date": "2020-05-04 13:12:52 -0400",
"subject": "Remove PostgreSQL 9.4 for Fedora 30 dropped from yum.p.o."
},
{
"commit": "64a21920e2cbe8444f78ce281d06c9dfa118ed12",
"date": "2020-05-03 18:42:33 -0400",
"subject": "Move S3 initialization in user guide quickstart.",
"body": "The previous location was too late to allow --var=s3-all=y to work with --require=/repo-host, which depends on /quickstart/configure-archiving.\n\nSince the section is not included in production documentation, the position is not very important to flow so just move it to where it works."
},
{
"commit": "ef9324992250028657f7fcc9393d79fbbd0148c3",
"date": "2020-05-01 17:32:31 -0400",
"subject": "Add contributor for 816ba924 and reclassify as a bug."
},
{
"commit": "816ba9244f31bc9cc333eeed1e7e12e76e36edc3",
"date": "2020-05-01 10:30:35 -0400",
"subject": "Allow pg-path1 to be optional for synchronous archive-push.",
"body": "If the WAL path is absolute then pg1-path should be optional but in fact it was required to load pg_control.\n\nSkip the pg_control check when pg1-path is not specified. The check against the stanza version/system-id remains to protect the repo from corruption."
},
{
"commit": "1d45282b9723a05d0b14e7222c42b915aa217735",
"date": "2020-05-01 09:31:50 -0400",
"subject": "Add missing spaces between while keyword and condition.",
"body": "Our convention is to have a space here but some were missed."
},
{
"commit": "28ab65df1049be7623ce7af99a58a6dee616ea36",
"date": "2020-05-01 09:08:37 -0400",
"subject": "Remove unused struct member.",
"body": "Perhaps this was intended to verify the WAL size but was never implemented.\n\nVerifying the WAL size is probably a good idea so this member may be added back if the feature is implemented."
},
{
"commit": "22ba1f02ceca93a8a0fba1f1ba93243bbcb12337",
"date": "2020-04-30 11:01:38 -0400",
"subject": "Convert storagePosixNew() to storagePosixNewP().",
"body": "An upcoming feature requires new parameters for storagePosixNew() and this causes a lot of churn because almost every test creates a Posix storage object. Some refactoring in the tests might reduce this duplication but storagePosixNew() is collecting a lot of parameters so converting to storagePosixNewP() makes sense in any case.\n\nThere are relatively few call sites in the core code but they still benefit from better readability after this change."
},
{
"commit": "baf8cb90684fe743e51412f305f4194196f429ea",
"date": "2020-04-30 10:47:09 -0400",
"subject": "Fix issue checking if file links are contained in path links.",
"body": "There is no conflict if the path containing a file link is a parent path of a path link. The Perl code apparently had this right but the migration to C missed it.\n\nExclude this case when checking for link conflicts."
},
{
"commit": "ce55866714ac706e542bba7e14a9306b5de848f1",
"date": "2020-04-30 10:34:44 -0400",
"subject": "Enforce non-null for most string options.",
"body": "There have been a number of segfaults reported because a string option expected to be non-null was actually null. This is generally due to options that are expected to be set but are in fact optional.\n\nProtect against this by creating cfgOptionStrNull() to get options that can be null, while changing cfgOptionStr() to always expect non-null. There are relatively few places where nulls are expected.\n\nThere is definitely a chance for breakage here as null options might currently be working in the field but will be caught by this new check. Hopefully introducing the check early in the release cycle will allow us to catch any issues."
},
{
"commit": "1158e7d645331ed364542f10b2c92a1740229601",
"date": "2020-04-29 13:55:05 -0400",
"subject": "Move command-line decompress check in common/compress test.",
"body": "It makes sense to do this check right after the first compression so any issues are caught early.\n\nAlso, none of the current compression formats omit decompressCmd so make the test mandatory."
},
{
"commit": "c5241e5007c4736b52a519e1eefd9a38f7971dc2",
"date": "2020-04-29 08:06:49 -0400",
"subject": "Expire WAL archive only when repo-retention-archive threshold is met.",
"body": "Previously when retention-archive was set (either by the user or by default), archives prior to the archive-start of the oldest remaining full backup (after backup expiration occurred) would be expired even though the retention-archive threshold had not been met. For example, if there were 1 full backup remaining after backup expiration and the retention-archive was set to 2 and retention-archive-type=full, then archives prior to the archive-start of the remaining full backup would still be removed even though retention-archive required 2 full backups remaining before archives should be expired.\n\nThe thought was to keep the archive directory clean and since the full backup did not require prior archives, it was safe to delete them. However, this has caused problems for some users in the past (because they needed the WAL for other purposes) and with the new adhoc and time-based retention features, it was decided that the archives should remain until the threshold was met. The archives will eventually be removed and if having them causes space issues, the expire command and the retention-archive can always be run and adjusted."
},
{
"commit": "775e81a74deb4da274c1e4fc86b218e957a2173d",
"date": "2020-04-28 15:55:54 -0400",
"subject": "Refactor regular expression error handling per Coverity report.",
"body": "Coverity was concerned that regExpError() might return and lead to an invalid reference of \"this\". This was unlikely since the function should never return but Coverity didn't know that. Also, a difference in error-handling logic at the two sites could cause the issue Coverity reported if they were to get out of sync.\n\nFix by refactoring out the core error function so that it is clear it will never return."
},
{
"commit": "e421cf9dd31e0916885e1510278f918afc2318fd",
"date": "2020-04-28 15:04:34 -0400",
"subject": "Fix possible NULL reference reported by Coverity.",
"body": "this->input is set to NULL when the read input goes to EOF but it was possible that this->input could be used again in a subsequent loop, according to Coverity.\n\nIn fact this would really only be a problem if EOF suddenly went back to false, which is not allowed. However, checking this->input is cheaper than calling ioReadEofDriver() driver on each loop so this change makes sense as an optimization and it makes Coverity happy, too."
},
{
"commit": "f764953b70ee1ec839079fbda262a60d91b284c9",
"date": "2020-04-27 17:25:38 -0400",
"subject": "Check that options are valid when requested.",
"body": "If an option may not be valid for a command it should be checked with cfgOptionValid() or cfgOptionTest().\n\nIt appears this rule is followed pretty strictly since the only changes required were in unit tests."
},
{
"commit": "1c1a7104604073feff3109a74d1d8ee4a2efc86d",
"date": "2020-04-27 14:00:36 -0400",
"subject": "Add --set option to the expire command.",
"body": "The specified backup set (i.e. the backup label provided and all of its dependent backups, if any) will be expired regardless of backup retention rules except that at least one full backup must remain in the repository."
},
{
"commit": "ad33f545d165260c85cb41f39fd9b0044cc97841",
"date": "2020-04-27 13:17:30 -0400",
"subject": "Move latest backup link functionality to backup/common module.",
"body": "This function is needed for new expire features."
},
{
"commit": "483838233fb4d36425a84dc6274cc1f8833feaa2",
"date": "2020-04-27 10:57:19 -0400",
"subject": "The expire command now checks if a stop file is present.",
"body": "This check has always been missing but it was not noticed because expire is not usually run independently of backup, which does the check correctly."
},
{
"commit": "a5b2630d7c089b229f48e2f9cbd1e9b390fcf496",
"date": "2020-04-27 10:49:05 -0400",
"subject": "Throw user-friendly error if expire is not run on repository host.",
"body": "Running the expire command on a non-repository host threw an assertion because the command is not yet configured for remote execution."
},
{
"commit": "987df62ec014c9b3f21b1ff9cd6db9a33f837a84",
"date": "2020-04-26 17:22:37 -0400",
"subject": "Centralize enforcement of option constraints.",
"body": "Each option type enforced its own constraints but there was a lot of duplication. Centralize the enforcement to remove the duplication.\n\nAlso convert the option type assert to a production error. This is unlikely to happen in production but the test is quite cheap so it can't hurt.\n\nFinally, add a NULL check. Most option types can never be NULL."
},
{
"commit": "12069ff8f388171cf094a579ad27f5969d92b60e",
"date": "2020-04-24 08:45:54 -0400",
"subject": "Add reviewer."
},
{
"commit": "0dd6629a2dba7c011e03c5f39659dc516da28456",
"date": "2020-04-24 08:40:54 -0400",
"subject": "Automatically add default user as reviewer.",
"body": "Contributions looked like they had no reviewer when reviewed by the default user."
},
{
"commit": "e92eb709d6c60e44f406af139b8346b12fee1868",
"date": "2020-04-24 08:00:00 -0400",
"subject": "Add backup/expire running status to the info command.",
"body": "This is implemented by checking for a backup lock on the host where info is running so there are a few limitations:\n\n* It is not currently possible to know which command is running: backup, expire, or stanza-*. The stanza commands are very unlikely to be running so it's pretty safe to guess backup/expire. Command information may be added to the lock file to improve the accuracy of the reported command.\n\n* If the info command is run on a host that is not participating in the backup, e.g. a standby, then there will be no backup lock. This seems like a minor limitation since running info on the repo or primary host is preferred."
},
{
"commit": "2e6938fad9ab4e93c472a3f86812ed82fba1df4d",
"date": "2020-04-21 17:55:36 -0400",
"subject": "Restore works when PGDATA is a link.",
"body": "Make the restore clean process look more like manifest build, i.e. do cleanup of each target root directory outside the main cleanup callback. This means some code duplication but removes the logic handling \"dot\" paths.\n\nAdd tests for both restore and backup (which already worked but was not tested)."
},
{
"commit": "1eb26789387eff604e5902848be4ea7cb633557e",
"date": "2020-04-21 17:20:42 -0400",
"subject": "Fix minor leak in TLS host verification.",
"body": "sk_GENERAL_NAME_free() only freed the name stack, not the names in the stack. sk_GENERAL_NAME_pop_free() frees both.\n\nDue to aggressive connection reuse this leak was unlikely to be very noticeable."
},
{
"commit": "6d11fe53f773163407cf28096f3e48f75c119460",
"date": "2020-04-21 10:51:38 -0400",
"subject": "Update RHEL package location (again).",
"body": "This changed (again) upstream so update the file paths."
},
{
"commit": "a999500d2c6fe07cfc935ba40dbf2d9a192a8f0c",
"date": "2020-04-20 16:21:53 -0400",
"subject": "Remove XML source for test/README.md.",
"body": "63b9f46a removed test/README.md but did not remove the XML source so it reappeared when the release documentation was built."
},
{
"commit": "3e2dc058173bdd01f6d48d7715c70e3c5b17facb",
"date": "2020-04-20 15:58:06 -0400",
"subject": "Begin v2.27 development."
},
{
"commit": "2352ecf7c0db8d12cda4759709b4cd570e1b5de4",
"date": "2020-04-20 15:44:31 -0400",

View File

@ -9,7 +9,7 @@
<table-cell>command/archive</table-cell>
<table-cell>12/12 (100.0%)</table-cell>
<table-cell>72/72 (100.0%)</table-cell>
<table-cell>212/212 (100.0%)</table-cell>
<table-cell>214/214 (100.0%)</table-cell>
</table-row>
<table-row>
@ -22,15 +22,15 @@
<table-row>
<table-cell>command/archive/push</table-cell>
<table-cell>10/10 (100.0%)</table-cell>
<table-cell>82/82 (100.0%)</table-cell>
<table-cell>270/270 (100.0%)</table-cell>
<table-cell>86/86 (100.0%)</table-cell>
<table-cell>274/274 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>command/backup</table-cell>
<table-cell>33/33 (100.0%)</table-cell>
<table-cell>34/34 (100.0%)</table-cell>
<table-cell>470/470 (100.0%)</table-cell>
<table-cell>1097/1097 (100.0%)</table-cell>
<table-cell>1106/1106 (100.0%)</table-cell>
</table-row>
<table-row>
@ -49,9 +49,9 @@
<table-row>
<table-cell>command/expire</table-cell>
<table-cell>8/8 (100.0%)</table-cell>
<table-cell>152/152 (100.0%)</table-cell>
<table-cell>240/240 (100.0%)</table-cell>
<table-cell>10/10 (100.0%)</table-cell>
<table-cell>202/202 (100.0%)</table-cell>
<table-cell>322/322 (100.0%)</table-cell>
</table-row>
<table-row>
@ -64,8 +64,8 @@
<table-row>
<table-cell>command/info</table-cell>
<table-cell>7/7 (100.0%)</table-cell>
<table-cell>162/162 (100.0%)</table-cell>
<table-cell>347/347 (100.0%)</table-cell>
<table-cell>164/164 (100.0%)</table-cell>
<table-cell>360/360 (100.0%)</table-cell>
</table-row>
<table-row>
@ -92,7 +92,7 @@
<table-row>
<table-cell>command/restore</table-cell>
<table-cell>26/26 (100.0%)</table-cell>
<table-cell>460/460 (100.0%)</table-cell>
<table-cell>450/450 (100.0%)</table-cell>
<table-cell>927/927 (100.0%)</table-cell>
</table-row>
@ -105,9 +105,9 @@
<table-row>
<table-cell>common</table-cell>
<table-cell>164/164 (100.0%)</table-cell>
<table-cell>165/165 (100.0%)</table-cell>
<table-cell>532/532 (100.0%)</table-cell>
<table-cell>1673/1673 (100.0%)</table-cell>
<table-cell>1675/1675 (100.0%)</table-cell>
</table-row>
<table-row>
@ -117,6 +117,13 @@
<table-cell>102/102 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>common/compress/bz2</table-cell>
<table-cell>13/13 (100.0%)</table-cell>
<table-cell>20/20 (100.0%)</table-cell>
<table-cell>159/159 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>common/compress/gz</table-cell>
<table-cell>13/13 (100.0%)</table-cell>
@ -131,11 +138,18 @@
<table-cell>163/163 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>common/compress/zst</table-cell>
<table-cell>13/13 (100.0%)</table-cell>
<table-cell>12/12 (100.0%)</table-cell>
<table-cell>133/133 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>common/crypto</table-cell>
<table-cell>26/26 (100.0%)</table-cell>
<table-cell>74/74 (100.0%)</table-cell>
<table-cell>332/332 (100.0%)</table-cell>
<table-cell>30/30 (100.0%)</table-cell>
<table-cell>92/92 (100.0%)</table-cell>
<table-cell>467/467 (100.0%)</table-cell>
</table-row>
<table-row>
@ -148,8 +162,8 @@
<table-row>
<table-cell>common/io</table-cell>
<table-cell>45/45 (100.0%)</table-cell>
<table-cell>108/108 (100.0%)</table-cell>
<table-cell>486/486 (100.0%)</table-cell>
<table-cell>110/110 (100.0%)</table-cell>
<table-cell>487/487 (100.0%)</table-cell>
</table-row>
<table-row>
@ -162,22 +176,22 @@
<table-row>
<table-cell>common/io/http</table-cell>
<table-cell>37/37 (100.0%)</table-cell>
<table-cell>168/168 (100.0%)</table-cell>
<table-cell>478/478 (100.0%)</table-cell>
<table-cell>164/164 (100.0%)</table-cell>
<table-cell>475/475 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>common/io/socket</table-cell>
<table-cell>24/24 (100.0%)</table-cell>
<table-cell>56/56 (100.0%)</table-cell>
<table-cell>228/228 (100.0%)</table-cell>
<table-cell>52/52 (100.0%)</table-cell>
<table-cell>225/225 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>common/io/tls</table-cell>
<table-cell>20/20 (100.0%)</table-cell>
<table-cell>76/76 (100.0%)</table-cell>
<table-cell>272/272 (100.0%)</table-cell>
<table-cell>72/72 (100.0%)</table-cell>
<table-cell>270/270 (100.0%)</table-cell>
</table-row>
<table-row>
@ -189,9 +203,9 @@
<table-row>
<table-cell>config</table-cell>
<table-cell>101/101 (100.0%)</table-cell>
<table-cell>624/624 (100.0%)</table-cell>
<table-cell>1459/1459 (100.0%)</table-cell>
<table-cell>103/103 (100.0%)</table-cell>
<table-cell>632/632 (100.0%)</table-cell>
<table-cell>1462/1462 (100.0%)</table-cell>
</table-row>
<table-row>
@ -205,7 +219,7 @@
<table-cell>info</table-cell>
<table-cell>119/119 (100.0%)</table-cell>
<table-cell>740/740 (100.0%)</table-cell>
<table-cell>2369/2369 (100.0%)</table-cell>
<table-cell>2370/2370 (100.0%)</table-cell>
</table-row>
<table-row>
@ -225,15 +239,15 @@
<table-row>
<table-cell>protocol</table-cell>
<table-cell>67/67 (100.0%)</table-cell>
<table-cell>188/188 (100.0%)</table-cell>
<table-cell>814/814 (100.0%)</table-cell>
<table-cell>194/194 (100.0%)</table-cell>
<table-cell>818/818 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>storage</table-cell>
<table-cell>68/68 (100.0%)</table-cell>
<table-cell>214/214 (100.0%)</table-cell>
<table-cell>796/796 (100.0%)</table-cell>
<table-cell>208/208 (100.0%)</table-cell>
<table-cell>792/792 (100.0%)</table-cell>
</table-row>
<table-row>
@ -246,7 +260,7 @@
<table-row>
<table-cell>storage/posix</table-cell>
<table-cell>26/26 (100.0%)</table-cell>
<table-cell>145/146 (99.32%)</table-cell>
<table-cell>149/150 (99.33%)</table-cell>
<table-cell>459/459 (100.0%)</table-cell>
</table-row>
@ -266,7 +280,7 @@
<table-row>
<table-cell>TOTAL</table-cell>
<table-cell>1285/1285 (100.0%)</table-cell>
<table-cell>6025/6026 (99.98%)</table-cell>
<table-cell>19200/19200 (100.0%)</table-cell>
<table-cell>1321/1321 (100.0%)</table-cell>
<table-cell>6123/6124 (99.98%)</table-cell>
<table-cell>19736/19736 (100.0%)</table-cell>
</table-row>

View File

@ -12,7 +12,7 @@
</intro>
<release-list>
<release date="XXXX-XX-XX" version="2.27dev" title="UNDER DEVELOPMENT">
<release date="2020-05-26" version="2.27" title="Expiration Improvements and Compression Drivers">
<release-core-list>
<release-bug-list>
<release-item>
@ -44,6 +44,7 @@
<release-item>
<release-item-contributor-list>
<release-item-ideator id="ctenuun"/>
<release-item-reviewer id="cynthia.shang"/>
</release-item-contributor-list>
<p>Handle missing reason phrase in HTTP response.</p>
@ -52,6 +53,7 @@
<release-item>
<release-item-contributor-list>
<release-item-ideator id="eric.radman"/>
<release-item-reviewer id="cynthia.shang"/>
</release-item-contributor-list>
<p>Increase buffer size for <proper>lz4</proper> compression flush.</p>
@ -78,44 +80,52 @@
<release-feature-list>
<release-item>
<commit subject="Add time-based retention for full backups."/>
<release-item-contributor-list>
<release-item-contributor id="cynthia.shang"/>
<release-item-contributor id="pierre.ducroquet"/>
</release-item-contributor-list>
<p>Add time-based retention for full backups.</p>
<p>Time-based retention for full backups.</p>
<p>The <br-option>--repo-retention-full-type</br-option> option allows retention of full backups based on a time period, specified in days.</p>
</release-item>
<release-item>
<commit subject="Add --set option to the expire command."/>
<release-item-contributor-list>
<release-item-contributor id="cynthia.shang"/>
</release-item-contributor-list>
<p>Add <br-option>--set</br-option> option to the <cmd>expire</cmd> command.</p>
<p>Ad hoc backup expiration.</p>
<p>Allow the user to remove a specified backup regardless of retention settings.</p>
</release-item>
<release-item>
<commit subject="Add Zstandard compression support."/>
<release-item-contributor-list>
<release-item-reviewer id="cynthia.shang"/>
</release-item-contributor-list>
<p>Add <proper>Zstandard</proper> compression support.</p>
<p><proper>Zstandard</proper> compression support.</p>
<p>Note that setting <br-option>compress-type=zst</br-option> will make new backups and archive incompatible (unrestorable) with prior versions of <backrest/>.</p>
</release-item>
<release-item>
<commit subject="Add bzip2 compression support."/>
<release-item-contributor-list>
<release-item-contributor id="stephen.frost"/>
<release-item-reviewer id="david.steele"/>
<release-item-reviewer id="cynthia.shang"/>
</release-item-contributor-list>
<p>Add <proper>bzip2</proper> compression support.</p>
<p><proper>bzip2</proper> compression support.</p>
<p>Note that setting <br-option>compress-type=bz2</br-option> will make new backups and archive incompatible (unrestorable) with prior versions of <backrest/>.</p>
</release-item>

View File

@ -1,7 +1,7 @@
# Initialize configuration
# ----------------------------------------------------------------------------------------------------------------------------------
AC_PREREQ([2.69])
AC_INIT([pgBackRest], [2.27dev])
AC_INIT([pgBackRest], [2.27])
AC_CONFIG_SRCDIR([version.h])
AC_CONFIG_AUX_DIR(build)

20
src/configure vendored
View File

@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for pgBackRest 2.27dev.
# Generated by GNU Autoconf 2.69 for pgBackRest 2.27.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@ -577,8 +577,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='pgBackRest'
PACKAGE_TARNAME='pgbackrest'
PACKAGE_VERSION='2.27dev'
PACKAGE_STRING='pgBackRest 2.27dev'
PACKAGE_VERSION='2.27'
PACKAGE_STRING='pgBackRest 2.27'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@ -1250,7 +1250,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures pgBackRest 2.27dev to adapt to many kinds of systems.
\`configure' configures pgBackRest 2.27 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1297,7 +1297,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of pgBackRest 2.27dev:";;
short | recursive ) echo "Configuration of pgBackRest 2.27:";;
esac
cat <<\_ACEOF
@ -1387,7 +1387,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
pgBackRest configure 2.27dev
pgBackRest configure 2.27
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@ -1685,7 +1685,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by pgBackRest $as_me 2.27dev, which was
It was created by pgBackRest $as_me 2.27, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@ -4709,7 +4709,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by pgBackRest $as_me 2.27dev, which was
This file was extended by pgBackRest $as_me 2.27, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -4771,7 +4771,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
pgBackRest config.status 2.27dev
pgBackRest config.status 2.27
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@ -5475,4 +5475,4 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
# Generated from src/build/configure.ac sha1 a4acd8b59dcdff7e986a8454335119e955d63c91
# Generated from src/build/configure.ac sha1 069c7b9ac85fb7a9eb70ae3894d44509b802b7a6

View File

@ -23,6 +23,6 @@ repository will be invalid unless migration functions are written.
/***********************************************************************************************************************************
Software version. Currently this value is maintained in Version.pm and updated by test.pl.
***********************************************************************************************************************************/
#define PROJECT_VERSION "2.27dev"
#define PROJECT_VERSION "2.27"
#endif

View File

@ -175,10 +175,6 @@ doc/xml/release.xml:
class: doc/source
type: xml
doc/xml/test.xml:
class: doc/source
type: xml
doc/xml/user-guide-index.xml:
class: doc/source
type: xml
@ -519,6 +515,30 @@ src/common/assert.h:
class: core
type: c/h
src/common/compress/bz2/common.c:
class: core
type: c
src/common/compress/bz2/common.h:
class: core
type: c/h
src/common/compress/bz2/compress.c:
class: core
type: c
src/common/compress/bz2/compress.h:
class: core
type: c/h
src/common/compress/bz2/decompress.c:
class: core
type: c
src/common/compress/bz2/decompress.h:
class: core
type: c/h
src/common/compress/gz/common.c:
class: core
type: c
@ -579,6 +599,30 @@ src/common/compress/lz4/decompress.h:
class: core
type: c/h
src/common/compress/zst/common.c:
class: core
type: c
src/common/compress/zst/common.h:
class: core
type: c/h
src/common/compress/zst/compress.c:
class: core
type: c
src/common/compress/zst/compress.h:
class: core
type: c/h
src/common/compress/zst/decompress.c:
class: core
type: c
src/common/compress/zst/decompress.h:
class: core
type: c/h
src/common/crypto/cipherBlock.c:
class: core
type: c
@ -603,6 +647,10 @@ src/common/crypto/hash.h:
class: core
type: c/h
src/common/crypto/md5.vendor.c:
class: core/vendor
type: c
src/common/debug.c:
class: core
type: c
@ -1200,11 +1248,11 @@ src/postgres/interface/page.c:
type: c
src/postgres/interface/pageChecksum.vendor.c:
class: core/auto
class: core/vendor
type: c
src/postgres/interface/static.vendor.h:
class: core/auto
class: core/vendor
type: c/h
src/postgres/interface/v083.c:
@ -1255,9 +1303,9 @@ src/postgres/interface/v120.c:
class: core
type: c
src/postgres/interface/version.vendor.h:
class: core/auto
type: c/h
src/postgres/interface/v130.c:
class: core
type: c
src/postgres/interface/version.h:
class: core
@ -1267,6 +1315,10 @@ src/postgres/interface/version.intern.h:
class: core
type: c/h
src/postgres/interface/version.vendor.h:
class: core/vendor
type: c/h
src/postgres/version.h:
class: core
type: c/h