1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2026-06-20 01:17:49 +02:00

4839 Commits

Author SHA1 Message Date
David Steele e625ed8be2 Caveat --tablespace-map-all regarding tablespace creation.
If a tablespace is created after the backup starts then it cannot be mapped using --tablespace-map-all since there is no record of it in the manifest.

This would be extremely complex to fix but it can be documented.
2025-01-28 09:14:30 -05:00
David Steele dde1b04772 Add StringId linter.
Verify that all StringIds in the project have been generated correctly.

This also makes it easy to generate new StringIds by copying an existing StringId and modifying the string. The error message will provide the required value.
2025-01-27 17:14:34 -05:00
David Steele d582739d82 Convert 5-bit test StringId to 6-bit.
The original string was valid as either 5-bit or 6-bit but since we're trying to test 6-bit update the string to something only valid for 6-bit.
2025-01-27 15:51:57 -05:00
David Steele 6df96f505f Separate version into component parts.
This guarantees a consistent version representation and allows the version to be easily represented in other ways.
2025-01-23 17:12:05 -05:00
David Steele 6776940c3b Use three part version in development builds.
This makes the versioning more consistent and is required by a subsequent commit that will separate the version components.
2025-01-23 14:55:44 -05:00
David Steele e59385718c Update CI containers to include newest PostgreSQL patch releases. 2025-01-23 08:10:37 -05:00
David Steele 6fbb28fa2d Do not set recovery_target_timeline=current for PostgreSQL < 12.
PostgreSQL < 12 defaults recovery_target_timeline to current but if current is explicitly set it behaves as if latest was set. Since current is not handled in the PostgreSQL code it looks as if there should be an error during the integer conversion but that doesn't happen due to incorrect strtoul() usage (not checking endptr).

Handle this by omitting recovery_target_timeline from recovery.conf when it is explicitly set by the user to current.
2025-01-23 07:58:41 -05:00
David Steele e58d468e27 Fix typo. 2025-01-21 18:39:51 -05:00
David Steele 931435c017 Allow backup command to operate on remote repositories.
The backup command has always been limited to working only when the repository is local. This was due to some limitations in storage (addressed in 01b81f9) and the protocol helper (addressed in 4a94b6be).

Now that there a no limitations preventing this feature it makes sense to enable it. This allows for more flexibility in where backups are run.
2025-01-21 11:45:50 -05:00
David Steele 844f91fe3f Specify length of encoding strings.
This saves a byte per string but more importantly makes them match the declaration of encodeHexLookup.
2025-01-20 15:12:27 -05:00
David Steele 4bc9376d6f Remove "Additional Notes" header from release notes.
This was intended to separate the code changes from documentation and test suite changes but it arguably does not add any clarity.

Since documentation and test suite changes are explicitly marked as such that should be clear enough.
2025-01-20 14:19:25 -05:00
David Steele 23bd392bdc Improve hex encode performance with bytewise lookup.
Previously, hex encode looked up each nibble of the input separately. Instead use a larger lookup table containing the two-byte encoding of every possible input byte, resulting in a 1/3 reduction in encoding time.

Inspired by and mostly cribbed from PostgreSQL commit e24d7708.
2025-01-20 14:09:54 -05:00
David Steele 713f6657d3 Merge v2.54.2 release. 2025-01-20 10:57:27 -05:00
David Steele 7a33d6168b Replace constant version with macro in backup test module. 2025-01-14 13:10:32 -05:00
David Steele 6244f02bb3 Update runner versions on Github actions.
Ubuntu 20.04 will be EOL soon so update all actions that are using it. Update other actions as far as possible without making too many changes.
2025-01-14 10:50:48 -05:00
David Steele fd23257c6a Remove extraneous const qualifier. 2025-01-06 13:50:14 -05:00
David Steele b5bb1aa72c Remove makefile formatting from editor config.
This is no longer required since the makefile has been removed.
2025-01-05 13:32:09 -05:00
David Steele 5fac1b4058 Update LICENSE.txt and PostgreSQL copyright for 2025. 2025-01-02 09:11:19 -05:00
David Steele 4a94b6bef9 Refactor protocol helper.
Simplify and improve data structures that track protocol client connections. The prior code could not store pg or repo clients but not both. We don't have a need for that yet, but tracking clients only by hostIdx was not flexible for some upcoming improvements. It is important to be able to identify and free clients very precisely.

