marsadm: prefer 'fetch' over 'connect'

This commit is contained in:
Thomas Schoebel-Theuer 2014-02-22 21:06:34 +01:00
parent 084e56bc96
commit 15a9d20fff

View File

@ -264,8 +264,8 @@ sub wait_cond {
( (
"attach" => "attach", "attach" => "attach",
"attached" => "attach", "attached" => "attach",
"fetch" => "connect", "fetch" => "fetch",
"connect" => "connect", "connect" => "fetch",
"replay" => "replay", "replay" => "replay",
"sync" => "sync", "sync" => "sync",
); );
@ -441,6 +441,7 @@ sub check_primary_gone {
sub check_todo { sub check_todo {
my ($cmd, $res, $key, $val, $wait, $unchecked, $inv) = @_; my ($cmd, $res, $key, $val, $wait, $unchecked, $inv) = @_;
$key =~ s/fetch/connect/;
my $path = "$mars/resource-$res/todo-$host/$key"; my $path = "$mars/resource-$res/todo-$host/$key";
$path = correct_path($path); $path = correct_path($path);
my $link; my $link;
@ -1617,20 +1618,20 @@ sub attach_res_phase2 {
} }
} }
sub connect_global_res { sub fetch_global_res {
my ($cmd, $res) = @_; my ($cmd, $res) = @_;
my $disconnect = ($cmd =~ m/disconnect/); my $pause = ($cmd =~ m/disconnect|pause/);
my @paths = glob("$mars/resource-$res/todo-*/"); my @paths = glob("$mars/resource-$res/todo-*/");
for my $path (@paths) { for my $path (@paths) {
_switch($cmd, $res, "$path/connect", !$disconnect); _switch($cmd, $res, "$path/connect", !$pause);
} }
} }
sub connect_local_res { sub fetch_local_res {
my ($cmd, $res) = @_; my ($cmd, $res) = @_;
my $disconnect = ($cmd =~ m/disconnect/); my $pause = ($cmd =~ m/disconnect|pause/);
my $path = "$mars/resource-$res/todo-$host/connect"; my $path = "$mars/resource-$res/todo-$host/connect";
_switch($cmd, $res, $path, !$disconnect); _switch($cmd, $res, $path, !$pause);
} }
sub pause_sync_global_res { sub pause_sync_global_res {
@ -1681,11 +1682,11 @@ sub up_res_phase1 {
if ($down) { if ($down) {
pause_replay_local_res("pause-replay-local", $res); pause_replay_local_res("pause-replay-local", $res);
pause_sync_local_res("pause-sync-local", $res); pause_sync_local_res("pause-sync-local", $res);
connect_local_res("disconnect", $res); fetch_local_res("pause-fetch", $res);
attach_res_phase1("detach", $res); attach_res_phase1("detach", $res);
} else { } else {
attach_res_phase1("attach", $res); attach_res_phase1("attach", $res);
connect_local_res("connect", $res); fetch_local_res("resume-fetch-local", $res);
pause_sync_local_res("resume-sync-local", $res); pause_sync_local_res("resume-sync-local", $res);
pause_replay_local_res("resume-replay-local", $res); pause_replay_local_res("resume-replay-local", $res);
} }
@ -1743,8 +1744,8 @@ sub primary_phase0 {
my ($cmd, $res) = @_; my ($cmd, $res) = @_;
ldie "cannot switch primary: mars kernel module is not loaded\n" unless ($cmd eq "secondary" || -d "/proc/sys/mars"); ldie "cannot switch primary: mars kernel module is not loaded\n" unless ($cmd eq "secondary" || -d "/proc/sys/mars");
if ($force) { if ($force) {
lwarn "You can do a '$cmd --force' only in DISCONNECTED state.\n"; lwarn "You can do a '$cmd --force' only in PAUSE-FETCH / DISCONNECTED state.\n";
check_todo($cmd, $res, "connect", 0, 0); check_todo($cmd, $res, "fetch", 0, 0);
} }
my $old = _get_designated_primary($res); my $old = _get_designated_primary($res);
if ($cmd eq "primary") { if ($cmd eq "primary") {
@ -1756,7 +1757,7 @@ sub primary_phase0 {
check_sync_finished($res, $peer); check_sync_finished($res, $peer);
} }
check_todo($cmd, $res, "attach", 1, 0); check_todo($cmd, $res, "attach", 1, 0);
check_todo($cmd, $res, "connect", 1, 0) if !$force; check_todo($cmd, $res, "fetch", 1, 0) if !$force;
check_todo($cmd, $res, "replay", 1, 0); check_todo($cmd, $res, "replay", 1, 0);
} }
return if ($old eq $host and $cmd eq "primary"); return if ($old eq $host and $cmd eq "primary");
@ -2123,12 +2124,21 @@ my %cmd_table =
"switch state", \&attach_res_phase1, "switch state", \&attach_res_phase1,
"wait for effect", \&attach_res_phase2, "wait for effect", \&attach_res_phase2,
], ],
"connect-local" => \&connect_local_res,
"connect-global" => \&connect_global_res, "resume-fetch-local" => \&fetch_local_res,
"connect" => \&connect_local_res, "resume-fetch-global" => \&fetch_global_res,
"disconnect-local" => \&connect_local_res, "resume-fetch" => \&fetch_local_res,
"disconnect-global" => \&connect_global_res, "pause-fetch-local" => \&fetch_local_res,
"disconnect" => \&connect_local_res, "pause-fetch-global" => \&fetch_global_res,
"pause-fetch" => \&fetch_local_res,
"connect-local" => \&fetch_local_res,
"connect-global" => \&fetch_global_res,
"connect" => \&fetch_local_res,
"disconnect-local" => \&fetch_local_res,
"disconnect-global" => \&fetch_global_res,
"disconnect" => \&fetch_local_res,
"syncer" => \&ignore_cmd, "syncer" => \&ignore_cmd,
"up" => [ "up" => [
"check preconditions", \&up_res_phase0, "check preconditions", \&up_res_phase0,