1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2025-09-16 09:06:18 +02:00

v2.34: PostgreSQL 14 Support

Bug Fixes:

* Fix issues with leftover spool files from a prior restore. (Reviewed by Cynthia Shang, Stefan Fercot, Floris van Nee. Reported by Floris van Nee.)
* Fix issue when checking links for large numbers of tablespaces. (Reviewed by Cynthia Shang, Avinash Vallarapu. Reported by Avinash Vallarapu.)
* Free no longer needed remotes so they do not timeout during restore. (Reviewed by Cynthia Shang. Reported by Francisco Miguel Biete.)
* Fix help when a valid option is invalid for the specified command. (Reviewed by Stefan Fercot. Reported by Cynthia Shang.)

Features:

* Add PostgreSQL 14 support. (Reviewed by Cynthia Shang.)
* Add automatic GCS authentication for GCE instances. (Reviewed by Jan Wieck, Daniel Farina.)
* Add repo-retention-history option to expire backup history. (Contributed by Stefan Fercot. Reviewed by Cynthia Shang, David Steele.)
* Add db-exclude option. (Contributed by Stefan Fercot. Reviewed by Cynthia Shang.)

Improvements:

* Change archive expiration logging from detail to info level. (Contributed by Cynthia Shang. Reviewed by David Steele.)
* Remove stanza archive spool path on restore. (Reviewed by Cynthia Shang, Stefan Fercot.)
* Do not write files atomically or sync paths during backup copy. (Reviewed by Stephen Frost, Stefan Fercot, Cynthia Shang.)

Documentation Improvements:

* Update contributing documentation. (Contributed by Cynthia Shang. Reviewed by David Steele, Stefan Fercot.)
* Consolidate RHEL/CentOS user guide into a single document. (Reviewed by Cynthia Shang.)
* Clarify that repo-s3-role is not an ARN. (Contributed by Isaac Yuen. Reviewed by David Steele.)
This commit is contained in:
David Steele
2021-06-07 06:51:08 -04:00
parent c9a8ff27f2
commit d10a99d73b
10 changed files with 1338 additions and 6310 deletions

View File

@@ -231,14 +231,14 @@ pgbackrest/test/test.pl --vm=none --dry-run
--- output ---
P00 INFO: test begin - log level info
P00 INFO: test begin on x86_64 - log level info
P00 INFO: builds required: bin
--> P00 INFO: 68 tests selected
--> P00 INFO: 70 tests selected
P00 INFO: P1-T01/68 - vm=none, module=common, test=error
[filtered 65 lines of output]
P00 INFO: P1-T67/68 - vm=none, module=performance, test=type
P00 INFO: P1-T68/68 - vm=none, module=performance, test=storage
P00 INFO: P1-T01/70 - vm=none, module=common, test=error
[filtered 67 lines of output]
P00 INFO: P1-T69/70 - vm=none, module=performance, test=type
P00 INFO: P1-T70/70 - vm=none, module=performance, test=storage
--> P00 INFO: DRY RUN COMPLETED SUCCESSFULLY
```
@@ -248,7 +248,7 @@ pgbackrest/test/test.pl --vm=none --dev --vm-out --module=common --test=wait
--- output ---
P00 INFO: test begin - log level info
P00 INFO: test begin on x86_64 - log level info
P00 INFO: check code autogenerate
P00 INFO: cleanup old data
P00 INFO: builds required: none
@@ -257,32 +257,32 @@ pgbackrest/test/test.pl --vm=none --dev --vm-out --module=common --test=wait
P00 INFO: P1-T1/1 - vm=none, module=common, test=wait
run 1 - waitNew(), waitMore, and waitFree()
l0018 expect AssertError: assertion 'waitTime <= 999999000' failed
L0018 expect AssertError: assertion 'waitTime <= 999999000' failed
run 1/1 ------------- l0021 0ms wait
l0025 new wait
l0026 check remaining time
l0027 check wait time
l0028 check sleep time
l0029 check sleep prev time
l0030 no wait more
l0033 new wait = 0.2 sec
l0034 check remaining time
l0035 check wait time
l0036 check sleep time
l0037 check sleep prev time
l0038 check begin time
l0044 lower range check
l0045 upper range check
l0047 free wait
l0052 new wait = 1.1 sec
l0053 check wait time
l0054 check sleep time
l0055 check sleep prev time
l0056 check begin time
l0062 lower range check
l0063 upper range check
l0065 free wait
run 1/1 ------------- L0021 0ms wait
L0025 new wait
L0026 check remaining time
L0027 check wait time
L0028 check sleep time
L0029 check sleep prev time
L0030 no wait more
L0033 new wait = 0.2 sec
L0034 check remaining time
L0035 check wait time
L0036 check sleep time
L0037 check sleep prev time
L0038 check begin time
L0044 lower range check
L0045 upper range check
L0047 free wait
L0052 new wait = 1.1 sec
L0053 check wait time
L0054 check sleep time
L0055 check sleep prev time
L0056 check begin time
L0062 lower range check
L0063 upper range check
L0065 free wait
TESTS COMPLETED SUCCESSFULLY
@@ -300,7 +300,7 @@ pgbackrest/test/test.pl --vm=none --dev --module=postgres
--- output ---
P00 INFO: test begin - log level info
P00 INFO: test begin on x86_64 - log level info
P00 INFO: check code autogenerate
P00 INFO: cleanup old data
P00 INFO: builds required: none
@@ -323,8 +323,8 @@ pgbackrest/test/test.pl --vm-build --vm=u18
--- output ---
P00 INFO: test begin - log level info
P00 INFO: Using cached pgbackrest/test:u18-base-20200924A image (d95d53e642fc1cea4a2b8e935ea7d9739f7d1c46) ...
P00 INFO: test begin on x86_64 - log level info
P00 INFO: Using cached pgbackrest/test:u18-base-20210521A image (a92925d1200fd12d5f3d59f3a3db555c6efa00be) ...
P00 INFO: Building pgbackrest/test:u18-test image ...
P00 INFO: Build Complete
```
@@ -336,7 +336,7 @@ pgbackrest/test/test.pl --vm=u18 --dev --module=mock --test=archive --run=2
--- output ---
P00 INFO: test begin - log level info
P00 INFO: test begin on x86_64 - log level info
P00 INFO: check code autogenerate
P00 INFO: cleanup old data and containers
P00 INFO: builds required: bin, bin host

View File

