mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2024-12-14 10:13:05 +02:00
005fc08795
Allow internal symlinks to be suppressed when the repository is located on a filesystem that does not support symlinks. This does not affect any pgBackRest functionality, but the convenience link latest will not be created and neither will internal tablespace symlinks, which will affect the ability to bring up clusters in-place manually using filesystem snapshots.
168 lines
4.7 KiB
Perl
168 lines
4.7 KiB
Perl
####################################################################################################################################
|
|
# BACKUP COMMON MODULE
|
|
####################################################################################################################################
|
|
package pgBackRest::BackupCommon;
|
|
|
|
use strict;
|
|
use warnings FATAL => qw(all);
|
|
use Carp qw(confess);
|
|
|
|
use Exporter qw(import);
|
|
our @EXPORT = qw();
|
|
use File::Basename;
|
|
|
|
use pgBackRest::Common::Log;
|
|
use pgBackRest::Common::String;
|
|
use pgBackRest::Config::Config;
|
|
|
|
####################################################################################################################################
|
|
# Latest backup link constant
|
|
####################################################################################################################################
|
|
use constant LINK_LATEST => OPTION_DEFAULT_RESTORE_SET;
|
|
push @EXPORT, qw(LINK_LATEST);
|
|
|
|
####################################################################################################################################
|
|
# backupRegExpGet - Generate a regexp depending on the backups that need to be found
|
|
####################################################################################################################################
|
|
sub backupRegExpGet
|
|
{
|
|
# Assign function parameters, defaults, and log debug info
|
|
my
|
|
(
|
|
$strOperation,
|
|
$bFull,
|
|
$bDifferential,
|
|
$bIncremental,
|
|
$bAnchor
|
|
) =
|
|
logDebugParam
|
|
(
|
|
__PACKAGE__ . '::backupRegExpGet', \@_,
|
|
{name => 'bFull', default => false},
|
|
{name => 'bDifferential', default => false},
|
|
{name => 'bIncremental', default => false},
|
|
{name => 'bAnchor', default => true}
|
|
);
|
|
|
|
if (!$bFull && !$bDifferential && !$bIncremental)
|
|
{
|
|
confess &log(ASSERT, 'one parameter must be true');
|
|
}
|
|
|
|
my $strDateTimeRegExp = "[0-9]{8}\\-[0-9]{6}";
|
|
my $strRegExp = $bAnchor ? '^' : '';
|
|
|
|
if ($bFull || $bDifferential || $bIncremental)
|
|
{
|
|
$strRegExp .= $strDateTimeRegExp . 'F';
|
|
}
|
|
|
|
if ($bDifferential || $bIncremental)
|
|
{
|
|
if ($bFull)
|
|
{
|
|
$strRegExp .= "(\\_";
|
|
}
|
|
else
|
|
{
|
|
$strRegExp .= "\\_";
|
|
}
|
|
|
|
$strRegExp .= $strDateTimeRegExp;
|
|
|
|
if ($bDifferential && $bIncremental)
|
|
{
|
|
$strRegExp .= '(D|I)';
|
|
}
|
|
elsif ($bDifferential)
|
|
{
|
|
$strRegExp .= 'D';
|
|
}
|
|
else
|
|
{
|
|
$strRegExp .= 'I';
|
|
}
|
|
|
|
if ($bFull)
|
|
{
|
|
$strRegExp .= '){0,1}';
|
|
}
|
|
}
|
|
|
|
$strRegExp .= $bAnchor ? "\$" : '';
|
|
|
|
# Return from function and log return values if any
|
|
return logDebugReturn
|
|
(
|
|
$strOperation,
|
|
{name => 'strRegExp', value => $strRegExp}
|
|
);
|
|
}
|
|
|
|
push @EXPORT, qw(backupRegExpGet);
|
|
|
|
####################################################################################################################################
|
|
# backupLabelFormat
|
|
####################################################################################################################################
|
|
sub backupLabelFormat
|
|
{
|
|
# Assign function parameters, defaults, and log debug info
|
|
my
|
|
(
|
|
$strOperation,
|
|
$strType,
|
|
$strBackupLabelLast,
|
|
$lTimestampStop
|
|
) =
|
|
logDebugParam
|
|
(
|
|
__PACKAGE__ . '::backupLabelFormat', \@_,
|
|
{name => 'strType', trace => true},
|
|
{name => 'strBackupLabelLast', required => false, trace => true},
|
|
{name => 'lTimestampStop', trace => true}
|
|
);
|
|
|
|
my $strBackupLabel;
|
|
|
|
if ($strType eq BACKUP_TYPE_FULL)
|
|
{
|
|
if (defined($strBackupLabelLast))
|
|
{
|
|
confess &log(ASSERT, "strBackupPathLast cannot be defined when type = ${strType}");
|
|
}
|
|
|
|
$strBackupLabel = timestampFileFormat(undef, $lTimestampStop) . 'F';
|
|
}
|
|
else
|
|
{
|
|
if (!defined($strBackupLabelLast))
|
|
{
|
|
confess &log(ASSERT, "strBackupLabelLast must be defined when type = ${strType}");
|
|
}
|
|
|
|
$strBackupLabel = substr($strBackupLabelLast, 0, 16);
|
|
|
|
$strBackupLabel .= '_' . timestampFileFormat(undef, $lTimestampStop);
|
|
|
|
if ($strType eq BACKUP_TYPE_DIFF)
|
|
{
|
|
$strBackupLabel .= 'D';
|
|
}
|
|
else
|
|
{
|
|
$strBackupLabel .= 'I';
|
|
}
|
|
}
|
|
|
|
# Return from function and log return values if any
|
|
return logDebugReturn
|
|
(
|
|
$strOperation,
|
|
{name => 'strBackupLabel', value => $strBackupLabel, trace => true}
|
|
);
|
|
}
|
|
|
|
push @EXPORT, qw(backupLabelFormat);
|
|
|
|
1;
|