From: dpavlin Date: Thu, 26 Jan 2006 00:39:47 +0000 (+0000) Subject: added consistency check X-Git-Url: http://git.rot13.org/?a=commitdiff_plain;h=4645a1c7367bf616d8bab5beece8e2fcceb231b3;p=BackupPC.git added consistency check git-svn-id: svn+ssh://llin/home/dpavlin/private/svn/BackupPC/trunk@292 8392b6e1-25fa-0310-8288-cc32f8e212ea --- diff --git a/bin/BackupPC_burnArchiveCLI b/bin/BackupPC_burnArchiveCLI index 4c029c1..cd54e42 100755 --- a/bin/BackupPC_burnArchiveCLI +++ b/bin/BackupPC_burnArchiveCLI @@ -16,7 +16,7 @@ use Data::Dumper; my $debug = 0; # set this to 1 to prompt for DVD removal for each selected item. -my $prompt_for_delete = 0; +my $prompt_for_delete = shift @ARGV; $|=1; # don't check for user @@ -111,6 +111,8 @@ sub dumpArchive2XML($$$) AND hosts.id=backups.hostid AND shares.id=backups.shareid AND archive_backup.archive_id = ? + ORDER BY + hosts.name, shares.name, backups.num }; my $sth = $dbh->prepare("SELECT dvd_nr, total_size, note, username, date,id FROM archive WHERE dvd_nr=?"); @@ -164,7 +166,7 @@ sub dumpArchive2XML($$$) $writer->endTag("file"); } $writer->endTag("backup"); - } + } $writer->endTag("archive"); $writer->end(); @@ -310,6 +312,15 @@ my $sth_archive_backup_parts = $dbh->prepare( qq{ order by archive_backup.backup_id, backup_parts.part_nr }); +my $sth_archive_backup_check = $dbh->prepare( qq{ + SELECT + count(backups.id) + FROM backups + JOIN archive_backup on archive_backup.backup_id = backups.id + JOIN archive on archive_id = archive.id + WHERE dvd_nr = ? +}); + my $sth_archive_burned = $dbh->prepare( qq{ insert into archive_burned (archive_id, iso_size, part, copy) @@ -330,9 +341,20 @@ foreach my $arc (@archives_to_burn) { $sth_archive_backup_parts->execute($dvd_nr); + $sth_archive_backup_check->execute($dvd_nr); + + my ($parts_nr, $check_nr) = ($sth_archive_backup_parts->rows, $sth_archive_backup_check->fetchrow_array); + + if ($parts_nr != $check_nr) { + warn "ERROR: DVD #$dvd_nr is still not in consistent state. Some backup parts are ", + ($parts_nr < $check_nr) ? "missing ($parts_nr < $check_nr)" : "extra ($parts_nr > $check_nr)", + " you should re-create this DVD after BackupPC_incPartsUpdate finish\n"; + next if delete_dvd( $dvd_nr ); + } + if ($sth_archive_backup_parts->rows == 0) { warn "ERROR: no backup parts found for $dvd_nr. You should re-create that DVD.\n"; - delete_dvd( $dvd_nr ); + next if delete_dvd( $dvd_nr ); } if ($prompt_for_delete) {