In general this code should be easier to understand and removes duplicated code for local/remote clients.
2024-12-27 13:51:50 -05:00
David Steele 13f23f2168 Fix issue after disabling bundling with block incremental enabled.
When bundling and block incremental are both enabled the bundleRaw flag is set to indicate that headers are omitted (whenever possible) for encryption and compression. This is intended to save space, especially when there are very large numbers of small files.

If bundling is disabled this flag needs to be preserved so that existing bundles from prior backups are read correctly. However, the prior code was only saving the flag when bundling was enabled, which caused prior backups to be unreadable if bundling was disabled.

Fix so that the flag is preserved and backups are not broken.
2024-12-26 12:01:59 -05:00
David Steele 9ee3b2c593 Fix compression type in integration tests.
Due to this bug the compression type in integration tests was always set to none. There are sufficient other tests for compression that this was not masking any bugs, but it was obviously not ideal.
2024-12-26 10:45:11 -05:00
David Steele 8b9e03d618 Move linkCreate interface function to alphabetical order. 2024-12-23 10:30:41 -05:00
David Steele 48ecbe422d Clarify behavior of multiple configuration files. 2024-12-19 13:52:59 -05:00
David Steele 3210c9283f Clarify that unhandled errors may occur in edge cases. 2024-12-16 14:55:44 -05:00
David Steele 690c9803c3 Add missing const qualifier. 2024-12-16 12:56:03 -05:00
David Steele 005c7e974f Merge v2.54.1 release. 2024-12-16 12:04:21 -05:00
David Steele 4d4d23131c Rephrase invitation to star on Github. 2024-12-15 11:11:04 -05:00
David Steele fbb31eefca Change "find" to "visit" in introduction. 2024-12-11 10:03:52 -05:00
David Steele 5c8296df06 Remove reference to disabling network compression in the documentation.
Previously setting compress-level-network=0 would disable compression. This worked because gzip disables compression at this level but still transmits the data in gz format.

lz4 does not provide similar functionality so we would need to disable the compression filter entirely. This does not seem worth it however since lz4 compression is very efficient and 0 is the default fast mode.
2024-12-10 11:22:45 -05:00
David Steele d96966065b Add missing const qualifier. 2024-12-09 13:19:55 -05:00
David Steele 0e143ba7e7 Remove --min-gen option from test.pl.
This option was useful for the Perl code generation and autoconf generation, which were both slow. These are both gone now and the C code generation is fast enough that there is no need to exclude it.

--dry-run will still prevent certain code generation from running. This may not be necessary any more but removing it should be the subject of a separate commit.
2024-11-27 17:05:31 -05:00
David Steele cad595f9f8 Full/incremental backup method.
This backup method does a preliminary copy of all files that were last modified prior to a defined interval before calling pg_backup_start(). Then the backup is started as usual and the remainder of the files are copied. The advantage is that generally a smaller set of WAL will be required to make the backup consistent, provided there are some files that have not been recently modified.

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

This feature is being committed as internal-only for the time being.
2024-11-26 11:23:43 -05:00
David Steele 0577b03016 Use lz4 for protocol compression.
lz4 provides much better compression speed and gives similar compression ratios to gz when used at low levels (the gz default was 3).
2024-11-26 11:03:27 -05:00
David Steele 4af42d93b2 Update release notes for PostgreSQL 17 support.
Accurately reflect when different versions of PostgreSQL were supported since an update was required for beta3.
2024-11-25 10:38:37 -05:00
Kian-Meng Ang c351263a1d Fix typos.
Found using `codespell -S *.eps,*.cache,*.xml -L inout,te,fo,bload,fase,collet,hilight,debians,keep-alives` and `typos --hidden --format brief`.
2024-11-22 15:25:43 -05:00
David Steele 7f2dfc021c Update Fedora test image to Fedora 41. 2024-11-18 13:33:03 -05:00
David Steele 33d7681347 Enable missing-variable-declarations compiler warning.
Warn if a global variable is defined without a previous declaration. Use this option to detect global variables that do not have a matching extern declaration in a header file.
2024-11-18 10:58:00 -05:00
David Steele 4ae160aa34 Add wait for async archive log exists check in integration test.
They may be a small delay before the log exists, especially on slower platforms. Add a wait so the test does not fail in this case.
2024-11-15 09:44:15 -05:00
David Steele 12fe139315 Allow negative values for integer options.
This mostly worked but there was a rendering issue that prevented compilation.
2024-11-13 17:48:14 -05:00
David Steele d7c2d2ba1b Move compression driver param list management to a common module.
This code was duplicated in each driver so this means less duplication.

