mirror of https://github.com/schoebel/mars
marsadm: fix resource destruction via 'delete-resource'
This commit is contained in:
parent
ff7d78a8cc
commit
7fa62145b5
|
@ -1162,6 +1162,29 @@ sub leave_res_phase2 {
|
||||||
log_purge_res(@_);
|
log_purge_res(@_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub delete_res {
|
||||||
|
my ($cmd, $res) = @_;
|
||||||
|
my $basedir = "$mars/resource-$res";
|
||||||
|
# preconditions
|
||||||
|
if (! -d $basedir) {
|
||||||
|
lprint "resource directory '' does no longer exist,\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
my @host_list = glob("$basedir/replay-*");
|
||||||
|
my $cnt = scalar(@host_list);
|
||||||
|
if ($cnt > 0) {
|
||||||
|
my $h_list = join(',', map({ $_ =~ s:.*/replay-::;} (@host_list)));
|
||||||
|
ldie "resource '$res' is not empty: first remove the hosts '$h_list' via leave-resource\n" unless $force;
|
||||||
|
lwarn "BRUTE FORCE resource destruction: '$res' has $cnt members ($h_list) THESE ARE FINALLY TRASHED right now -- you are RESPONSIBLE for any subsequent problems.\n";
|
||||||
|
}
|
||||||
|
for my $path (`find $basedir | sort -r`) {
|
||||||
|
chomp $path;
|
||||||
|
_create_delete($path);
|
||||||
|
}
|
||||||
|
finish_links();
|
||||||
|
_wait_delete();
|
||||||
|
}
|
||||||
|
|
||||||
sub logrotate_res {
|
sub logrotate_res {
|
||||||
my ($cmd, $res) = @_;
|
my ($cmd, $res) = @_;
|
||||||
check_primary(@_);
|
check_primary(@_);
|
||||||
|
@ -1761,6 +1784,7 @@ my %cmd_table =
|
||||||
"switch state", \&leave_res_phase1,
|
"switch state", \&leave_res_phase1,
|
||||||
"wait for deletions", \&leave_res_phase2,
|
"wait for deletions", \&leave_res_phase2,
|
||||||
],
|
],
|
||||||
|
"delete-resource" => \&delete_res,
|
||||||
"log-rotate" => \&logrotate_res,
|
"log-rotate" => \&logrotate_res,
|
||||||
"log-delete" => \&logdelete_res,
|
"log-delete" => \&logdelete_res,
|
||||||
"log-delete-all" => \&logdelete_res,
|
"log-delete-all" => \&logdelete_res,
|
||||||
|
@ -1925,7 +1949,7 @@ sub do_one_res {
|
||||||
my ($cmd, $res) = @_;
|
my ($cmd, $res) = @_;
|
||||||
if (!$checked_res{"$cmd$res"}) {
|
if (!$checked_res{"$cmd$res"}) {
|
||||||
$res = check_res($res) unless $cmd =~ m/^(join|create|leave|wait)-cluster|create-resource|show|cat|[a-z]+-file|set-link$/;
|
$res = check_res($res) unless $cmd =~ m/^(join|create|leave|wait)-cluster|create-resource|show|cat|[a-z]+-file|set-link$/;
|
||||||
check_res_member($res) unless $cmd =~ m/^(join|create)-(cluster|resource)|(leave|wait)-cluster|show|cat|[a-z]+-file|set-link$/;
|
check_res_member($res) unless $cmd =~ m/^(join|create|delete)-(cluster|resource)|(leave|wait)-cluster|show|cat|[a-z]+-file|set-link$/;
|
||||||
detect_splitbrain($res, 1);
|
detect_splitbrain($res, 1);
|
||||||
$checked_res{"$cmd$res"} = 1;
|
$checked_res{"$cmd$res"} = 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue