1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2025-01-18 04:58:51 +02:00

Ignore all files in a linked tablespace directory except the subdirectory for the current version of PostgreSQL.

Previously an error would be generated if other files were present and not owned by the PostgreSQL user.  This hasn't been a big deal in practice but it could cause issues.

Also add tests to make sure the same logic applies with links to files, i.e. all other files in the directory should be ignored.  This was actually working correctly, but there were no tests for it before.
This commit is contained in:
David Steele 2018-08-31 16:06:40 -04:00
parent 41746b53cd
commit 375ff9f9d2
8 changed files with 161 additions and 134 deletions

View File

@ -13,6 +13,13 @@
<release-list>
<release date="XXXX-XX-XX" version="2.06dev" title="UNDER DEVELOPMENT">
<release-core-list>
<release-improvement-list>
<release-item>
<p>Ignore all files in a linked tablespace directory except the subdirectory for the current version of <postgres/>. Previously an error would be generated if other files were present and not owned by the <postgres/> user.</p>
</release-item>
</release-improvement-list>
</release-core-list>
</release>
<release date="2018-08-31" version="2.05" title="Environment Variable Options and Exclude Temporary/Unlogged Relations">

View File

@ -670,7 +670,7 @@ sub build
}
# Get the manifest for this level
my $hManifest = $oStorageDbMaster->manifest($strPath);
my $hManifest = $oStorageDbMaster->manifest($strPath, {strFilter => $strFilter});
my $strManifestType = MANIFEST_VALUE_LINK;
# Loop though all paths/files/links in the manifest
@ -689,12 +689,6 @@ sub build
'\' cannot reference another link', ERROR_LINK_DESTINATION);
}
# Make sure the current file matches the filter or any files under the filter
if (defined($strFilter) && $strName ne $strFilter && index($strName, "${strFilter}/") != 0)
{
next;
}
if ($strManifestType eq MANIFEST_VALUE_LINK)
{
$strFile = dirname($strFile);

View File

@ -344,14 +344,16 @@ sub manifest
(
$strOperation,
$strPathExp,
$strFilter,
) =
logDebugParam
(
__PACKAGE__ . '->manifest', \@_,
{name => 'strPathExp'},
{name => 'strFilter', optional => true, trace => true},
);
my $hManifest = $self->driver()->manifest($self->pathGet($strPathExp));
my $hManifest = $self->driver()->manifest($self->pathGet($strPathExp), {strFilter => $strFilter});
# Return from function and log return values if any
return logDebugReturn

View File

@ -320,17 +320,19 @@ sub manifest
$strOperation,
$strPath,
$bIgnoreMissing,
$strFilter,
) =
logDebugParam
(
__PACKAGE__ . '->manifest', \@_,
{name => 'strPath', trace => true},
{name => 'bIgnoreMissing', optional => true, default => false, trace => true},
{name => 'strFilter', optional => true, trace => true},
);
# Generate the manifest
my $hManifest = {};
$self->manifestRecurse($strPath, undef, 0, $hManifest, $bIgnoreMissing);
$self->manifestRecurse($strPath, undef, 0, $hManifest, $bIgnoreMissing, $strFilter);
# Return from function and log return values if any
return logDebugReturn
@ -353,6 +355,7 @@ sub manifestRecurse
$iDepth,
$hManifest,
$bIgnoreMissing,
$strFilter,
) =
logDebugParam
(
@ -362,45 +365,42 @@ sub manifestRecurse
{name => 'iDepth', default => 0, trace => true},
{name => 'hManifest', required => false, trace => true},
{name => 'bIgnoreMissing', required => false, default => false, trace => true},
{name => 'strFilter', required => false, trace => true},
);
# Set operation and debug strings
my $strPathRead = $strPath . (defined($strSubPath) ? "/${strSubPath}" : '');
my $hPath;
my $strFilter;
# If this is the top level stat the path to discover if it is actually a file
my $oPathInfo = $self->info($strPathRead, {bIgnoreMissing => $bIgnoreMissing});
if (defined($oPathInfo))
{
# If the initial path passed is a file then generate the manifest for just that file
if ($iDepth == 0 && !S_ISDIR($oPathInfo->mode()))
{
$strFilter = basename($strPathRead);
$strPathRead = dirname($strPathRead);
$hManifest->{basename($strPathRead)} = $self->manifestStat($strPathRead);
}
# Get a list of all files in the path (including .)
my @stryFileList = @{$self->list($strPathRead, {bIgnoreMissing => $iDepth != 0})};
unshift(@stryFileList, '.');
my $hFileStat = $self->manifestList($strPathRead, \@stryFileList);
# Loop through all subpaths/files in the path
foreach my $strFile (keys(%{$hFileStat}))
# Else read as a normal directory
else
{
# Skip this file if it does not match the filter
if (defined($strFilter) && $strFile ne $strFilter)
{
next;
}
# Get a list of all files in the path (including .)
my @stryFileList = @{$self->list($strPathRead, {bIgnoreMissing => $iDepth != 0})};
unshift(@stryFileList, '.');
my $hFileStat = $self->manifestList($strPathRead, \@stryFileList, $strFilter);
my $strManifestFile = $iDepth == 0 ? $strFile : ($strSubPath . ($strFile eq qw(.) ? '' : "/${strFile}"));
$hManifest->{$strManifestFile} = $hFileStat->{$strFile};
# Recurse into directories
if ($hManifest->{$strManifestFile}{type} eq 'd' && $strFile ne qw(.))
# Loop through all subpaths/files in the path
foreach my $strFile (keys(%{$hFileStat}))
{
$self->manifestRecurse($strPath, $strManifestFile, $iDepth + 1, $hManifest);
my $strManifestFile = $iDepth == 0 ? $strFile : ($strSubPath . ($strFile eq qw(.) ? '' : "/${strFile}"));
$hManifest->{$strManifestFile} = $hFileStat->{$strFile};
# Recurse into directories
if ($hManifest->{$strManifestFile}{type} eq 'd' && $strFile ne qw(.))
{
$self->manifestRecurse($strPath, $strManifestFile, $iDepth + 1, $hManifest);
}
}
}
}
@ -419,18 +419,25 @@ sub manifestList
$strOperation,
$strPath,
$stryFile,
$strFilter,
) =
logDebugParam
(
__PACKAGE__ . '->manifestList', \@_,
{name => 'strPath', trace => true},
{name => 'stryFile', trace => true},
{name => 'strFilter', required => false, trace => true},
);
my $hFileStat = {};
foreach my $strFile (@{$stryFile})
{
if ($strFile ne '.' && defined($strFilter) && $strFilter ne $strFile)
{
next;
}
$hFileStat->{$strFile} = $self->manifestStat("${strPath}" . ($strFile eq qw(.) ? '' : "/${strFile}"));
if (!defined($hFileStat->{$strFile}))

View File

@ -12112,7 +12112,7 @@ static const EmbeddedModule embeddedModule[] =
"$strPath = $oStorageDbMaster->pathAbsolute($strParentPath, $strPath);\n"
"}\n"
"\n\n"
"my $hManifest = $oStorageDbMaster->manifest($strPath);\n"
"my $hManifest = $oStorageDbMaster->manifest($strPath, {strFilter => $strFilter});\n"
"my $strManifestType = MANIFEST_VALUE_LINK;\n"
"\n\n"
"foreach my $strName (sort(CORE::keys(%{$hManifest})))\n"
@ -12129,11 +12129,6 @@ static const EmbeddedModule embeddedModule[] =
"'\\' -> \\'' . $self->get(MANIFEST_SECTION_BACKUP_TARGET, $strLevel, MANIFEST_SUBKEY_PATH) .\n"
"'\\' cannot reference another link', ERROR_LINK_DESTINATION);\n"
"}\n"
"\n\n"
"if (defined($strFilter) && $strName ne $strFilter && index($strName, \"${strFilter}/\") != 0)\n"
"{\n"
"next;\n"
"}\n"
"\n"
"if ($strManifestType eq MANIFEST_VALUE_LINK)\n"
"{\n"
@ -18538,14 +18533,16 @@ static const EmbeddedModule embeddedModule[] =
"(\n"
"$strOperation,\n"
"$strPathExp,\n"
"$strFilter,\n"
") =\n"
"logDebugParam\n"
"(\n"
"__PACKAGE__ . '->manifest', \\@_,\n"
"{name => 'strPathExp'},\n"
"{name => 'strFilter', optional => true, trace => true},\n"
");\n"
"\n"
"my $hManifest = $self->driver()->manifest($self->pathGet($strPathExp));\n"
"my $hManifest = $self->driver()->manifest($self->pathGet($strPathExp), {strFilter => $strFilter});\n"
"\n\n"
"return logDebugReturn\n"
"(\n"
@ -19294,16 +19291,18 @@ static const EmbeddedModule embeddedModule[] =
"$strOperation,\n"
"$strPath,\n"
"$bIgnoreMissing,\n"
"$strFilter,\n"
") =\n"
"logDebugParam\n"
"(\n"
"__PACKAGE__ . '->manifest', \\@_,\n"
"{name => 'strPath', trace => true},\n"
"{name => 'bIgnoreMissing', optional => true, default => false, trace => true},\n"
"{name => 'strFilter', optional => true, trace => true},\n"
");\n"
"\n\n"
"my $hManifest = {};\n"
"$self->manifestRecurse($strPath, undef, 0, $hManifest, $bIgnoreMissing);\n"
"$self->manifestRecurse($strPath, undef, 0, $hManifest, $bIgnoreMissing, $strFilter);\n"
"\n\n"
"return logDebugReturn\n"
"(\n"
@ -19324,6 +19323,7 @@ static const EmbeddedModule embeddedModule[] =
"$iDepth,\n"
"$hManifest,\n"
"$bIgnoreMissing,\n"
"$strFilter,\n"
") =\n"
"logDebugParam\n"
"(\n"
@ -19333,34 +19333,31 @@ static const EmbeddedModule embeddedModule[] =
"{name => 'iDepth', default => 0, trace => true},\n"
"{name => 'hManifest', required => false, trace => true},\n"
"{name => 'bIgnoreMissing', required => false, default => false, trace => true},\n"
"{name => 'strFilter', required => false, trace => true},\n"
");\n"
"\n\n"
"my $strPathRead = $strPath . (defined($strSubPath) ? \"/${strSubPath}\" : '');\n"
"my $hPath;\n"
"my $strFilter;\n"
"\n\n"
"my $oPathInfo = $self->info($strPathRead, {bIgnoreMissing => $bIgnoreMissing});\n"
"\n"
"if (defined($oPathInfo))\n"
"{\n"
"\n"
"if ($iDepth == 0 && !S_ISDIR($oPathInfo->mode()))\n"
"{\n"
"$strFilter = basename($strPathRead);\n"
"$strPathRead = dirname($strPathRead);\n"
"$hManifest->{basename($strPathRead)} = $self->manifestStat($strPathRead);\n"
"}\n"
"\n\n"
"\n"
"else\n"
"{\n"
"\n"
"my @stryFileList = @{$self->list($strPathRead, {bIgnoreMissing => $iDepth != 0})};\n"
"unshift(@stryFileList, '.');\n"
"my $hFileStat = $self->manifestList($strPathRead, \\@stryFileList);\n"
"my $hFileStat = $self->manifestList($strPathRead, \\@stryFileList, $strFilter);\n"
"\n\n"
"foreach my $strFile (keys(%{$hFileStat}))\n"
"{\n"
"\n"
"if (defined($strFilter) && $strFile ne $strFilter)\n"
"{\n"
"next;\n"
"}\n"
"\n"
"my $strManifestFile = $iDepth == 0 ? $strFile : ($strSubPath . ($strFile eq qw(.) ? '' : \"/${strFile}\"));\n"
"$hManifest->{$strManifestFile} = $hFileStat->{$strFile};\n"
"\n\n"
@ -19370,6 +19367,7 @@ static const EmbeddedModule embeddedModule[] =
"}\n"
"}\n"
"}\n"
"}\n"
"\n\n"
"return logDebugReturn($strOperation);\n"
"}\n"
@ -19383,18 +19381,25 @@ static const EmbeddedModule embeddedModule[] =
"$strOperation,\n"
"$strPath,\n"
"$stryFile,\n"
"$strFilter,\n"
") =\n"
"logDebugParam\n"
"(\n"
"__PACKAGE__ . '->manifestList', \\@_,\n"
"{name => 'strPath', trace => true},\n"
"{name => 'stryFile', trace => true},\n"
"{name => 'strFilter', required => false, trace => true},\n"
");\n"
"\n"
"my $hFileStat = {};\n"
"\n"
"foreach my $strFile (@{$stryFile})\n"
"{\n"
"if ($strFile ne '.' && defined($strFilter) && $strFilter ne $strFile)\n"
"{\n"
"next;\n"
"}\n"
"\n"
"$hFileStat->{$strFile} = $self->manifestStat(\"${strPath}\" . ($strFile eq qw(.) ? '' : \"/${strFile}\"));\n"
"\n"
"if (!defined($hFileStat->{$strFile}))\n"

View File

@ -139,18 +139,18 @@ P00 DEBUG: Manifest->new(): bLoad = false, iDbCatalogVersion = 201409291, o
P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/db-master/db/base/postmaster.pid
P00 DEBUG: Storage::Local->exists=>: bExists = false
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = [undef], hDatabaseMap = [undef], hTablespaceMap = [undef], iLevel = <0>, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [undef], strLevel = [undef], strParentPath = [undef], strPath = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/base/pg_tblspc
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/base/pg_tblspc
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [undef], strLevel = pg_data/pg_hba.conf, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_config/pg_hba.conf
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_config/pg_hba.conf
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config/pg_hba.conf
P00 INFO: exclude pg_log/logfile from backup using 'pg_log/' exclusion
P00 INFO: exclude pg_log2 from backup using 'pg_log2' exclusion
P00 INFO: exclude pg_log2/logfile from backup using 'pg_log2' exclusion
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [undef], strLevel = pg_data/pg_stat, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_stat
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 INFO: exclude postgresql.auto.conf from backup using 'postgresql.auto.conf' exclusion
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [undef], strLevel = pg_data/postgresql.conf, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_config/postgresql.conf
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_config/postgresql.conf
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config/postgresql.conf
P00 DEBUG: Backup::Backup->process: create backup path [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-1]
P00 DEBUG: Storage::Local->pathCreate(): bCreateParent = <false>, bIgnoreExists = <false>, strMode = <0750>, strPathExp = <REPO:BACKUP>/[BACKUP-FULL-1]
P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-1]/backup.manifest
@ -590,18 +590,18 @@ P00 DEBUG: Manifest->new(): bLoad = false, iDbCatalogVersion = 201409291, o
P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/db-master/db/base/postmaster.pid
P00 DEBUG: Storage::Local->exists=>: bExists = false
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = [undef], hDatabaseMap = [undef], hTablespaceMap = [undef], iLevel = <0>, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [undef], strLevel = [undef], strParentPath = [undef], strPath = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/base/pg_tblspc
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/base/pg_tblspc
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [undef], strLevel = pg_data/pg_hba.conf, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_config/pg_hba.conf
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_config/pg_hba.conf
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config/pg_hba.conf
P00 INFO: exclude pg_log/logfile from backup using 'pg_log/' exclusion
P00 INFO: exclude pg_log2 from backup using 'pg_log2' exclusion
P00 INFO: exclude pg_log2/logfile from backup using 'pg_log2' exclusion
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [undef], strLevel = pg_data/pg_stat, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_stat
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 INFO: exclude postgresql.auto.conf from backup using 'postgresql.auto.conf' exclusion
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [undef], strLevel = pg_data/postgresql.conf, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_config/postgresql.conf
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_config/postgresql.conf
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config/postgresql.conf
P00 DEBUG: Backup::Backup->process: create backup path [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]
P00 DEBUG: Storage::Local->pathCreate(): bCreateParent = <false>, bIgnoreExists = <false>, strMode = <0750>, strPathExp = <REPO:BACKUP>/[BACKUP-FULL-2]
P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]/backup.manifest
@ -839,23 +839,23 @@ P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/db-master/db/
P00 DEBUG: Storage::Local->exists=>: bExists = true
P00 WARN: --no-online passed and postmaster.pid exists but --force was passed so backup will continue though it looks like the postmaster is running and the backup will probably not be consistent
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = [undef], hDatabaseMap = [undef], hTablespaceMap = [undef], iLevel = <0>, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [undef], strLevel = [undef], strParentPath = [undef], strPath = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/base/pg_tblspc
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/base/pg_tblspc
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [undef], strLevel = pg_data/pg_hba.conf, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_config/pg_hba.conf
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_config/pg_hba.conf
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config/pg_hba.conf
P00 INFO: exclude pg_log/logfile from backup using 'pg_log/' exclusion
P00 INFO: exclude pg_log2 from backup using 'pg_log2' exclusion
P00 INFO: exclude pg_log2/logfile from backup using 'pg_log2' exclusion
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [undef], strLevel = pg_data/pg_stat, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_stat
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 INFO: exclude postgresql.auto.conf from backup using 'postgresql.auto.conf' exclusion
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [undef], strLevel = pg_data/postgresql.conf, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_config/postgresql.conf
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_config/postgresql.conf
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config/postgresql.conf
P00 WARN: aborted backup [BACKUP-FULL-2] of same type exists, will be cleaned to remove invalid files and resumed
P00 TEST: PgBaCkReStTeSt-BACKUP-RESUME-PgBaCkReStTeSt
P00 DEBUG: Backup::Backup->resumeClean(): oAbortedManifest = [object], oManifest = [object], oStorageRepo = [object], strBackupLabel = [BACKUP-FULL-2]
P00 DETAIL: clean resumed backup path: [TEST_PATH]/db-master/repo/backup/db/[BACKUP-FULL-2]
P00 DEBUG: Storage::Local->manifest(): strPathExp = <REPO:BACKUP>/[BACKUP-FULL-2]
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = <REPO:BACKUP>/[BACKUP-FULL-2]
P00 DEBUG: Backup::Backup->resumeClean: remove file file.tmp
P00 DEBUG: Backup::Backup->resumeClean: remove file pg_data/PG_VERSION
P00 DEBUG: Storage::Local->remove(): bIgnoreMissing = <true>, bRecurse = <false>, xstryPathFileExp = (<REPO:BACKUP>/[BACKUP-FULL-2]/file.tmp, <REPO:BACKUP>/[BACKUP-FULL-2]/pg_data/PG_VERSION)
@ -1245,7 +1245,7 @@ P00 DEBUG: Restore->clean(): oManifest = [object]
P00 DETAIL: check [TEST_PATH]/db-master/db/base exists
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/base
P00 DETAIL: check [TEST_PATH]/db-master/db/pg_config exists
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/pg_config
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
@ -1254,7 +1254,7 @@ P00 DEBUG: Storage::Local->exists=>: bExists = true
P00 DETAIL: check [TEST_PATH]/db-master/db/pg_stat exists
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DETAIL: check [TEST_PATH]/db-master/db/pg_config exists
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/pg_config
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
@ -1263,19 +1263,19 @@ P00 DEBUG: Storage::Local->exists=>: bExists = true
P00 INFO: remove invalid files/paths/links from [TEST_PATH]/db-master/db/pg_config
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/pg_config
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_config
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config
P00 INFO: remove invalid files/paths/links from [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 INFO: remove invalid files/paths/links from [TEST_PATH]/db-master/db/pg_config
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/pg_config
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_config
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config
P00 INFO: remove invalid files/paths/links from [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/base
P00 DETAIL: remove file [TEST_PATH]/db-master/db/base/recovery.done
P00 DEBUG: Storage::Local->remove(): bIgnoreMissing = <true>, bRecurse = <false>, xstryPathFileExp = [TEST_PATH]/db-master/db/base/recovery.done
P00 DEBUG: Storage::Local->remove=>: bRemoved = true
@ -1993,11 +1993,11 @@ P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/db-master/db/
P00 DEBUG: Storage::Local->exists=>: bExists = false
P00 WARN: incr backup cannot alter 'checksum-page' option to 'false', reset to 'true' from [BACKUP-FULL-2]
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = [undef], hDatabaseMap = [undef], hTablespaceMap = [undef], iLevel = <0>, oLastManifest = [object], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [undef], strLevel = [undef], strParentPath = [undef], strPath = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/base/pg_tblspc
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/base/pg_tblspc
P00 DEBUG: Manifest->build: found tablespace 1 in offline mode
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = true, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [TS_PATH-1], strLevel = pg_tblspc/1, strParentPath = [TEST_PATH]/db-master/db/base/pg_tblspc, strPath = [TEST_PATH]/db-master/db/tablespace/ts1
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/tablespace/ts1
P00 DEBUG: Storage::Local->manifest(): strFilter = [TS_PATH-1], strPathExp = [TEST_PATH]/db-master/db/tablespace/ts1
P00 DEBUG: Backup::Backup->process: create backup path [TEST_PATH]/db-master/repo/backup/db/[BACKUP-INCR-1]
P00 DEBUG: Storage::Local->pathCreate(): bCreateParent = <false>, bIgnoreExists = <false>, strMode = <0750>, strPathExp = <REPO:BACKUP>/[BACKUP-INCR-1]
P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/db-master/repo/backup/db/[BACKUP-INCR-1]/backup.manifest
@ -2409,22 +2409,22 @@ P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/db-master/db/
P00 DEBUG: Storage::Local->exists=>: bExists = false
P00 WARN: incr backup cannot alter 'checksum-page' option to 'false', reset to 'true' from [BACKUP-FULL-2]
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = [undef], hDatabaseMap = [undef], hTablespaceMap = [undef], iLevel = <0>, oLastManifest = [object], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [undef], strLevel = [undef], strParentPath = [undef], strPath = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/base/pg_tblspc
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/base/pg_tblspc
P00 DEBUG: Manifest->build: found tablespace 1 in offline mode
P00 DEBUG: Manifest->build: found tablespace 11 in offline mode
P00 DEBUG: Manifest->build: found tablespace 2 in offline mode
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = true, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [TS_PATH-1], strLevel = pg_tblspc/1, strParentPath = [TEST_PATH]/db-master/db/base/pg_tblspc, strPath = [TEST_PATH]/db-master/db/tablespace/ts1
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/tablespace/ts1
P00 DEBUG: Storage::Local->manifest(): strFilter = [TS_PATH-1], strPathExp = [TEST_PATH]/db-master/db/tablespace/ts1
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = true, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [TS_PATH-1], strLevel = pg_tblspc/11, strParentPath = [TEST_PATH]/db-master/db/base/pg_tblspc, strPath = [TEST_PATH]/db-master/db/tablespace/ts11
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/tablespace/ts11
P00 DEBUG: Storage::Local->manifest(): strFilter = [TS_PATH-1], strPathExp = [TEST_PATH]/db-master/db/tablespace/ts11
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = true, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [hash], strFilter = [TS_PATH-1], strLevel = pg_tblspc/2, strParentPath = [TEST_PATH]/db-master/db/base/pg_tblspc, strPath = [TEST_PATH]/db-master/db/tablespace/ts2
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/tablespace/ts2
P00 DEBUG: Storage::Local->manifest(): strFilter = [TS_PATH-1], strPathExp = [TEST_PATH]/db-master/db/tablespace/ts2
P00 WARN: aborted backup [BACKUP-INCR-2] of same type exists, will be cleaned to remove invalid files and resumed
P00 TEST: PgBaCkReStTeSt-BACKUP-RESUME-PgBaCkReStTeSt
P00 DEBUG: Backup::Backup->resumeClean(): oAbortedManifest = [object], oManifest = [object], oStorageRepo = [object], strBackupLabel = [BACKUP-INCR-2]
P00 DETAIL: clean resumed backup path: [TEST_PATH]/db-master/repo/backup/db/[BACKUP-INCR-2]
P00 DEBUG: Storage::Local->manifest(): strPathExp = <REPO:BACKUP>/[BACKUP-INCR-2]
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = <REPO:BACKUP>/[BACKUP-INCR-2]
P00 DEBUG: Backup::Backup->resumeClean: remove file pg_data/changesize.txt
P00 DEBUG: Backup::Backup->resumeClean: remove file pg_data/zerosize.txt
P00 DEBUG: Backup::Backup->resumeClean: remove file pg_tblspc/1/[TS_PATH-1]/16384/tablespace1.txt
@ -3185,7 +3185,7 @@ P00 DEBUG: Restore->clean(): oManifest = [object]
P00 DETAIL: check [TEST_PATH]/db-master/db/base-2 exists
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/base-2
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/base-2
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/base-2
P00 DETAIL: check [TEST_PATH]/db-master/db/tablespace/ts1-2 exists
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/tablespace/ts1-2
P00 DEBUG: Storage::Local->pathExists=>: bExists = true

View File

@ -127,13 +127,13 @@ P00 DEBUG: Protocol::Storage::Remote->exists(): strPathExp = [TEST_PATH]/db
P00 DEBUG: Protocol::Storage::Remote->exists=>: bExists = false
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = [undef], hDatabaseMap = [undef], hTablespaceMap = [undef], iLevel = <0>, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = [undef], strParentPath = [undef], strPath = [TEST_PATH]/db-master/db/base
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/base/pg_tblspc
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = pg_data/pg_hba.conf, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_config/pg_hba.conf
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config/pg_hba.conf
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/pg_config/pg_hba.conf
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = pg_data/pg_stat, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_stat
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = pg_data/postgresql.conf, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_config/postgresql.conf
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config/postgresql.conf
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/pg_config/postgresql.conf
P00 DEBUG: Backup::Backup->process: create backup path [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-1]
P00 DEBUG: Storage::Local->pathCreate(): bCreateParent = <false>, bIgnoreExists = <false>, strMode = <0750>, strPathExp = <REPO:BACKUP>/[BACKUP-FULL-1]
P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-1]/backup.manifest
@ -596,17 +596,17 @@ P00 DEBUG: Protocol::Storage::Remote->exists(): strPathExp = [TEST_PATH]/db
P00 DEBUG: Protocol::Storage::Remote->exists=>: bExists = false
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = [undef], hDatabaseMap = [undef], hTablespaceMap = [undef], iLevel = <0>, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = [undef], strParentPath = [undef], strPath = [TEST_PATH]/db-master/db/base
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/base/pg_tblspc
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = pg_data/pg_hba.conf, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_config/pg_hba.conf
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config/pg_hba.conf
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/pg_config/pg_hba.conf
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = pg_data/pg_stat, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_stat
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = pg_data/postgresql.conf, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_config/postgresql.conf
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config/postgresql.conf
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/pg_config/postgresql.conf
P00 WARN: aborted backup [BACKUP-FULL-2] of same type exists, will be cleaned to remove invalid files and resumed
P00 DEBUG: Backup::Backup->resumeClean(): oAbortedManifest = [object], oManifest = [object], oStorageRepo = [object], strBackupLabel = [BACKUP-FULL-2]
P00 DETAIL: clean resumed backup path: [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]
P00 DEBUG: Storage::Local->manifest(): strPathExp = <REPO:BACKUP>/[BACKUP-FULL-2]
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = <REPO:BACKUP>/[BACKUP-FULL-2]
P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest
P00 DEBUG: Storage::Local->exists=>: bExists = false
P00 DEBUG: Storage::Local->openWrite(): bAtomic = <false>, bPathCreate = <false>, lTimestamp = [undef], rhyFilter = [undef], strCipherPass = [undef], strGroup = [undef], strMode = <0640>, strUser = [undef], xFileExp = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest.copy
@ -945,17 +945,17 @@ P00 DEBUG: Protocol::Storage::Remote->exists(): strPathExp = [TEST_PATH]/db
P00 DEBUG: Protocol::Storage::Remote->exists=>: bExists = false
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = [undef], hDatabaseMap = [undef], hTablespaceMap = [undef], iLevel = <0>, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = [undef], strParentPath = [undef], strPath = [TEST_PATH]/db-master/db/base
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/base/pg_tblspc
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = pg_data/pg_hba.conf, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_config/pg_hba.conf
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config/pg_hba.conf
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/pg_config/pg_hba.conf
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = pg_data/pg_stat, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_stat
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = pg_data/postgresql.conf, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_config/postgresql.conf
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config/postgresql.conf
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/pg_config/postgresql.conf
P00 WARN: aborted backup [BACKUP-FULL-2] of same type exists, will be cleaned to remove invalid files and resumed
P00 DEBUG: Backup::Backup->resumeClean(): oAbortedManifest = [object], oManifest = [object], oStorageRepo = [object], strBackupLabel = [BACKUP-FULL-2]
P00 DETAIL: clean resumed backup path: [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]
P00 DEBUG: Storage::Local->manifest(): strPathExp = <REPO:BACKUP>/[BACKUP-FULL-2]
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = <REPO:BACKUP>/[BACKUP-FULL-2]
P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest
P00 DEBUG: Storage::Local->exists=>: bExists = false
P00 DEBUG: Storage::Local->openWrite(): bAtomic = <false>, bPathCreate = <false>, lTimestamp = [undef], rhyFilter = [undef], strCipherPass = [undef], strGroup = [undef], strMode = <0640>, strUser = [undef], xFileExp = [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]/backup.manifest.copy
@ -1096,18 +1096,18 @@ P00 DEBUG: Protocol::Storage::Remote->exists=>: bExists = true
P00 WARN: --no-online passed and postmaster.pid exists but --force was passed so backup will continue though it looks like the postmaster is running and the backup will probably not be consistent
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = [undef], hDatabaseMap = [undef], hTablespaceMap = [undef], iLevel = <0>, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = [undef], strParentPath = [undef], strPath = [TEST_PATH]/db-master/db/base
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/base/pg_tblspc
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = pg_data/pg_hba.conf, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_config/pg_hba.conf
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config/pg_hba.conf
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/pg_config/pg_hba.conf
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = pg_data/pg_stat, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_stat
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = false, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = pg_data/postgresql.conf, strParentPath = [TEST_PATH]/db-master/db/base, strPath = ../pg_config/postgresql.conf
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config/postgresql.conf
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/pg_config/postgresql.conf
P00 WARN: aborted backup [BACKUP-FULL-2] of same type exists, will be cleaned to remove invalid files and resumed
P00 TEST: PgBaCkReStTeSt-BACKUP-RESUME-PgBaCkReStTeSt
P00 DEBUG: Backup::Backup->resumeClean(): oAbortedManifest = [object], oManifest = [object], oStorageRepo = [object], strBackupLabel = [BACKUP-FULL-2]
P00 DETAIL: clean resumed backup path: [TEST_PATH]/backup/repo/backup/db/[BACKUP-FULL-2]
P00 DEBUG: Storage::Local->manifest(): strPathExp = <REPO:BACKUP>/[BACKUP-FULL-2]
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = <REPO:BACKUP>/[BACKUP-FULL-2]
P00 DEBUG: Backup::Backup->resumeClean: remove file file.tmp
P00 DEBUG: Backup::Backup->resumeClean: remove file pg_data/PG_VERSION
P00 DEBUG: Storage::Local->remove(): bIgnoreMissing = <true>, bRecurse = <false>, xstryPathFileExp = (<REPO:BACKUP>/[BACKUP-FULL-2]/file.tmp, <REPO:BACKUP>/[BACKUP-FULL-2]/pg_data/PG_VERSION)
@ -1498,7 +1498,7 @@ P00 DEBUG: Restore->clean(): oManifest = [object]
P00 DETAIL: check [TEST_PATH]/db-master/db/base exists
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/base
P00 DETAIL: check [TEST_PATH]/db-master/db/pg_config exists
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/pg_config
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
@ -1507,7 +1507,7 @@ P00 DEBUG: Storage::Local->exists=>: bExists = true
P00 DETAIL: check [TEST_PATH]/db-master/db/pg_stat exists
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DETAIL: check [TEST_PATH]/db-master/db/pg_config exists
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/pg_config
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
@ -1516,19 +1516,19 @@ P00 DEBUG: Storage::Local->exists=>: bExists = true
P00 INFO: remove invalid files/paths/links from [TEST_PATH]/db-master/db/pg_config
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/pg_config
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_config
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config
P00 INFO: remove invalid files/paths/links from [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_stat
P00 INFO: remove invalid files/paths/links from [TEST_PATH]/db-master/db/pg_config
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/pg_config
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/pg_config
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/pg_config
P00 INFO: remove invalid files/paths/links from [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->pathExists(): strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->pathExists=>: bExists = true
P00 DEBUG: Storage::Local->manifest(): strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = [TEST_PATH]/db-master/db/base
P00 DETAIL: remove file [TEST_PATH]/db-master/db/base/recovery.done
P00 DEBUG: Storage::Local->remove(): bIgnoreMissing = <true>, bRecurse = <false>, xstryPathFileExp = [TEST_PATH]/db-master/db/base/recovery.done
P00 DEBUG: Storage::Local->remove=>: bRemoved = true
@ -1994,9 +1994,9 @@ P00 WARN: incr backup cannot alter 'checksum-page' option to 'false', reset to
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = [undef], hDatabaseMap = [undef], hTablespaceMap = [undef], iLevel = <0>, oLastManifest = [object], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [undef], strLevel = [undef], strParentPath = [undef], strPath = [TEST_PATH]/db-master/db/base
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/base/pg_tblspc
P00 DEBUG: Manifest->build: found tablespace 1 in offline mode
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = true, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [TS_PATH-1], strLevel = pg_tblspc/1, strParentPath = [TEST_PATH]/db-master/db/base/pg_tblspc, strPath = [TEST_PATH]/db-master/db/tablespace/ts1
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/tablespace/ts1
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/tablespace/ts1
P00 DEBUG: Backup::Backup->process: create backup path [TEST_PATH]/backup/repo/backup/db/[BACKUP-INCR-1]
P00 DEBUG: Storage::Local->pathCreate(): bCreateParent = <false>, bIgnoreExists = <false>, strMode = <0750>, strPathExp = <REPO:BACKUP>/[BACKUP-INCR-1]
P00 DEBUG: Storage::Local->exists(): strFileExp = [TEST_PATH]/backup/repo/backup/db/[BACKUP-INCR-1]/backup.manifest
@ -2422,18 +2422,18 @@ P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPat
P00 DEBUG: Manifest->build: found tablespace 1 in offline mode
P00 DEBUG: Manifest->build: found tablespace 11 in offline mode
P00 DEBUG: Manifest->build: found tablespace 2 in offline mode
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/base
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = true, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [TS_PATH-1], strLevel = pg_tblspc/1, strParentPath = [TEST_PATH]/db-master/db/base/pg_tblspc, strPath = [TEST_PATH]/db-master/db/tablespace/ts1
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/tablespace/ts1
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/tablespace/ts1
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = true, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [TS_PATH-1], strLevel = pg_tblspc/11, strParentPath = [TEST_PATH]/db-master/db/base/pg_tblspc, strPath = [TEST_PATH]/db-master/db/tablespace/ts11
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/tablespace/ts11
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/tablespace/ts11
P00 DEBUG: Manifest->build(): bOnline = false, bTablespace = true, hDatabaseMap = [undef], hTablespaceMap = [hash], iLevel = 1, oLastManifest = [undef], oStorageDbMaster = [object], rhExclude = [undef], strFilter = [TS_PATH-1], strLevel = pg_tblspc/2, strParentPath = [TEST_PATH]/db-master/db/base/pg_tblspc, strPath = [TEST_PATH]/db-master/db/tablespace/ts2
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [undef], strPathExp = [TEST_PATH]/db-master/db/tablespace/ts2
P00 DEBUG: Protocol::Storage::Remote->manifest(): rhParam = [hash], strPathExp = [TEST_PATH]/db-master/db/tablespace/ts2
P00 WARN: aborted backup [BACKUP-INCR-2] of same type exists, will be cleaned to remove invalid files and resumed
P00 TEST: PgBaCkReStTeSt-BACKUP-RESUME-PgBaCkReStTeSt
P00 DEBUG: Backup::Backup->resumeClean(): oAbortedManifest = [object], oManifest = [object], oStorageRepo = [object], strBackupLabel = [BACKUP-INCR-2]
P00 DETAIL: clean resumed backup path: [TEST_PATH]/backup/repo/backup/db/[BACKUP-INCR-2]
P00 DEBUG: Storage::Local->manifest(): strPathExp = <REPO:BACKUP>/[BACKUP-INCR-2]
P00 DEBUG: Storage::Local->manifest(): strFilter = [undef], strPathExp = <REPO:BACKUP>/[BACKUP-INCR-2]
P00 DEBUG: Backup::Backup->resumeClean: remove file pg_data/changesize.txt
P00 DEBUG: Backup::Backup->resumeClean: remove file pg_data/zerosize.txt
P00 DEBUG: Backup::Backup->resumeClean: remove file pg_tblspc/1/[TS_PATH-1]/16384/tablespace1.txt

View File

@ -297,15 +297,15 @@ sub run
$oManifest->build(storageDb(), $self->{strDbPath}, undef, true);
$self->testResult(sub {$self->manifestCompare($oManifestExpected, $oManifest)}, "", 'master false');
# Create a pg_config path and file link
my $strConfFile = '/pg_config/postgresql.conf';
# Create pg_config path and postgresql.conf file
my $strConfFile = '/postgresql.conf';
my $strConfContent = "listen_addresses = *\n";
storageDb()->pathCreate('pg_config');
storageDb()->put(storageDb()->openWrite($self->{strDbPath} . $strConfFile,
storageTest()->pathCreate('pg_config');
storageTest()->put(storageTest()->openWrite($self->testPath() . '/pg_config' . $strConfFile,
{strMode => MODE_0600, strUser => TEST_USER, strGroup => TEST_GROUP, lTimestamp => $lTime}), $strConfContent);
# link db/pg_config/postgresql.conf.link -> ./postgresql.conf
testLinkCreate($self->{strDbPath} . $strConfFile . '.link', './postgresql.conf');
# link db/postgresql.conf -> pg_config/postgresql.conf
testLinkCreate($self->{strDbPath} . $strConfFile, $self->testPath() . '/pg_config' . $strConfFile);
# INVESTIGATE: on the command line, these links appear to be fine but in the code, a debug line prior to the recursive call to build() produces:
# STRPATH BEFORE BUILD: /home/ubuntu/test/test-0/db/base, STRLEVEL PASSED: $VAR1 = 'pg_data/base/pg_config_bad';
@ -340,27 +340,33 @@ sub run
# Update expected manifest
$oManifestExpected->set(MANIFEST_SECTION_TARGET_PATH, MANIFEST_PATH_BASE, MANIFEST_SUBKEY_MODE, MODE_0700);
$oManifestExpected->set(MANIFEST_SECTION_TARGET_PATH, MANIFEST_TARGET_PGDATA . '/pg_config', undef, $hDefault);
# Section backup:target
$oManifestExpected->set(MANIFEST_SECTION_BACKUP_TARGET, MANIFEST_TARGET_PGDATA . $strConfFile . '.link',
MANIFEST_SUBKEY_FILE, 'postgresql.conf');
$oManifestExpected->set(MANIFEST_SECTION_BACKUP_TARGET, MANIFEST_TARGET_PGDATA . $strConfFile . '.link',
MANIFEST_SUBKEY_PATH, '.');
$oManifestExpected->set(MANIFEST_SECTION_BACKUP_TARGET, MANIFEST_TARGET_PGDATA . $strConfFile . '.link',
MANIFEST_SUBKEY_TYPE, MANIFEST_VALUE_LINK);
$oManifestExpected->set(
MANIFEST_SECTION_BACKUP_TARGET, MANIFEST_TARGET_PGDATA . $strConfFile, MANIFEST_SUBKEY_FILE, 'postgresql.conf');
$oManifestExpected->set(
MANIFEST_SECTION_BACKUP_TARGET, MANIFEST_TARGET_PGDATA . $strConfFile, MANIFEST_SUBKEY_PATH,
$self->testPath() . '/pg_config');
$oManifestExpected->set(
MANIFEST_SECTION_BACKUP_TARGET, MANIFEST_TARGET_PGDATA . $strConfFile, MANIFEST_SUBKEY_TYPE, MANIFEST_VALUE_LINK);
# Section target:file
$oManifestExpected->set(MANIFEST_SECTION_TARGET_FILE, MANIFEST_TARGET_PGDATA . $strConfFile,
MANIFEST_SUBKEY_SIZE, length($strConfContent));
$oManifestExpected->set(MANIFEST_SECTION_TARGET_FILE, MANIFEST_TARGET_PGDATA . $strConfFile,
MANIFEST_SUBKEY_TIMESTAMP, $lTime);
$oManifestExpected->set(
MANIFEST_SECTION_TARGET_FILE, MANIFEST_TARGET_PGDATA . $strConfFile, MANIFEST_SUBKEY_SIZE,
length($strConfContent));
$oManifestExpected->set(
MANIFEST_SECTION_TARGET_FILE, MANIFEST_TARGET_PGDATA . '/postgresql.conf', MANIFEST_SUBKEY_TIMESTAMP, $lTime);
# Section target:link
$oManifestExpected->set(MANIFEST_SECTION_TARGET_LINK, MANIFEST_TARGET_PGDATA . $strConfFile . '.link',
MANIFEST_SUBKEY_DESTINATION, './postgresql.conf');
$oManifestExpected->set(MANIFEST_SECTION_TARGET_LINK, MANIFEST_TARGET_PGDATA . '/postgresql.conf',
MANIFEST_SUBKEY_DESTINATION, $self->testPath() . '/pg_config' . $strConfFile);
# Section target:link:default
$oManifestExpected->set(MANIFEST_SECTION_TARGET_LINK . ":default", MANIFEST_SUBKEY_GROUP, undef, TEST_GROUP);
$oManifestExpected->set(MANIFEST_SECTION_TARGET_LINK . ":default", MANIFEST_SUBKEY_USER, undef, TEST_USER);
# Create an unreadable file and path in pg_config to test that we are only reading the files we need to
executeTest(
"sudo touch " . $self->testPath() . "/pg_config/do_not_read.txt" .
" && sudo mkdir -m 700 " . $self->testPath() . "/pg_config/do_not_read");
$oManifest = new pgBackRest::Manifest(
$strBackupManifestFile,
{bLoad => false, strDbVersion => PG_VERSION_94, iDbCatalogVersion => $self->dbCatalogVersion(PG_VERSION_94)});
@ -377,7 +383,7 @@ sub run
$self->testException(
sub {$oManifest->build(storageDb(), $self->{strDbPath}, undef, true)}, ERROR_FORMAT,
'recursion in manifest build exceeds depth of 16: pg_data/pgdata/pgdata/pgdata/pgdata/pgdata/pgdata/pgdata/pgdata/' .
"pgdata/pgdata/pgdata/pgdata/pgdata/pgdata/pgdata/pg_config/postgresql.conf.link\n" .
"pgdata/pgdata/pgdata/pgdata/pgdata/pgdata/pgdata/pgdata\n" .
'HINT: is there a link loop in $PGDATA?');
testFileRemove($self->{strDbPath} . '/pgdata');
@ -829,6 +835,9 @@ sub run
my $strTblspcDir = $strTblspcVersion . '/11';
storageTest()->pathCreate("$strTablespacePath/$strTblspcDir", {bCreateParent => true});
# Create a file and path that will error if read
executeTest("sudo touch ${strTablespacePath}/do_not_read.txt && sudo mkdir -m 700 ${strTablespacePath}/do_not_read");
# Create unlogged and temp files
storageDb()->put(storageDb()->openWrite($strTablespacePath . '/' . $strTblspcDir . $strUnlogFileOid . '_init',
{strMode => MODE_0600, strUser => TEST_USER, strGroup => TEST_GROUP, lTimestamp => $lTime}), '');
@ -915,6 +924,9 @@ sub run
$self->testResult(sub {$self->manifestCompare($oManifestExpected, $oManifest)}, "",
'offline passing tablespace map and database map');
# Remove the unreadable file and path because they will not work with tests for PG < 9.0
executeTest("sudo rm ${strTablespacePath}/do_not_read.txt && sudo rmdir ${strTablespacePath}/do_not_read");
# Exclusions
#---------------------------------------------------------------------------------------------------------------------------
# Excluded links