In addition, some drivers were not creating a parameter list for decompression which meant they could not be used remotely. This is not a currently a bug since none of them were being used remotely, but it was a blocker for using lz4 for protocol compression.
2024-11-13 17:28:21 -05:00
Viktor Kurilko 274bb24a5a Stabilize async archiving in integration tests.
The integration tests could fail if:

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

This patch fixes the problem by using a separate spool directory for each test.
2024-11-13 09:56:42 -05:00
David Steele db912c049c Exclude function void return logging macros from coverage reporting.
An in 355e27d6, it makes sense to exclude FUNCTION_(LOG|TEST)_RETURN_VOID() macros when then they are on the last line of a function because in this case they are a noop (but are still used for debugging).
2024-11-08 10:21:25 -05:00
David Steele c9c73ede9d Fix issue with version/help commands attempting to load pgbackrest.conf.
8d6bceb5 refactored version/help to operate more like regular commands in part to simplify the implementation of --version and --help. Unfortunately this had the side effect of these commands also loading pgbackrest.conf which would lead to an error if the file could not be read or parsed.

Add a filter to prevent version or help from loading pgbackrest.conf. Also prevent reads from the env to stop any warnings or errors from that source.
2024-11-07 10:30:16 -05:00
David Steele c678543165 Remove conditional compilation for lz4.
0c32757f made lz4 required in the meson build but conditional compilation was left in to make reverting easy for packagers just in case.

Since a few releases have gone by without any complaints, remove conditional compilation for lz4.
2024-11-07 09:27:02 -05:00
David Steele 355e27d69c Exclude function logging macros from coverage reporting.
It makes sense to exclude these from reporting since they are always covered when the function is covered and they are purely for debugging.
2024-11-02 11:50:30 -04:00
David Steele fc5fdb8d35 Fix incorrect log macros.
These led to incorrect log output in some cases. Probably not very noticeable, but definitely wrong.

Also fix types in the log macro comments.
2024-11-02 11:36:56 -04:00
David Steele ed39078068 Enable float-equal and init-self compiler warnings.
No code changes were required to enable these warnings.
2024-10-29 14:15:12 +02:00
David Steele 98670aee89 Enable redundant-decls compiler warning.
Warn if anything is declared more than once in the same scope, even when the extra declaration is valid and changes nothing. This is primarily useful for catching missing header ifdef barriers.

Move the environ variable into config/parse.h since it must be declared by us and we use it multiple times.
2024-10-28 19:13:38 +02:00
David Steele 9ec9b9d120 Enable missing-prototypes compiler warning.
Warn if a global function is defined without a previous prototype declaration. This helps detect when a function that should be static is accidentally declared extern.

Most of the changes are to add missing header files so functions can see their declarations.

In a some cases functions that should have been static were marked as such. There were only five of these in the core but every little bit counts.

Lastly, it was necessary to suppress the warning in the postgres test modules where the function declarations are not available. This is fixable by aligning the module with the auto-generated code in core, but is not a priority.
2024-10-28 17:49:55 +02:00
David Steele 21f7d2d3a8 Enable cast-qual compiler warning.
Warn whenever a pointer is cast so as to remove a type qualifier from the target type. For example, warn if a const char * is cast to an ordinary char *.

Most of the changes for this are fairly rote: just add a const qualifier where needed. In some cases functions needed to be reworked to return non-const where before they had returned const and then cast it back to non-const. None of these patterns appeared to be bugs, but they were certainly misleading.

Some cases (especially excvp() and calls to bz2) could not be fixed because of how functions out of our control are defined. In those cases the warnings have been suppressed and a comment added to detail the exception. This was also done a few places in the tests.
2024-10-28 14:21:38 +02:00