diff --git a/doc/xml/release.xml b/doc/xml/release.xml index 800cbac7b..5fffea294 100644 --- a/doc/xml/release.xml +++ b/doc/xml/release.xml @@ -28,6 +28,15 @@

Fixed an issue where WAL was not expired on 10. This was caused by a faulty regex that expected all major versions to be X.X.

+ + + + + + + +

Fixed info command to eliminate "db (prior)" output if no backups or archives exist for a prior version of the cluster.

+
diff --git a/lib/pgBackRest/Info.pm b/lib/pgBackRest/Info.pm index 9224ccebd..e695287fe 100644 --- a/lib/pgBackRest/Info.pm +++ b/lib/pgBackRest/Info.pm @@ -201,38 +201,62 @@ sub formatText # Loop through the DB history array for the stanza from newest to oldest foreach my $hDbInfo (reverse @{$oStanzaInfo->{&INFO_BACKUP_SECTION_DB}}) { - $strOutput .= $bDbCurrent ? "\n db (current)" : "\n db (prior)"; - $bDbCurrent = false; + if ($bDbCurrent) + { + $strOutput .= "\n db (current)"; + } # Get the archive information for the DB + my $strOutputArchive; foreach my $hDbArchive (@{$oStanzaInfo->{&INFO_SECTION_ARCHIVE}}) { if ($hDbArchive->{&INFO_SECTION_DB}{&INFO_HISTORY_ID} == $hDbInfo->{&INFO_HISTORY_ID}) { # Output archive start / stop values - $strOutput .= "\n wal archive min/max (" . $hDbArchive->{&INFO_KEY_ID} . "): "; + $strOutputArchive .= "\n wal archive min/max (" . $hDbArchive->{&INFO_KEY_ID} . "): "; if (defined($hDbArchive->{&INFO_KEY_MIN})) { - $strOutput .= $hDbArchive->{&INFO_KEY_MIN} . ' / ' . $hDbArchive->{&INFO_KEY_MAX}; + $strOutputArchive .= $hDbArchive->{&INFO_KEY_MIN} . ' / ' . $hDbArchive->{&INFO_KEY_MAX}; } else { - $strOutput .= 'none present'; + $strOutputArchive .= 'none present'; } - $strOutput .= "\n"; + $strOutputArchive .= "\n"; } } # Get information for each stanza backup for the DB, from oldest to newest + my $strOutputBackup; foreach my $oBackupInfo (@{$$oStanzaInfo{&INFO_BACKUP_SECTION_BACKUP}}) { if ($oBackupInfo->{&INFO_SECTION_DB}{&INFO_KEY_ID} == $hDbInfo->{&INFO_HISTORY_ID}) { - $strOutput .= "\n" . $self->formatTextBackup($oBackupInfo) . "\n"; + $strOutputBackup .= "\n" . $self->formatTextBackup($oBackupInfo) . "\n"; } } + + if (defined($strOutputArchive) || defined($strOutputBackup)) + { + if (!$bDbCurrent) + { + $strOutput .= "\n db (prior)"; + } + + if (defined($strOutputArchive)) + { + $strOutput .= $strOutputArchive; + } + + if (defined($strOutputBackup)) + { + $strOutput .= $strOutputBackup; + } + } + + $bDbCurrent = false; } } diff --git a/test/lib/pgBackRestTest/Module/Info/InfoUnitTest.pm b/test/lib/pgBackRestTest/Module/Info/InfoUnitTest.pm index 51614007c..03f3dcfd5 100644 --- a/test/lib/pgBackRestTest/Module/Info/InfoUnitTest.pm +++ b/test/lib/pgBackRestTest/Module/Info/InfoUnitTest.pm @@ -15,6 +15,7 @@ use English '-no_match_vars'; use File::Basename qw(dirname); use Storable qw(dclone); +use pgBackRest::Backup::Common; use pgBackRest::Backup::Info; use pgBackRest::Common::Exception; use pgBackRest::Common::Lock; @@ -365,6 +366,36 @@ sub run " repository size: 0B, repository backup size: 0B\n", "formatText() multiple DB versions"); + # Remove backup from db (prior) + #--------------------------------------------------------------------------------------------------------------------------- + # Load the backup.info file + my $oBackupInfo = new pgBackRest::Backup::Info($self->{strBackupPath}); + my @stryPath = $oBackupInfo->list(backupRegExpGet(true)); + + # Remove the db prior full backup from the info file and save it + $oBackupInfo->delete($stryPath[0]); + $oBackupInfo->save(); + + # Remove the backup directory + storageTest()->remove($self->{strBackupPath} . "/" . $stryPath[0], {bRecurse => true}); + + $hyStanza = $oInfo->stanzaList($self->stanza()); + $self->testResult(sub {$oInfo->formatText($hyStanza)}, + "stanza: db\n status: ok\n" . + "\n db (current)\n" . + " wal archive min/max (9.5-2): 000000010000000000000000 / 000000010000000000000003\n\n" . + " full backup: 20161207-155728F\n" . + " timestamp start/stop: 2016-12-07 15:57:28 / 2016-12-07 15:57:28\n" . + " wal start/stop: 000000010000000000000000 / 000000010000000000000000\n" . + " database size: 0B, backup size: 0B\n" . + " repository size: 0B, repository backup size: 0B\n\n" . + " diff backup: 20161207-155728F_20161208-155728D\n" . + " timestamp start/stop: 2016-12-08 15:57:28 / 2016-12-08 15:57:28\n" . + " wal start/stop: 000000010000000000000002 / 000000010000000000000002\n" . + " database size: 0B, backup size: 0B\n" . + " repository size: 0B, repository backup size: 0B\n", + "db (prior) removed"); + # dbArchiveSection() -- with archive #--------------------------------------------------------------------------------------------------------------------------- $hDbInfo->{&INFO_HISTORY_ID} = 2;