@@ -4,7 +4,7 @@
pgBackRest aims to be a reliable, easy-to-use 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.33](https://github.com/pgbackrest/pgbackrest/releases/tag/release/2.33) is the current stable release. Release notes are on the [Releases](http://www.pgbackrest.org/release.html) page.
pgBackRest [v2.34](https://github.com/pgbackrest/pgbackrest/releases/tag/release/2.34) 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.

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,708 @@
[
{
"commit": "c9a8ff27f2468dd769bfe8829b16e68d64357efb",
"date": "2021-06-02 11:46:54 -0400",
"subject": "Add HRN_STORAGE_PATH_REMOVE() macro.",
"body": "Update command/archive-push test to show how it is used."
},
{
"commit": "a97fc6e708b67fcf32aec85d312fd3ff5e7d93aa",
"date": "2021-06-01 17:10:15 -0400",
"subject": "Add storage/remote test for unknown user/group name."
},
{
"commit": "d35315aaf99be7492b7712cda7922f54ccdd924f",
"date": "2021-06-01 15:33:07 -0400",
"subject": "Add missing parameter log debug."
},
{
"commit": "8250990afb06e0bfb74d2f9ece19338127060b94",
"date": "2021-06-01 09:03:44 -0400",
"subject": "Replace harnessCfgLoad*() functions with HRN_CFG_LOAD() macro.",
"body": "HRN_CFG_LOAD() handles the majority of test configuration loads and has various options for special cases.\n\nIt was not clear when to use harnessCfgLoadRaw() vs harnessCfgLoad(). Now \"raw\" functionality is granular and enabled by parameters, e.g. noStd."
},
{
"commit": "c1277677a3e595a169f3bec7e1da31e8431f2f71",
"date": "2021-05-28 15:23:18 -0400",
"subject": "Add HRN_STORAGE_PATH_CREATE() macro.",
"body": "Update command/archive-get test to show how it is used.\n\nAlso move one path create that was much earlier than it needed to be."
},
{
"commit": "c8427682eafd8d38403818464711d63086dafc35",
"date": "2021-05-28 14:39:43 -0400",
"subject": "Improve storage harness/test macros.",
"body": "Make the macros more consistent in format and make sure that each macro outputs a line number before doing any work so when errors happen it is clear where they happened.\n\nAdd noRecurse option to TEST_STORAGE_LIST().\n\nAdd comment option to all storage macros."
},
{
"commit": "0a43be018347292a2d5e7ec68bbde595604bd104",
"date": "2021-05-28 13:08:41 -0400",
"subject": "Use L to denote line numbers in test output.",
"body": "The lower-case l was too easy to confuse with a 1."
},
{
"commit": "cfe8e5191039b63915f459f9f2cead7aab6b594d",
"date": "2021-05-28 08:50:28 -0400",
"subject": "Remove line parameter from hrnTestResultBegin().",
"body": "Instead store the line number in hrnTestLogPrefix() so it doesn't need to be passed to hrnTestResultBegin().\n\nAlso add missing linefeed in hrnStorageList()."
},
{
"commit": "b3ac9e8010e225542fe4cb584e42a53adcba9d22",
"date": "2021-05-28 08:03:22 -0400",
"subject": "Remove unused padding parameter from hrnTestLogPrefix().",
"body": "Also add fflush() so log prefix is displayed immediately."
},
{
"commit": "52217f12445dd05cb828ed2f8cd19be2ad8759fd",
"date": "2021-05-27 16:50:18 -0400",
"subject": "Replace storageTest with storagePg*() in command/archive-get test.",
"body": "All instances of storageTest are better represented with storagePg*(), which allows TEST_PATH and TEST_PATH_PG to be omitted.\n\nAlso remove some headers which are no longer needed."
},
{
"commit": "aceb956815a87f0c19ea171de25d2c3842a6d806",
"date": "2021-05-27 08:03:44 -0400",
"subject": "Change archive expiration logging from detail to info level.",
"body": "To assist with issue debugging, removal of files during archive expiration has been changed from detail level logging to info level."
},
{
"commit": "5b332b22b508d896abb64fa6abe26c78c83a29bc",
"date": "2021-05-26 13:07:18 -0400",
"subject": "Add repo-retention-history option to expire backup history.",
"body": "The default is to keep all backup history to match the current behavior. In minimal configuration (0 days), unexpired backups are always kept in history.\r\n\r\nWhen a full backup manifest expires, all dependent differential/incremental manifests expire as well."
},
{
"commit": "a69a6c2f5579a55624763592ce9d8d7e92dc55f0",
"date": "2021-05-26 12:41:15 -0400",
"subject": "Show diff when test.pl --gen-check detects unexpected autogeneration.",
"body": "This will help track down autogeneration issues if they can't be reproduced locally."
},
{
"commit": "ba351e9c5ce475831de2aa22cc2b9afa8714a21d",
"date": "2021-05-26 12:38:23 -0400",
"subject": "Refactor storage/remote unit test using the protocol remote shim.",
"body": "Using the local process shim improves coverage and simplifies the tests."
},
{
"commit": "58369c02df39ac9916d5de42d2df9ad509c33b6f",
"date": "2021-05-25 18:16:59 -0400",
"subject": "Add remote process shim.",
"body": "Run the remote process inside a forked child process instead of exec'ing it. This allows coverage to accumulate in the remote process rather than needing to test the remote protocol functions directly, resulting in better end-to-end testing and less test duplication. Another advantage is that the pgbackrest binary does not need to be built for the test and the test does not need to run in a container."
},
{
"commit": "441c000b5c3d8a4dfe67616d2a281c58184ef3ea",
"date": "2021-05-25 18:09:29 -0400",
"subject": "Factor remote process exec out of protocolRemoteGet().",
"body": "This allows protocolRemoteExec() to be shimmed, which means the remote can be run as a child of the test process, simplifying coverage testing.\n\nThe shim does not need SSH parameters, so also split those out into a separate function and update the tests to match."
},
{
"commit": "e1bc1b3e5321c585ed4e2162c28a5f881b1b9342",
"date": "2021-05-25 17:48:42 -0400",
"subject": "Set buffer-size in the configuration test harness.",
"body": "Most tests can set buffer-size as needed, but local/remote process shims are forked, so the best way to set buffer-size is via the configuration."
},
{
"commit": "cd88f8232950f1d6939c0642fa784c2d8a2110d6",
"date": "2021-05-25 11:08:51 -0400",
"subject": "Move protocol test module before config module.",
"body": "The protocol module should be tested before modules that have a dependency on it."
},
{
"commit": "6732806d89ded2969fbf31d85c51e35c2d6f8345",
"date": "2021-05-25 11:06:05 -0400",
"subject": "Add local process shim to archive-get/archive-push unit tests.",
"body": "Use the local process shim introduced in ef63750e in the archive-get/archive-push unit tests."
},
{
"commit": "d55b9471a89163ed362c64960316c292e51cdd8e",
"date": "2021-05-25 11:00:24 -0400",
"subject": "Protocol shim improvements.",
"body": "Add executable to parameter list to avoid first option being lost. The backup, restore, and verify tests worked OK with their first option being defaulted because it ended up being job-retry which worked fine as the default.\n\nAdd hrnProtocolLocalShimUninstall() allow the shim to be uninstalled.\n\nLog shim at debug level to make it obvious in the logs when a shim is in use."
},
{
"commit": "55f52955a5da07e4ebee312c493759fa9dd3f566",
"date": "2021-05-24 17:45:31 -0400",
"subject": "Fix shims with more than one function.",
"body": "Each subsequent function would double every line in the C module.\n\nMove the loop to detect shimmed functions down to prevent this issues."
},
{
"commit": "2452c4d5a4c230b8e3c33d3bddf69e56dfbec284",
"date": "2021-05-24 17:17:03 -0400",
"subject": "Add PostgreSQL 14 support.",
"body": "There are no code changes from PostgreSQL 13 so simply add the new version.\r\n\r\nAdd CATALOG_VERSION_NO_MAX to allow the catalog version to \"float\" during the PostgreSQL beta/rc period so new pgBackRest versions are not required when the catalog version changes.\r\n\r\nUpdate the integration tests to handle new PostgreSQL startup messages."
},
{
"commit": "eba013b49b850e53d59795ac6358fcb3381048a3",
"date": "2021-05-24 16:29:36 -0400",
"subject": "Fix issue when checking links for large numbers of tablespaces.",
"body": "manifestLinkCheck() was pretty inefficient so large numbers of links caused it to use a lot of memory and eventually crash. This is a more efficient implementation which runs O(nlogn) and uses far less memory.\r\n\r\nChecking for duplicate file links has been added, which represents a change in behavior, but hopefully a good one."
},
{
"commit": "ccac75e7de8754b39bb691ff8830a2839ea7a285",
"date": "2021-05-24 16:03:15 -0400",
"subject": "Consolidate RHEL/CentOS user guide into a single document.",
"body": "The user guide was split primarily to provide documentation for the stop-auto option in PostgreSQL <= 9.5. Now that 9.5 is EOL there does not seem to be a good reason to generate an extra user guide. The stop-auto function is still documented in the reference.\r\n\r\nLeave the stop-auto documentation in the user guide in case we want to manually generate documentation for older versions.\r\n\r\nAlso rename centos to rhel for most identifiers since that is the core platform we are building for, similar to how we label 'debian' builds even though we generally use Ubuntu. With CentOS set to become an upstream for RHEL later this year, we'll likely need to pick a new test distribution, perhaps Rocky Linux if that gets off the ground."
},
{
"commit": "f6303152f5f4b9ee538f4378797c9bf8f81bb3c8",
"date": "2021-05-24 12:40:27 -0400",
"subject": "Minor fixes for command/archive-get unit test.",
"body": "Test and remove WAL segment 000000010000000100000002 in the test where it is created rather than as a byproduct of a much later test.\n\nRemove incorrect local role from test. It worked, but was not the correct command role to be using when calling cmdArchiveGet().\n\nMove some harness headers down to the correct section."
},
{
"commit": "e5e0b2119634847f624c824929f5e4af24da9c02",
"date": "2021-05-22 15:07:18 -0400",
"subject": "Replace system() in tests with HRN_SYSTEM*()."
},
{
"commit": "bd40156c223837e3130ef9041ab7baf44570b362",
"date": "2021-05-22 14:22:51 -0400",
"subject": "Rename TEST_SYSTEM*() to HRN_SYSTEM*().",
"body": "These calls are not tests, rather they setup data for tests."
},
{
"commit": "73885f8c2e3a1ac234cce85684e81db961ad6d47",
"date": "2021-05-22 14:09:45 -0400",
"subject": "Replace hrnLogResult() with TEST_RESULT_LOG/_FMT().",
"body": "The macros provide more information when there is an error and may be updated in the future without changing the test code."
},
{
"commit": "6baad5cdd1f73771e6f87d788769ba658c52ff80",
"date": "2021-05-22 11:59:43 -0400",
"subject": "Replace TEST_ERROR_FMT() with TEST_ERROR() where possible.",
"body": "Some calls did not need TEST_ERROR_FMT() at all and others could be converted by replacing parameters with available defines, e.g. TEST_PATH."
},
{
"commit": "a4f057bb70ca79c8b57ab5418f1b0cc65d3ae521",
"date": "2021-05-22 11:28:56 -0400",
"subject": "Remove comment formatting from TEST_*() macros.",
"body": "Comment formatting was not used much but it incurred a heavy cost in each macro to process possible formatting.\n\nRemove formatted comments where they did not contain valuable information and replace with strZ(strNewFmt()) otherwise."
},
{
"commit": "b270253a69cd44682e94e9cbfcf68f2dce4058a4",
"date": "2021-05-22 09:30:54 -0400",
"subject": "Add defines for many test*() getter functions.",
"body": "A define was already added for TEST_PATH but it was not widely used. Replace all occurrences of testPath() with TEST_PATH in the tests.\n\nReplace testUser() with TEST_USER, testGroup() with TEST_GROUP, testRepoPath() with HRN_PATH_REPO, testDataPath() with HRN_PATH, testProjectExe() with TEST_PROJECT_EXE, and testScale() with TEST_SCALE.\n\nReplace {[path]}, {[user]}, {[group]}, etc. with defines and remove hrnReplaceKey(). This is better than having two ways to deal with replacements.\n\nIn some cases the original test*() getters were kept because they are used by the harness, which does not have access to the new defines. Move them to harnessTest.intern.h to indicate that the tests should no longer use them."
},
{
"commit": "aed3d468a1557474eba4a24854732fc09581b265",
"date": "2021-05-21 17:36:43 -0400",
"subject": "Rename strNew() to strNewZ() and add parameter-less strNew().",
"body": "Replace all instances of strNew(\"\") with strNew() and use strNewZ() for non-empty zero-terminated strings. Besides saving a useless parameter, this will allow smarter memory allocation in a future commit by signaling intent, in general, to append or not.\n\nIn the tests use STRDEF() or VARSTRDEF() where more appropriate rather than blindly replacing with strNewZ(). Also replace strLstAdd() with strLstAddZ() where appropriate for the same reason."
},
{
"commit": "68faf1482a42ea14f5b00a91e19bd5aedec275b8",
"date": "2021-05-21 13:21:25 -0400",
"subject": "Update contributing documentation.",
"body": "Add more examples of how to write code, add configuration options, test, etc."
},
{
"commit": "15b8b9207da40df3df92ee7464a546c335a5a4d9",
"date": "2021-05-21 12:51:32 -0400",
"subject": "Add log shim.",
"body": "This allows DEBUG_UNIT and DEBUG_UNIT_EXTERN to be removed since static log variables can now be exposed by functions in the harness."
},
{
"commit": "ef63750e0bc8292caefe8e421a31e985026f72ee",
"date": "2021-05-21 12:45:00 -0400",
"subject": "Add local process shim.",
"body": "Run the local process inside a forked child process instead of exec'ing it. This allows coverage to accumulate in the local process rather than needing to test the local protocol functions directly, resulting in better end-to-end testing and less test duplication. Another advantage is that the pgbackrest binary does not need to be built for the test.\n\nThe backup, restore, and verify command tests have been updated to use the new shim for coverage."
},
{
"commit": "cab7a97ab6308d72b509ef2e02c559ac691f436b",
"date": "2021-05-20 18:47:31 -0400",
"subject": "Add shim feature for unit tests.",
"body": "A shim allows a test harness to access static functions and variables in a C module, and also allows functions to be shimmed (i.e. overridden) for the purposes of testing.\n\nFor instance, coverage testing works when a process that is normally exec'd is run as a forked child process instead."
},
{
"commit": "e31df55c8dc3ce8c5cd071b0a66d83b3c7c3c4ed",
"date": "2021-05-20 18:35:30 -0400",
"subject": "Factor local process exec out of protocolLocalGet().",
"body": "This allows protocolLocalExec() to be shimmed, which means the local can be run as a child of the test process, simplifying coverage testing."
},
{
"commit": "45a4e801ed52f60f27c73eacaf63ff4b483ab352",
"date": "2021-05-20 16:02:31 -0400",
"subject": "Replace getopt_long() with custom implementation.",
"body": "getopt_long() requires an exhaustive list of all possible options that may be found on the command line. Because of the way options are indexed (e.g. repo1-4, pg1-8) optionList[] has 827 entries and we have kept it small by curtailing the maximum indexes very severely. Another issue is that getopt_long() scans the array sequentially so parsing gets slower as the index maximums increase.\r\n\r\nReplace getopt_long() with a custom implementation that behaves the same but allows options to be parsed with a function instead of using optionList[]. This commit leaves the list in place in order to focus on the getopt_long() replacement, but cfgParseOption() could be replaced with a more efficient implementation that removes the need for optionList[].\r\n\r\nThis implementation also fixes an issue where invalid options were misreported in the error message if they only had one dash, e.g. -config. This seems to have been some kind of problem in getopt_long(), but no investigation was done since the new implementation fixes it.\r\n\r\nTests were added at 0825428, 2b8d2da, 34dd663, and 384f247 to check that previously untested getopt_long() behavior doesn't change."
},
{
"commit": "831ee81466c28ca563d5f5f5468681aca6fe3bea",
"date": "2021-05-20 14:39:47 -0400",
"subject": "Rename default command role to main.",
"body": "Main makes more sense because we refer to the main process in the code, not the default process. The word default is pretty overloaded anyway."
},
{
"commit": "8453d89a92f6b7846bc8eeead285a1abd8fdfb1b",
"date": "2021-05-19 14:18:43 -0400",
"subject": "Add recursion to TEST_STORAGE_LIST() macro.",
"body": "This makes the macro useful when subpaths are present.\n\nIdentify types other than files (path, link, etc.) with a single appended character for easier debugging."
},
{
"commit": "93eb2f8362489eba2e6a6deee6b0d0c6dd3e6a2c",
"date": "2021-05-19 14:03:42 -0400",
"subject": "Fix invalid type in test function.",
"body": "This should have been char * from the start, but of course void * worked fine."
},
{
"commit": "4d48850aad23042b3d7bf22221e2f5d34c00de07",
"date": "2021-05-19 12:58:48 -0400",
"subject": "Update negate to indicate that it should not be used for new options."
},
{
"commit": "870bcf30af1a516802a67ac173e8bd7a369c6530",
"date": "2021-05-18 16:48:30 -0400",
"subject": "Add missing header.",
"body": "This worked because all places where this header was included, common/type/stringId.h was included first."
},
{
"commit": "4fa95af447d1b9caecbaacb5e7a5ef4b334f7331",
"date": "2021-05-18 16:38:57 -0400",
"subject": "Fix typo in struct typedef.",
"body": "This worked because the type is never declared as struct ExecPub."
},
{
"commit": "c92bc43c1eca6d3deac288f68332b323139e6405",
"date": "2021-05-18 16:33:45 -0400",
"subject": "Simplify defaults for --force option.",
"body": "All commands have the same default so it is more efficient to set the default for the entire option."
},
{
"commit": "320c6e1aad2cc9a8dabecb2bc91a9b34464de6ec",
"date": "2021-05-18 15:49:22 -0400",
"subject": "Remove stanza archive spool path on restore.",
"body": "Remove stanza archive spool path so existing files do not interfere with the new cluster. For instance, old archive-push acknowledgements could cause a new cluster to skip archiving. This should not happen if a new timeline is selected but better to be safe. Missing stanza spool paths are ignored.\r\n\r\nAlso add new path expression STORAGE_SPOOL_ARCHIVE to easily access this path."
},
{
"commit": "dc0e6645cd5c4baa3f301feda4acfce55ba363f7",
"date": "2021-05-18 09:08:06 -0400",
"subject": "Move includes after typedef in info/manifest.h.",
"body": "This allows the Manifest type to be used in headers that need it, e.g. command/backup/common.h."
},
{
"commit": "9af033194abc4b1cd3f06c3a97fff71c966c3827",
"date": "2021-05-17 14:55:50 -0400",
"subject": "Add automatic GCS authentication for GCE instances.",
"body": "When running on a GCE instance the authentication token can be pulled directly from the instance metadata. This is configured with repo-gcs-key-type=auto.\r\n\r\nIn a separate commit (26fefa6), move the code that parses the token response into a separate function, storageGcsAuthToken(), since it is now needed by two key types. This drastically improves the readability of the main commit."
},
{
"commit": "0152075e6bc5fca2b78cbe6051a6b3d998c9030f",
"date": "2021-05-17 11:35:22 -0400",
"subject": "Remove default VM for test.pl --coverage-only option.",
"body": "When running outside of our standard Vagrantfile the default will not be set correctly, so require the user to set it.\n\nIn any case, this option is primarily useful for reporting so note that in the command line help."
},
{
"commit": "384f2470775bd2d867529e7267c12a798a259ab3",
"date": "2021-05-17 09:33:36 -0400",
"subject": "Add config/parse tests for config/env partial options.",
"body": "Partial option matching is valid on the command line but should never be used in config files or environment options."
},
{
"commit": "ae7f0af2023ec7b9261a5a4887351eec669c4442",
"date": "2021-05-17 07:20:28 -0400",
"subject": "Move PostgreSQL version interface test functions to a test harness.",
"body": "Some version interface test functions were integrated into the core code because they relied on the PostgreSQL versioned interface. Even though they were compiled out for production builds they cluttered the core code and made it harder to determine what was required by core.\n\nCreate a PostgreSQL version interface in a test harness to contain these functions. This does require some duplication but the cleaner core code seems a good tradeoff. It is possible for some of this code to be auto-generated but since it is only updated once per year the matter is not pressing."
},
{
"commit": "18cc02238bbd15bfa9827ef86078aa172bdae52b",
"date": "2021-05-17 07:15:13 -0400",
"subject": "Remove overzealous cast.",
"body": "There does not seem to be a good reason to have an explicit cast for such a small number, so remove it.\n\nLeave PG_CONTROL_SIZE alone since it will be removed in an upcoming commit."
},
{
"commit": "9235c62c6b597bc4ed812e0c0a3bc3a36ec30767",
"date": "2021-05-17 07:12:46 -0400",
"subject": "Revert ignoring catalog version when identifying a PostgreSQL version.",
"body": "927d9adb changed the way CATALOG_VERSION_NO is used to identify PostgreSQL versions since PG_CONTROL_VERSION is generally bumped with each release. The goal was to make the beta/rc period less painful because any CATALOG_VERSION_NO bump renders pgBackRest inoperative.\n\nThis worked, but in fact we'd rather be stricter about which CATALOG_VERSION_NO we accept when identifying a version of PostgreSQL. It is not just about identifying a major version, but making sure the build contains all the functions and catalogs we expect to make pgBackRest work correctly. It is better to reject early dev/beta/rc builds that may not work.\n\nSince 927d9adb was relatively recent the chance that this stricter checking will cause a problem seems minimal, so revert to checking CATALOG_VERSION_NO for every PostgreSQL version.\n\nLeave in place the code that pulls CATALOG_VERSION_NO from pg_control rather than the internal constant since the plan is still to allow catalog versions to \"float\" during the PostgreSQL beta/rc phase, which will be the subject of a future commit."
},
{
"commit": "f45e76fa2e8ce0f62317a74fdd51083d52659cd5",
"date": "2021-05-13 17:51:39 -0400",
"subject": "Fix issues with leftover spool files from a prior restore.",
"body": "If an ok file (which indicates the WAL segment was not found) is present on the first iteration of the loop then remove it and spawn the async process to retry. This action also resets the queue.\r\n\r\nAlso error if no response is received from the async process rather than returning not found. PostgreSQL will respond the same either way, but this allows us to determine when something is going wrong with the async process.\r\n\r\nUpdate archiveAsyncStatus() to allow warnings to be suppressed. It is better to retry if no WAL segment was found before warning because the warning might be stale."
},
{
"commit": "34dd6636b83ac41cab592d6a6d18c082e1ee272e",
"date": "2021-05-13 17:01:21 -0400",
"subject": "Add config/parse tests for options and option args with spaces.",
"body": "If an option name has a space at the beginning then it will be considered an invalid command, but a space at the end is an invalid option. Add tests for these conditions.\n\nSpaces in option arguments should be preserved, so add a test to be sure this is true."
},
{
"commit": "2b8d2daca15f2535672f195164c0e8daffdade90",
"date": "2021-05-13 16:54:25 -0400",
"subject": "Add config/parse tests for partial options.",
"body": "Add coverage for partial options, i.e. an option that is partially specified but only prefix matches with a single valid option."
},
{
"commit": "add0f9b77de4b9f1395338e4b092bf77b2da2cd5",
"date": "2021-05-13 12:37:59 -0400",
"subject": "Fix an ungrammatical error message in config parsing."
},
{
"commit": "0825428fef00e6b4b107526ffa462fa7558aace4",
"date": "2021-05-13 12:35:11 -0400",
"subject": "Add config/parse test where the option/value are not in the same arg.",
"body": "All the tests in this module use --option=value syntax so add one test with --option value syntax for coverage."
},
{
"commit": "26fefa6aeeae90bbb572ea57b605fb8fe526f1a0",
"date": "2021-05-13 06:59:57 -0400",
"subject": "Refactor GCS token response parsing into a separate function.",
"body": "This function is also useful for the upcoming auto authentication. Refactoring in a separate commit to make the feature commit more readable."
},
{
"commit": "7b71604defa02d5ed9b7aa3407961cb59a52cc45",
"date": "2021-05-12 13:21:59 -0400",
"subject": "Use existing variable for GCS test server port.",
"body": "Also fix incorrect separator comment."
},
{
"commit": "5464ac83d121c653e95f337fa14870bbe35dc9f7",
"date": "2021-05-11 17:24:30 -0400",
"subject": "Convert option values in commands to StringId.",
"body": "Convert most of the remaining options that benefit from being StringIds. Since all the command modules can include config.h directly it makes sense to auto-generate these values instead of manually creating an enum for each one.\r\n\r\nFor the time being StringIds are not being auto-generated because the StringId code does not exist in Perl. However, the *_Z zero-terminated constants for each allowed option value are now auto-generated."
},
{
"commit": "87ba2ca253ec9546cb23635ec15017bb5ce7d6e9",
"date": "2021-05-11 16:54:42 -0400",
"subject": "Change CentOS 7 documentation test to CentOS 8.",
"body": "The CentOS 7 documentation test relies on PostgreSQL 9.5 which has been removed from the yum.p.o repository package. Switch the test to CentOS 8 to fix the immediate issue, but a decision on the PostgreSQL 9.5 documentation will need to be made before the next release."
},
{
"commit": "2bfebff2ec73b0af6d937f303fbb9b8a0b8ee649",
"date": "2021-05-04 15:51:46 -0400",
"subject": "Add instructions to install lcov for MacOS."
},
{
"commit": "54074a569708e40831d767a8b93074f41feec308",
"date": "2021-05-04 07:52:35 -0400",
"subject": "Exclude Dockerfile from code count."
},
{
"commit": "baddec1e9ae37ad08840401e2602301f06bda021",
"date": "2021-05-03 16:31:27 -0400",
"subject": "Basic multi-architecture support for test containers.",
"body": "The tests worked fine on multiple architectures, but would only run \"bare metal\", i.e. tests that required containers could not be run.\n\nEnable basic multi-architecture support by allowing containers to be built using whatever architecture the host supports. Also allow cached containers to be defined for multiple architectures in container.yaml.\n\nAdd a Dockerfile which can be used as a container for other containers to provide a consistent development environment.\n\nThe primary goal is to allow development on Mac M1 but other architectures should find these improvements useful."
},
{
"commit": "87df6d7a58a6ab3c4748ad75e4128cdad761b15a",
"date": "2021-05-03 12:15:39 -0400",
"subject": "Convert BackupType enum to StringId.",
"body": "Allows removal of backupType()/backupTypeStr() and improves debug logging of the enum.\r\n\r\nMove BackupType enum and string constants to info/infoBackup.h so they are available to more modules. Also convert InfoBackup to use BackupType instead of a String."
},
{
"commit": "568dc0ba0c762376b8bd902d83e38f2649a156af",
"date": "2021-05-03 09:34:22 -0400",
"subject": "Add new instructions for PostgreSQL news and include a sample.",
"body": "It is no longer possible to pull news source from the PostgreSQL website so add a sample in the doc directory. Update the release instructions to reflect this change.\n\nAlso note that it is no longer necessary to post separately to pgsql-announce."
},
{
"commit": "fb7ddce8076107c33c25832c9acb8baffbd57563",
"date": "2021-04-28 13:21:24 -0400",
"subject": "Convert InfoPgType enum to StringId.",
"body": "Improves debug logging by outputting archive/backup instead of 0/1."
},
{
"commit": "bd0081fec87ee32fa57adf5c882a6cad5394eaa0",
"date": "2021-04-28 12:37:22 -0400",
"subject": "Update IoClient/IoSession to use StringIds.",
"body": "Using StringId for the client/session type removes String constants and some awkward referencing/dereferencing needed to use a String constant in the interface.\n\nConverting IoSessionRole to StringId removes a conditional in ioSessionToLog() and improves debug logging by outputting client/server instead of 0/1."
},
{
"commit": "0ec91f61c636731a8a46fc69307bbe5d78ac8871",
"date": "2021-04-28 12:23:37 -0400",
"subject": "Convert ArchivePushFileIoType enum to StringId.",
"body": "Improves debug logging by outputting open/write/close instead of 0/1/2."
},
{
"commit": "8394577c6ac1a13884b4b05052ce6328d38ab067",
"date": "2021-04-28 12:05:01 -0400",
"subject": "Convert ArchiveMode enum to StringId.",
"body": "Improves debug logging by outputting get/push instead of 0/1."
},
{
"commit": "7dd01897fd20a3629e7333dc47bed7d02035b501",
"date": "2021-04-28 11:59:04 -0400",
"subject": "Convert ProtocolStorageType enum to StringId.",
"body": "Allows removal of protocolStorageTypeEnum()/protocolStorageTypeStr() and improves debug logging of the enum."
},
{
"commit": "bd68ed63ba38c841e286e0ab5390450f57c23b37",
"date": "2021-04-28 11:43:08 -0400",
"subject": "Convert ProtocolParallelJobState enum to StringId.",
"body": "Allows removal of protocolParallelJobToConstZ(), which was used only for debugging."
},
{
"commit": "85fc3da4c37dc1cb9af3b8c5248121769ab56650",
"date": "2021-04-28 11:36:20 -0400",
"subject": "Update CipherType/CipherMode to StringId.",
"body": "As in 6cc521b, this allows option values and enums to be easily mapped together."
},
{
"commit": "c3b15fc3bdc332591c6b059c2b23b1cce990d387",
"date": "2021-04-28 10:58:45 -0400",
"subject": "Fix comments where 'output' was misspelled as 'ouput'."
},
{
"commit": "066fbcf26826ee8332eb76db0db9d684047513ac",
"date": "2021-04-27 15:25:10 -0400",
"subject": "Refactor String, Buffer, and Variant types with inline getters.",
"body": "Extend the pattern introduced in 79a2d02c to the String, Buffer, and Variant types."
},
{
"commit": "1edcfde93e47c79a8b18b05f7ddb1e9fde29b0ed",
"date": "2021-04-27 12:12:43 -0400",
"subject": "Add cfgOptionDisplay()/cfgOptionIdxDisplay().",
"body": "Centralize the formatting of the configuration value for display to the user or passing on a command line.\r\n\r\nFor the new functions, if the value was set by the user via the command line, config, etc., then that exact value will be displayed. This makes it easier for the user to recognize the value and saves having to format it into something reasonable, especially for time and size option types.\r\n\r\nNote that cfgOptTypeHash and cfgOptTypeList option types are not supported by these functions, but they are generally not displayed to the user as a whole.\r\n\r\nThis also fixes a bug in config/load.c where time values where not being formatted correctly in an error message."
},
{
"commit": "95fb002b85897e71820c44519231975d883f87db",
"date": "2021-04-27 12:04:50 -0400",
"subject": "Preserve unused YAML fix for older Debian/Ubuntu distributions.",
"body": "This fix was not used since backports worked for older Debians and the old affected Ubuntus are EOL.\n\nStill, seems worth preserving just in case it comes up elsewhere."
},
{
"commit": "6cc521b6b232cd10b5b1622b1841d988113d0c16",
"date": "2021-04-23 13:19:47 -0400",
"subject": "Update storage module to use StringIds.",
"body": "Use StringIds for the storage types (e.g. STORAGE_S3_TYPE) and configuration settings, e.g. cfgOptS3KeyType.\r\n\r\nAlso add new config functions and harness config functions to support StringIds."
},
{
"commit": "aa72c19a831fb0dd15a50a003fbaad427f335353",
"date": "2021-04-23 12:33:25 -0400",
"subject": "Do not write files atomically or sync paths during backup copy.",
"body": "There is no need to write the file atomically (e.g. via a temp file on Posix) because checksums are tested on resume after a failed backup. The path does not need be synced for each file because all paths are synced at the end of the backup.\r\n\r\nThis functionality was not lost during the migration -- it never existed in the Perl code, though these settings are used in restore. See 59f1353 where backupFile() was migrated to C."
},
{
"commit": "aaa15b9709cd58ad56e5008858867d91f4abe803",
"date": "2021-04-23 11:46:03 -0400",
"subject": "Add help for all internal options valid for default roles.",
"body": "Fix the segfault when getting help for an internal option is requested by adding help for all internal options that are valid for a default command role.\r\n\r\nAlso print warnings about internal options in code rather than putting in each command/option description."
},
{
"commit": "2ad497ea4cdc53f5966f2abab018696ff4694a2d",
"date": "2021-04-23 08:04:03 -0400",
"subject": "Remove documentation about enum truncation and add tests.",
"body": "The enum truncation observed was due to the value getting passed via a protocol function which silently narrowed the enum.\n\nEven so, add some tests to ensure tested platforms support 64-bit enums."
},
{
"commit": "bcc925b7406ae590cd24ff5a0bbb789a6d1ecd5a",
"date": "2021-04-22 20:04:27 -0400",
"subject": "Replace misused kvAdd() with kvPut().",
"body": "Although kvAdd() works like kvPut() on the first call, kvPut() is more efficient when a key has a single value.\n\nUpdate the comment to clarify that kvAdd() is seldom required."
},
{
"commit": "a2f02f95ec5f2835d3c114d1b96fec8109e11402",
"date": "2021-04-22 19:28:11 -0400",
"subject": "Remove redundant CompressType conversions.",
"body": "These seem to be the result of overzealous copy/paste.\n\nThe conversions do not even serve as a verification of locally available compression types since compressTypeEnum() and compressTypeStr() do not check that."
},
{
"commit": "468aa79ea8b1975b1d6fe0665611230432f16d75",
"date": "2021-04-22 19:10:13 -0400",
"subject": "Remove auto-generated option String constants.",
"body": "These are rarely used and end up using more space than they save since most of them are never referenced.\n\nReplace VARSTR() with VARSTRDEF() where these constants are being used."
},
{
"commit": "6a39c51f8f1d992c53bc3af80d9db0037c09fb41",
"date": "2021-04-22 18:18:34 -0400",
"subject": "Test pull requests in Cirrus CI.",
"body": "Both FreedBSD and MacOS use clang as their default compiler and clang catches some errors that gcc does not. Specifically, wide integers being assigned to short integers resulting in possible truncations."
},
{
"commit": "06fa18582a405417c8ab4ba667cb01a13a5c3103",
"date": "2021-04-22 12:23:08 -0400",
"subject": "Free no longer needed remotes so they do not timeout during restore.",
"body": "The remotes are no longer needed in the main process after the manifest is loaded. If the restore is long enough the connection will timeout and WARN at the end of the restore. This is harmless for the restore but distracting for the user.\r\n\r\nTo prevent this, free the remotes once they are no longer needed."
},
{
"commit": "45f83558ea862c6f496a27b886e1160e6303bbe8",
"date": "2021-04-22 11:48:04 -0400",
"subject": "Fix help when a valid option is invalid for the specified command.",
"body": "Getting help for a valid option that was invalid for the command would segfault.\r\n\r\nAdd a check to ensure the option is valid for the command's default role."
},
{
"commit": "72dac5b10b7cd31a00212be9268df95c2d12615c",
"date": "2021-04-22 08:15:36 -0400",
"subject": "Use option constants in warnings.",
"body": "In once case the constant replaces a formatted statement, which is more efficient, and in the other case plain text, which is more maintainable."
},
{
"commit": "20a018a8ae9ce8768044621e19ef716c5622f209",
"date": "2021-04-21 18:27:18 -0400",
"subject": "Fix incorrect test title."
},
{
"commit": "c5b446d406937d35b277cd0d9131e6c058183f3b",
"date": "2021-04-21 10:09:07 -0400",
"subject": "Fix indentation."
},
{
"commit": "fd69357302053a79fdef6decf1ff284a8a442e67",
"date": "2021-04-20 18:43:16 -0400",
"subject": "Add const to inline functions where appropriate.",
"body": "This lets the compiler know that these variables are not modified which should lead to better optimization.\n\nSmart compilers should be able to figure this out on their own, but marking parameters const is still good for documentation."
},
{
"commit": "ed0d48f52cb5332f6804737ac01c43bf76d11a50",
"date": "2021-04-20 15:22:42 -0400",
"subject": "Add StringId type.",
"body": "It is often useful to represent identifiers as strings when they cannot easily be represented as an enum/integer, e.g. because they are distributed among a number of unrelated modules or need to be passed to remote processes. Strings are also more helpful in debugging since they can be recognized without cross-referencing the source. However, strings are awkward to work with in C since they cannot be directly used in switch statements leading to less efficient if-else structures.\n\nA StringId encodes a short string into an integer so it can be used in switch statements but may also be readily converted back into a string for debugging purposes. StringIds may also be suitable for matching user input providing the strings are short enough.\n\nThis patch includes a sample of StringId usage by converting protocol commands to StringIds. There are many other possible use cases. To list a few:\n\n* All \"types\" in storage, filters. IO , etc. These types are primarily for identification and debugging so they fit well with this model.\n\n* MemContext names would work well as StringIds since these are entirely for debugging.\n\n* Option values could be represented as StringIds which would mean we could remove the functions that convert strings to enums, e.g. CipherType.\n\n* There are a number of places where enums need to be converted back to strings for logging/debugging purposes. An example is protocolParallelJobToConstZ. If ProtocolParallelJobState were defined as:\n\ntypedef enum\n{\n protocolParallelJobStatePending = STRID5(\"pend\", ...),\n protocolParallelJobStateRunning = STRID5(\"run\", ...),\n protocolParallelJobStateDone = STRID5(\"done\", ...),\n} ProtocolParallelJobState;\n\nthen protocolParallelJobToConstZ() could be replaced with strIdToZ(). This also applies to many enums that we don't covert to strings for logging, such as CipherMode.\n\nAs an example of usage, convert all protocol commands from strings to StringIds."
},
{
"commit": "292f836f1243e51d102bb4be202e7b21a7a386b1",
"date": "2021-04-19 15:01:00 -0400",
"subject": "Add db-exclude option.",
"body": "Restore excluding the specified databases. Databases excluded will be restored as sparse, zeroed files to save space but still allow PostgreSQL to perform recovery. After recovery, those databases will not be accessible but can be removed with the drop database command. The --db-exclude option can be passed multiple times to specify more than one database to exclude.\r\n\r\nWhen used in combination with the --db-include option, --db-exclude will only apply to standard system databases (template0, template1, and postgres)."
},
{
"commit": "a75b413ac228452acfd33aa3d296d8edbeae9604",
"date": "2021-04-19 14:22:36 -0400",
"subject": "Add storageDriver() inlines missed in b715c70b."
},
{
"commit": "d859fe8c4d60e961cf688f17fb80d0cdc8fb810d",
"date": "2021-04-14 15:48:04 -0400",
"subject": "Update to remove files after archive-get test completes.",
"body": "This cleans up the spool path for the next test. Currently there isn't one but there will be."
},
{
"commit": "040ad71f8cd7b57ec6546e4733749c827ed0aaa3",
"date": "2021-04-14 15:41:55 -0400",
"subject": "Remove lockClear().",
"body": "This function has not been used since the switch to the fork/exec model.\n\nlockClear() was still used in one test (other than the lock test) so update the test and remove the function."
},
{
"commit": "c2d4a0286e5899f3382bd34f9d285f122753bca5",
"date": "2021-04-13 18:06:07 -0400",
"subject": "Define DEBUG in build.auto.c.",
"body": "Both NDEBUG and DEBUG were used in the code, which was a bit confusing.\n\nDefine DEBUG in build.auto.c so it is available in all C and header files and stop using NDEBUG. This is preferable to using NDEBUG everywhere since there are multiple DEBUG* defines, e.g. DEBUG_COVERAGE.\n\nNote that NDEBUG is still required since it is used by the C libraries."
},
{
"commit": "c1aae434ca18ce06a6ea56b779fbdb5702ee1034",
"date": "2021-04-13 17:03:28 -0400",
"subject": "Update Cirrus CI FreeBSD release to 12.2."
},
{
"commit": "a0e24d492f8df97788018fc91d6e408c1c787e15",
"date": "2021-04-13 16:58:02 -0400",
"subject": "Add THIS_PUB() macro to simplify inline object accessors.",
"body": "In combination with the thisPub() function, this macro simplifies accessing the public part of a private object struct.\n\nthisPub() asserts this != NULL so the caller does not need to do it."
},
{
"commit": "9fec4ce98c69044eae4e299e6e95bc45990d6d5c",
"date": "2021-04-13 14:37:02 -0400",
"subject": "Refactor remaining common/io modules with inline getters/setters.",
"body": "Extend the pattern introduced in 79a2d02c to the remaining common/io modules."
},
{
"commit": "5bf160643b53699a28a8f0920c36d6ded767d249",
"date": "2021-04-13 14:02:20 -0400",
"subject": "Clarify that repo-s3-role is not an ARN."
},
{
"commit": "2c9c59170f6c1a3aacfdf0fb5c6197feb87afcc9",
"date": "2021-04-13 12:38:17 -0400",
"subject": "Add bash to Cirrus CI FreeBSD package install.",
"body": "It appears bash was removed from the base image so install explicitly."
},
{
"commit": "8844ced384bf0d5feb5fe395560ec976cc292a73",
"date": "2021-04-12 16:05:40 -0400",
"subject": "Refactor common/io/filter module with inline getters/setters.",
"body": "Extend the pattern introduced in 79a2d02c to the common/io/filter module."
},
{
"commit": "3b9bed95186118a3fbf47e3e0900e74f4ad01217",
"date": "2021-04-09 17:29:14 -0400",
"subject": "Refactor common/type/keyValue module with inline getters/setters.",
"body": "Extend the pattern introduced in 79a2d02c to the common/type/keyValue module."
},
{
"commit": "c434b9ed885e083baed79c76426a7996d1a17d30",
"date": "2021-04-09 17:03:55 -0400",
"subject": "Refactor common/type/xml module with inline getters/setters.",
"body": "Extend the pattern introduced in 79a2d02c to the common/type/xml module."
},
{
"commit": "e18f3c1701b83037431354c41871e9daf16db9d4",
"date": "2021-04-09 15:56:42 -0400",
"subject": "Remove unused XML constructors.",
"body": "These alternate constructors may have been used in the Perl days but they are no longer used so remove them."
},
{
"commit": "ddd37ebf7dcef30322346c34f09aae44a0ca35a2",
"date": "2021-04-09 15:31:31 -0400",
"subject": "Refactor common/exec module with inline getters/setters.",
"body": "Extend the pattern introduced in 79a2d02c to the common/exec module."
},
{
"commit": "1d674c352f1d6fc1875946d32aa0f5db5c0082b7",
"date": "2021-04-09 14:32:21 -0400",
"subject": "Refactor db module with inline getters/setters.",
"body": "Extend the pattern introduced in 79a2d02c to the db module."
},
{
"commit": "442b2e41b1561a5d7f5e06097116279ee173e626",
"date": "2021-04-09 13:48:40 -0400",
"subject": "Refactor info modules with inline getters/setters.",
"body": "Extend the pattern introduced in 79a2d02c to the info modules."
},
{
"commit": "4937653a3df1948ec8c5d9f62075e0f287852ce8",
"date": "2021-04-08 16:46:42 -0400",
"subject": "Refactor protocol modules with inline getters/setters.",
"body": "Extend the pattern introduced in 79a2d02c to the protocol modules."
},
{
"commit": "235e32b57db36ca43bc47c5028ad9b619c223a68",
"date": "2021-04-08 14:47:53 -0400",
"subject": "Add const keyword to module scope constants.",
"body": "These pointers should never be modified, so mark them const."
},
{
"commit": "6c005afd5bcd7260976908dd2ddb2cdb9031996a",
"date": "2021-04-08 14:38:20 -0400",
"subject": "Add Ubuntu 20.04 test VM definition."
},
{
"commit": "d30ec9c9aeaaa454078b67a5998614f0b4c9c81d",
"date": "2021-04-08 10:04:57 -0400",
"subject": "Replace OBJECT_DEFINE_MOVE() and OBJECT_DEFINE_FREE() with inlines.",
"body": "Inline functions are more efficient and if they are not used are automatically omitted from the binary.\n\nThis also makes the implementation of these functions easier to find and removes the need for a declaration. That is, the complete implementation is located in the header rather than being spread between the header and C file."
},
{
"commit": "351e7db4c4df6329f87ceb63b7c0fb253bed1463",
"date": "2021-04-07 16:27:55 -0400",
"subject": "Replace OBJECT_DEFINE_FREE_RESOURCE_BEGIN() with normal functions.",
"body": "OBJECT_DEFINE_MOVE() and OBJECT_DEFINE_FREE() will be replaced with inlines so this would be the only macro left that is constructing functions.\n\nIt is not a great pattern anyway since it makes it hard to find the function implementation."
},
{
"commit": "cc85c4f03d78492cf8158cf02c51e8eb8bab24e6",
"date": "2021-04-07 14:27:57 -0400",
"subject": "Replace OBJECT_DEFINE_GET() with *Pub struct pattern.",
"body": "This macro was originally intended to simplify the creation of simple getters but it has been superseded by the pattern introduced in 79a2d02c.\n\nRemove instances of OBJECT_DEFINE_GET() to avoid confusion with the new pattern."
},
{
"commit": "b715c70b464d4bb2eaa347b6b83902040caa8cd8",
"date": "2021-04-07 14:04:38 -0400",
"subject": "Refactor storage modules with inline getters/setters.",
"body": "Extended the pattern introduced in 79a2d02c to the storage modules: Storage, StorageRead, StorageWrite."
},
{
"commit": "79a2d02c9c8c00a2db6c34ddf73223f159288c56",
"date": "2021-04-07 12:50:33 -0400",
"subject": "Refactor List, StringList, and VariantList for performance.",
"body": "Introduce a standard pattern for exposing public struct members (as documented in CODING.md) and use it to inline lstSize() which should improve the performance of iterating large lists.\n\nSince many functions in these modules are just thin wrappers of other functions, inline where appropriate.\n\nRemove strLstExistsZ() and strLstInsertZ() since they were only used in tests, where the String version of the function is sufficient.\n\nMove strLstNewSplitSizeZ() to command/help/help.c and remove strLstNewSplitSize(). This function has only ever been used by help and does not seem widely applicable."
},
{
"commit": "904738a5f180ee3040fd7626c894b134dbaf164a",
"date": "2021-04-05 10:25:01 -0400",
"subject": "Update config.sub to latest version."
},
{
"commit": "8461961e5c832ffd8e255b76ccd0125e0cd83e00",
"date": "2021-04-05 10:23:16 -0400",
"subject": "Begin v2.34 development."
},
{
"commit": "a3d89143d6b34c6019cd29e059d28487037fd109",
"date": "2021-04-05 09:18:20 -0400",

View File

@@ -1,43 +1,43 @@
<table-row>
<table-cell>command</table-cell>
<table-cell>4/4 (100.0%)</table-cell>
<table-cell>52/52 (100.0%)</table-cell>
<table-cell>97/97 (100.0%)</table-cell>
<table-cell>50/50 (100.0%)</table-cell>
<table-cell>94/94 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>command/archive</table-cell>
<table-cell>13/13 (100.0%)</table-cell>
<table-cell>74/74 (100.0%)</table-cell>
<table-cell>222/222 (100.0%)</table-cell>
<table-cell>76/76 (100.0%)</table-cell>
<table-cell>223/223 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>command/archive/get</table-cell>
<table-cell>9/9 (100.0%)</table-cell>
<table-cell>184/184 (100.0%)</table-cell>
<table-cell>460/460 (100.0%)</table-cell>
<table-cell>192/192 (100.0%)</table-cell>
<table-cell>457/457 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>command/archive/push</table-cell>
<table-cell>12/12 (100.0%)</table-cell>
<table-cell>130/130 (100.0%)</table-cell>
<table-cell>391/391 (100.0%)</table-cell>
<table-cell>389/389 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>command/backup</table-cell>
<table-cell>34/34 (100.0%)</table-cell>
<table-cell>474/474 (100.0%)</table-cell>
<table-cell>1116/1116 (100.0%)</table-cell>
<table-cell>32/32 (100.0%)</table-cell>
<table-cell>468/468 (100.0%)</table-cell>
<table-cell>1091/1091 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>command/check</table-cell>
<table-cell>8/8 (100.0%)</table-cell>
<table-cell>62/62 (100.0%)</table-cell>
<table-cell>136/136 (100.0%)</table-cell>
<table-cell>139/139 (100.0%)</table-cell>
</table-row>
<table-row>
@@ -49,23 +49,23 @@
<table-row>
<table-cell>command/expire</table-cell>
<table-cell>9/9 (100.0%)</table-cell>
<table-cell>222/222 (100.0%)</table-cell>
<table-cell>354/354 (100.0%)</table-cell>
<table-cell>10/10 (100.0%)</table-cell>
<table-cell>240/240 (100.0%)</table-cell>
<table-cell>395/395 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>command/help</table-cell>
<table-cell>4/4 (100.0%)</table-cell>
<table-cell>130/130 (100.0%)</table-cell>
<table-cell>202/202 (100.0%)</table-cell>
<table-cell>5/5 (100.0%)</table-cell>
<table-cell>148/148 (100.0%)</table-cell>
<table-cell>237/237 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>command/info</table-cell>
<table-cell>12/12 (100.0%)</table-cell>
<table-cell>298/298 (100.0%)</table-cell>
<table-cell>649/649 (100.0%)</table-cell>
<table-cell>646/646 (100.0%)</table-cell>
</table-row>
<table-row>
@@ -79,42 +79,42 @@
<table-cell>command/remote</table-cell>
<table-cell>1/1 (100.0%)</table-cell>
<table-cell>6/6 (100.0%)</table-cell>
<table-cell>25/25 (100.0%)</table-cell>
<table-cell>24/24 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>command/repo</table-cell>
<table-cell>8/8 (100.0%)</table-cell>
<table-cell>112/112 (100.0%)</table-cell>
<table-cell>208/208 (100.0%)</table-cell>
<table-cell>108/108 (100.0%)</table-cell>
<table-cell>211/211 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>command/restore</table-cell>
<table-cell>27/27 (100.0%)</table-cell>
<table-cell>478/478 (100.0%)</table-cell>
<table-cell>984/984 (100.0%)</table-cell>
<table-cell>492/492 (100.0%)</table-cell>
<table-cell>993/993 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>command/stanza</table-cell>
<table-cell>7/7 (100.0%)</table-cell>
<table-cell>108/108 (100.0%)</table-cell>
<table-cell>155/155 (100.0%)</table-cell>
<table-cell>162/162 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>command/verify</table-cell>
<table-cell>20/20 (100.0%)</table-cell>
<table-cell>268/268 (100.0%)</table-cell>
<table-cell>700/700 (100.0%)</table-cell>
<table-cell>694/694 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>common</table-cell>
<table-cell>178/178 (100.0%)</table-cell>
<table-cell>584/584 (100.0%)</table-cell>
<table-cell>1883/1883 (100.0%)</table-cell>
<table-cell>168/168 (100.0%)</table-cell>
<table-cell>574/574 (100.0%)</table-cell>
<table-cell>1855/1855 (100.0%)</table-cell>
</table-row>
<table-row>
@@ -128,105 +128,105 @@
<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-cell>171/171 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>common/compress/gz</table-cell>
<table-cell>13/13 (100.0%)</table-cell>
<table-cell>22/22 (100.0%)</table-cell>
<table-cell>151/151 (100.0%)</table-cell>
<table-cell>163/163 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>common/compress/lz4</table-cell>
<table-cell>15/15 (100.0%)</table-cell>
<table-cell>24/24 (100.0%)</table-cell>
<table-cell>163/163 (100.0%)</table-cell>
<table-cell>175/175 (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-cell>145/145 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>common/crypto</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-cell>28/28 (100.0%)</table-cell>
<table-cell>82/82 (100.0%)</table-cell>
<table-cell>458/458 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>common/io</table-cell>
<table-cell>67/67 (100.0%)</table-cell>
<table-cell>152/152 (100.0%)</table-cell>
<table-cell>691/691 (100.0%)</table-cell>
<table-cell>48/48 (100.0%)</table-cell>
<table-cell>150/150 (100.0%)</table-cell>
<table-cell>607/607 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>common/io/filter</table-cell>
<table-cell>41/41 (100.0%)</table-cell>
<table-cell>30/30 (100.0%)</table-cell>
<table-cell>86/86 (100.0%)</table-cell>
<table-cell>411/411 (100.0%)</table-cell>
<table-cell>359/359 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>common/io/http</table-cell>
<table-cell>66/66 (100.0%)</table-cell>
<table-cell>45/45 (100.0%)</table-cell>
<table-cell>240/240 (100.0%)</table-cell>
<table-cell>724/724 (100.0%)</table-cell>
<table-cell>694/694 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>common/io/socket</table-cell>
<table-cell>16/16 (100.0%)</table-cell>
<table-cell>32/32 (100.0%)</table-cell>
<table-cell>203/203 (100.0%)</table-cell>
<table-cell>209/209 (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>304/304 (100.0%)</table-cell>
<table-cell>316/316 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>common/type</table-cell>
<table-cell>298/298 (100.0%)</table-cell>
<table-cell>734/734 (100.0%)</table-cell>
<table-cell>3548/3548 (100.0%)</table-cell>
<table-cell>259/259 (100.0%)</table-cell>
<table-cell>736/736 (100.0%)</table-cell>
<table-cell>3414/3414 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>config</table-cell>
<table-cell>91/91 (100.0%)</table-cell>
<table-cell>740/740 (100.0%)</table-cell>
<table-cell>1475/1475 (100.0%)</table-cell>
<table-cell>97/97 (100.0%)</table-cell>
<table-cell>776/776 (100.0%)</table-cell>
<table-cell>1556/1556 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>db</table-cell>
<table-cell>29/29 (100.0%)</table-cell>
<table-cell>23/23 (100.0%)</table-cell>
<table-cell>94/94 (100.0%)</table-cell>
<table-cell>389/389 (100.0%)</table-cell>
<table-cell>367/367 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>info</table-cell>
<table-cell>122/122 (100.0%)</table-cell>
<table-cell>752/752 (100.0%)</table-cell>
<table-cell>2400/2400 (100.0%)</table-cell>
<table-cell>88/88 (100.0%)</table-cell>
<table-cell>766/766 (100.0%)</table-cell>
<table-cell>2239/2239 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>postgres</table-cell>
<table-cell>34/34 (100.0%)</table-cell>
<table-cell>104/104 (100.0%)</table-cell>
<table-cell>382/382 (100.0%)</table-cell>
<table-cell>29/29 (100.0%)</table-cell>
<table-cell>96/96 (100.0%)</table-cell>
<table-cell>357/357 (100.0%)</table-cell>
</table-row>
<table-row>
@@ -238,23 +238,23 @@
<table-row>
<table-cell>protocol</table-cell>
<table-cell>69/69 (100.0%)</table-cell>
<table-cell>204/204 (100.0%)</table-cell>
<table-cell>838/838 (100.0%)</table-cell>
<table-cell>49/49 (100.0%)</table-cell>
<table-cell>196/196 (100.0%)</table-cell>
<table-cell>772/772 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>storage</table-cell>
<table-cell>70/70 (100.0%)</table-cell>
<table-cell>222/222 (100.0%)</table-cell>
<table-cell>825/825 (100.0%)</table-cell>
<table-cell>47/47 (100.0%)</table-cell>
<table-cell>218/218 (100.0%)</table-cell>
<table-cell>719/719 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>storage/azure</table-cell>
<table-cell>23/23 (100.0%)</table-cell>
<table-cell>100/100 (100.0%)</table-cell>
<table-cell>481/481 (100.0%)</table-cell>
<table-cell>480/480 (100.0%)</table-cell>
</table-row>
<table-row>
@@ -266,35 +266,35 @@
<table-row>
<table-cell>storage/gcs</table-cell>
<table-cell>28/28 (100.0%)</table-cell>
<table-cell>112/112 (100.0%)</table-cell>
<table-cell>594/594 (100.0%)</table-cell>
<table-cell>30/30 (100.0%)</table-cell>
<table-cell>116/116 (100.0%)</table-cell>
<table-cell>621/621 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>storage/posix</table-cell>
<table-cell>26/26 (100.0%)</table-cell>
<table-cell>153/154 (99.35%)</table-cell>
<table-cell>461/461 (100.0%)</table-cell>
<table-cell>473/473 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>storage/remote</table-cell>
<table-cell>32/32 (100.0%)</table-cell>
<table-cell>88/88 (100.0%)</table-cell>
<table-cell>623/623 (100.0%)</table-cell>
<table-cell>627/627 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>storage/s3</table-cell>
<table-cell>26/26 (100.0%)</table-cell>
<table-cell>124/124 (100.0%)</table-cell>
<table-cell>579/579 (100.0%)</table-cell>
<table-cell>577/577 (100.0%)</table-cell>
</table-row>
<table-row>
<table-cell>TOTAL</table-cell>
<table-cell>1506/1506 (100.0%)</table-cell>
<table-cell>7427/7428 (99.99%)</table-cell>
<table-cell>23774/23774 (100.0%)</table-cell>
<table-cell>1324/1324 (100.0%)</table-cell>
<table-cell>7489/7490 (99.99%)</table-cell>
<table-cell>23300/23300 (100.0%)</table-cell>
</table-row>

View File

@@ -12,7 +12,7 @@
</intro>
<release-list>
<release date="XXXX-XX-XX" version="2.34dev" title="UNDER DEVELOPMENT">
<release date="2021-06-07" version="2.34" title="PostgreSQL 14 Support">
<release-core-list>
<release-bug-list>
<release-item>

View File

@@ -1,7 +1,7 @@
# Initialize configuration
# ----------------------------------------------------------------------------------------------------------------------------------
AC_PREREQ([2.69])
AC_INIT([pgBackRest], [2.34dev])
AC_INIT([pgBackRest], [2.34])
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.34dev.
# Generated by GNU Autoconf 2.69 for pgBackRest 2.34.
#
#
# 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.34dev'
PACKAGE_STRING='pgBackRest 2.34dev'
PACKAGE_VERSION='2.34'
PACKAGE_STRING='pgBackRest 2.34'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -1251,7 +1251,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.34dev to adapt to many kinds of systems.
\`configure' configures pgBackRest 2.34 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1298,7 +1298,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of pgBackRest 2.34dev:";;
short | recursive ) echo "Configuration of pgBackRest 2.34:";;
esac
cat <<\_ACEOF
@@ -1393,7 +1393,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
pgBackRest configure 2.34dev
pgBackRest configure 2.34
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1691,7 +1691,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.34dev, which was
It was created by pgBackRest $as_me 2.34, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -4843,7 +4843,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.34dev, which was
This file was extended by pgBackRest $as_me 2.34, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -4905,7 +4905,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.34dev
pgBackRest config.status 2.34
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -5609,4 +5609,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 c38ece0c28e381b5ccfe1a168abee916fabaed6c
# Generated from src/build/configure.ac sha1 321fb21a7e993141d50d66da2d0e1bce069799e4

View File

@@ -33,6 +33,6 @@ repository will be invalid unless migration functions are written.
/***********************************************************************************************************************************
Software version
***********************************************************************************************************************************/
#define PROJECT_VERSION "2.34dev"
#define PROJECT_VERSION "2.34"
#endif

View File

@@ -1083,6 +1083,10 @@ src/common/type/mcv.h:
class: core
type: c/h
src/common/type/object.c:
class: core
type: c
src/common/type/object.h:
class: core
type: c/h
@@ -1107,6 +1111,14 @@ src/common/type/string.h:
class: core
type: c/h
src/common/type/stringId.c:
class: core
type: c
src/common/type/stringId.h:
class: core
type: c/h
src/common/type/stringList.c:
class: core
type: c
@@ -1371,6 +1383,10 @@ src/postgres/interface/v130.c:
class: core
type: c
src/postgres/interface/v140.c:
class: core
type: c
src/postgres/interface/version.h:
class: core
type: c/h
@@ -1887,6 +1903,74 @@ test/src/common/harnessPack.h:
class: test/harness
type: c/h
test/src/common/harnessPostgres.c:
class: test/harness
type: c
test/src/common/harnessPostgres.h:
class: test/harness
type: c/h
test/src/common/harnessPostgres/harness083.c:
class: test/harness
type: c
test/src/common/harnessPostgres/harness084.c:
class: test/harness
type: c
test/src/common/harnessPostgres/harness090.c:
class: test/harness
type: c
test/src/common/harnessPostgres/harness091.c:
class: test/harness
type: c
test/src/common/harnessPostgres/harness092.c:
class: test/harness
type: c
test/src/common/harnessPostgres/harness093.c:
class: test/harness
type: c
test/src/common/harnessPostgres/harness094.c:
class: test/harness
type: c
test/src/common/harnessPostgres/harness095.c:
class: test/harness
type: c
test/src/common/harnessPostgres/harness096.c:
class: test/harness
type: c
test/src/common/harnessPostgres/harness100.c:
class: test/harness
type: c
test/src/common/harnessPostgres/harness110.c:
class: test/harness
type: c
test/src/common/harnessPostgres/harness120.c:
class: test/harness
type: c
test/src/common/harnessPostgres/harness130.c:
class: test/harness
type: c
test/src/common/harnessPostgres/harness140.c:
class: test/harness
type: c
test/src/common/harnessPostgres/harnessVersion.intern.h:
class: test/harness
type: c/h
test/src/common/harnessPq.c:
class: test/harness
type: c
@@ -1895,6 +1979,14 @@ test/src/common/harnessPq.h:
class: test/harness
type: c/h
test/src/common/harnessProtocol.c:
class: test/harness
type: c
test/src/common/harnessProtocol.h:
class: test/harness
type: c/h
test/src/common/harnessServer.c:
class: test/harness
type: c