diff options
author | Alexandru Scvortov <alexandru@rabbitmq.com> | 2011-07-20 17:46:05 +0100 |
---|---|---|
committer | Alexandru Scvortov <alexandru@rabbitmq.com> | 2011-07-20 17:46:05 +0100 |
commit | dd720bd4e5323917d3d1c487de459418c37026a4 (patch) | |
tree | 6ecd2446a8a7891b92131a8465691657c95a251a | |
parent | 287f643f8c443f4d019f5a14a09d1dbd94baa4e7 (diff) | |
download | rabbitmq-server-dd720bd4e5323917d3d1c487de459418c37026a4.tar.gz |
handle the starting/stopping returns from mnesia
-rw-r--r-- | src/rabbit_mnesia.erl | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index 56bd2bfa..3f5bc134 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -85,7 +85,9 @@ status() -> no -> case all_clustered_nodes() of [] -> []; Nodes -> [{unknown, Nodes}] - end + end; + Reason when Reason =:= starting; Reason =:= stopping -> + exit({rabbit_busy, try_again_later}) end}, {running_nodes, running_clustered_nodes()}]. @@ -316,13 +318,23 @@ ensure_mnesia_dir() -> ensure_mnesia_running() -> case mnesia:system_info(is_running) of yes -> ok; - no -> throw({error, mnesia_not_running}) + no -> throw({error, mnesia_not_running}); + Reason when Reason =:= starting; Reason =:= stopping -> + wait_and_try_again(ensure_mnesia_running, []) end. ensure_mnesia_not_running() -> case mnesia:system_info(is_running) of no -> ok; - yes -> throw({error, mnesia_unexpectedly_running}) + yes -> throw({error, mnesia_unexpectedly_running}); + Reason when Reason =:= starting; Reason =:= stopping -> + wait_and_try_again(ensure_mnesia_not_running, []) + end. + +wait_and_try_again(Fun, Args) -> + receive + after 1000 -> error_logger:info_msg("trying to ~p again~n", [Fun, Args]), + apply(Fun, Args) end. ensure_schema_integrity() -> @@ -603,9 +615,7 @@ new_backup_dir_name(MnesiaDir) -> Year, Month, Day, Hour, Minute, Second])), case filelib:is_file(BackupDir) of false -> BackupDir; - true -> receive - after 1000 -> new_backup_dir_name(MnesiaDir) - end + true -> wait_and_try_again(new_backup_dir_name, [MnesiaDir]) end. copy_db(Destination) -> @@ -743,3 +753,4 @@ leave_cluster(Nodes, RunningNodes) -> false -> throw({error, {no_running_cluster_nodes, Nodes, RunningNodes}}) end. + |