1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2024-12-16 10:20:02 +02:00
pgbackrest/libc/lib/pgBackRest/LibC.pm

68 lines
1.5 KiB
Perl
Raw Normal View History

package pgBackRest::LibC;
use 5.010001;
use strict;
use warnings;
use Carp;
require Exporter;
use AutoLoader;
our @ISA = qw(Exporter);
# Library version (add .999 during development)
v1.13: Parallel Archiving, Stanza Create, Improved Info and Check IMPORTANT NOTE: The new implementation of asynchronous archiving no longer copies WAL to a separate queue. If there is any WAL left over in the old queue after upgrading to 1.13, it will be abandoned and not pushed to the repository. To prevent this outcome, stop archiving by setting archive_command = false. Next, drain the async queue by running pgbackrest --stanza=[stanza-name] archive-push and wait for the process to complete. Check that the queue in [spool-path]/archive/[stanza-name]/out is empty. Finally, install 1.13 and restore the original archive_command. IMPORTANT NOTE: The stanza-create command is not longer optional and must be executed before backup or archiving can be performed on a new stanza. Pre-existing stanzas do not require stanza-create to be executed. Bug Fixes: * Fixed const assignment giving compiler warning in C library. (Fixed by Adrian Vondendriesch.) * Fixed a few directory syncs that were missed for the --repo-sync option. * Fixed an issue where a missing user/group on restore could cause an "uninitialized value" error in File->owner(). (Reported by Leonardo Avellar.) * Fixed an issue where protocol mismatch errors did not output the expected value. * Fixed a spurious archive-get log message that indicated an exit code of 1 was an abnormal termination. Features: * Improved, multi-process implementation of asynchronous archiving. * Improved stanza-create command so that it can repair broken repositories in most cases and is robust enough to be made mandatory. (Contributed by Cynthia Shang.) * Improved check command to run on a standby, though only basic checks are done because pg_switch_xlog() cannot be executed on a replica. (Contributed by Cynthia Shang.) * Added archive and backup WAL ranges to the info command. * Added warning to update pg_tablespace.spclocation when remapping tablespaces in PostgreSQL < 9.2. (Contributed by blogh.) * Remove remote lock requirements for the archive-get, restore, info, and check commands since they are read-only operations. (Suggested by Michael Vitale.) Refactoring: * Refactor File and BackupCommon modules to improve test coverage. * Return proper error code when unable to convert a relative path to an absolute path. (Suggested by Yogesh Sharma.) * Log file banner is not output until the first log entry is written. (Suggested by Jens Wilke.) * Moved File->manifest() into the FileCommon.pm module. * Moved the Archive modules to the Archive directory and split the archive-get and archive-push commands into separate modules. * Split the check command out of the Archive.pm module. * Allow logging to be suppressed via logDisable() and logEnable(). * Allow for locks to be taken more than once in the same process without error. * Lock directories can be created when more than one directory level is required. * Clean up optionValid()/optionTest() logic in Lock.pm. * Added Exception::exceptionCode() and Exception::exceptionMessage() to simplify error handling logic. * Represent .gz extension with a constant. * Allow empty files to be created with FileCommon::fileStringWrite() and use temp files to avoid partial reads. * Refactor process IO and process master/minion code out from the common protocol code. * Reduced the likelihood of torn pages causing a false positive in page checksums by filtering on start backup LSN. * Remove Intel-specific optimization from C library build flags. (Contributed by Adrian Vondendriesch.) * Removed --lock option. This option was introduced before the lock directory could be located outside the repository and is now obsolete. * Added --log-timestamp option to allow timestamps to be suppressed in logging. This is primarily used to avoid filters in the automated documentation. * Fixed alignment issues with multiline logging.
2017-02-06 03:23:03 +02:00
our $VERSION = '1.13';
sub libCVersion {return $VERSION};
# Items to export into caller's namespace by default. Note: do not export names by default without a very good reason. Use EXPORT_OK
# instead. Do not simply export all your public functions/methods/constants.
#
# This allows declaration use pgBackRest::LibC ':all'; If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
# will save memory.
our %EXPORT_TAGS =
(
'debug' => [qw(
UVSIZE
libCVersion
)],
'checksum' => [qw(
pageChecksum
pageChecksumTest
pageChecksumBuffer
)],
);
our @EXPORT_OK = (@{$EXPORT_TAGS{'debug'}}, @{$EXPORT_TAGS{'checksum'}});
# Nothing is exported by default
our @EXPORT = qw();
# This AUTOLOAD is used to 'autoload' constants from the constant() XS function. Nothing in this function needs to be updated to
# add new constants.
sub AUTOLOAD
{
my $constname;
our $AUTOLOAD;
($constname = $AUTOLOAD) =~ s/.*:://;
croak "&pgBackRest::LibC::constant not defined" if $constname eq 'constant';
my ($error, $val) = constant($constname);
if ($error) { croak $error; }
{
no strict 'refs';
*$AUTOLOAD = sub {$val};
}
goto &$AUTOLOAD;
}
require XSLoader;
XSLoader::load('pgBackRest::LibC', $VERSION);
1;
__END__