this script checks for all instances with a given prefix whether they
actually exist and removes them from the database if they don't. this is mostly useful after part of a backup has been (intentionally or accidentally) deleted.
This commit is contained in:
parent
4f7aa4cc04
commit
3f08edbd25
|
@ -0,0 +1,91 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# this script checks for all instances with a given prefix whether they
|
||||
# actually exist and removes them from the database if they don't.
|
||||
#
|
||||
# this is mostly useful after part of a backup has been (intentionally
|
||||
# or accidentally) deleted.
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
use Simba::CA;
|
||||
|
||||
my $prefix_re = $ARGV[0];
|
||||
|
||||
unless ($prefix_re) {
|
||||
print STDERR "Usage: $0 prefix_re\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
my $ca = Simba::CA->new({
|
||||
dbi_file => $ENV{SIMBA_DB_CONN} || "$ENV{HOME}/.dbi/simba",
|
||||
});
|
||||
|
||||
my $dbh = $ca->{dbh};
|
||||
|
||||
my $sessions
|
||||
= $dbh->selectall_arrayref(
|
||||
q{select * from sessions},
|
||||
{ Slice => {} }
|
||||
);
|
||||
$sessions = [ grep { $_->{prefix} =~ m/$prefix_re/ } @$sessions ];
|
||||
|
||||
for my $session (@$sessions) {
|
||||
my $instances
|
||||
= $dbh->selectall_arrayref(
|
||||
q{select i.id, f.path
|
||||
from instances i, files f
|
||||
where i.session=? and i.file=f.id
|
||||
},
|
||||
{ Slice => {} },
|
||||
$session->{id}
|
||||
);
|
||||
|
||||
for my $instance (@$instances) {
|
||||
my $backup_path = $session->{prefix} . '/' . $instance->{path};
|
||||
print "$backup_path\n";
|
||||
if (!lstat($backup_path)) {
|
||||
if ($!{ENOENT}) {
|
||||
# file doesn't exist, delete it
|
||||
$dbh->do(q{delete from instances where id=?}, {}, $instance->{id});
|
||||
print "\tdeleted\n";
|
||||
} else {
|
||||
die "unexpected error on $backup_path: $!";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# remove orphaned records:
|
||||
my $sessions
|
||||
= $dbh->selectcol_arrayref(
|
||||
q{select s.id from instances i right outer join sessions s on i.session=s.id where i.id is null}
|
||||
);
|
||||
|
||||
for my $session (@$sessions) {
|
||||
$dbh->do(q{delete from sessions where id=?}, {}, $session);
|
||||
print "session $session deleted\n";
|
||||
}
|
||||
|
||||
my $files
|
||||
= $dbh->selectcol_arrayref(
|
||||
q{select f.id from instances i right outer join files f on i.file=f.id where i.id is null}
|
||||
);
|
||||
|
||||
for my $file (@$files) {
|
||||
$dbh->do(q{delete from files where id=?}, {}, $file);
|
||||
print "file $file deleted\n";
|
||||
}
|
||||
|
||||
my $versions
|
||||
= $dbh->selectcol_arrayref(
|
||||
q{select v.id from instances i right outer join versions2 v on i.version=v.id where i.id is null}
|
||||
);
|
||||
|
||||
for my $version (@$versions) {
|
||||
$dbh->do(q{delete from versions2 where id=?}, {}, $version);
|
||||
print "version $version deleted\n";
|
||||
}
|
||||
|
Loading…
Reference in New Issue