diff options
| author | Matthew Sackman <matthew@lshift.net> | 2009-10-29 13:00:09 +0000 |
|---|---|---|
| committer | Matthew Sackman <matthew@lshift.net> | 2009-10-29 13:00:09 +0000 |
| commit | ef9ca08092dba4e038ff44d9ccda79b093446ab2 (patch) | |
| tree | b1cfaea8f28c68c66e87d6699dc9130f4136d804 | |
| parent | e13ef6f44f474a22861ce27fac356323b93daaa5 (diff) | |
| download | rabbitmq-server-git-ef9ca08092dba4e038ff44d9ccda79b093446ab2.tar.gz | |
On application:stop, if we're not clustered, walk through all the ram tables, and clear them. This has been tested by declaring durable and non durable queues and checking that they disappear on application:stop from rabbit_queue table. The durable queue does correctly still restart on subsequent application:start
| -rw-r--r-- | src/rabbit.erl | 1 | ||||
| -rw-r--r-- | src/rabbit_mnesia.erl | 24 |
2 files changed, 24 insertions, 1 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl index 092ca3c99c..1db85f4e4b 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -210,6 +210,7 @@ start(normal, []) -> stop(_State) -> terminated_ok = error_logger:delete_report_handler(rabbit_error_logger), ok = rabbit_alarm:stop(), + ok = rabbit_mnesia:maybe_empty_ram_only_tables(), ok. %--------------------------------------------------------------------------- diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index c4d5aac684..03054ecee4 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -32,7 +32,7 @@ -module(rabbit_mnesia). -export([ensure_mnesia_dir/0, dir/0, status/0, init/0, is_db_empty/0, - cluster/1, reset/0, force_reset/0]). + cluster/1, reset/0, force_reset/0, maybe_empty_ram_only_tables/0]). -export([table_names/0]). @@ -54,6 +54,7 @@ -spec(cluster/1 :: ([erlang_node()]) -> 'ok'). -spec(reset/0 :: () -> 'ok'). -spec(force_reset/0 :: () -> 'ok'). +-spec(maybe_empty_ram_only_tables/0 :: () -> 'ok'). -spec(create_tables/0 :: () -> 'ok'). -endif. @@ -98,6 +99,12 @@ cluster(ClusterNodes) -> reset() -> reset(false). force_reset() -> reset(true). +maybe_empty_ram_only_tables() -> + case is_clustered() of + true -> ok; + false -> empty_ram_only_tables() + end. + %%-------------------------------------------------------------------- table_definitions() -> @@ -433,3 +440,18 @@ leave_cluster(Nodes, RunningNodes) -> false -> throw({error, {no_running_cluster_nodes, Nodes, RunningNodes}}) end. + +is_clustered() -> + RunningNodes = mnesia:system_info(running_db_nodes), + [node()] /= RunningNodes andalso [] /= RunningNodes. + +empty_ram_only_tables() -> + Node = node(), + lists:foreach( + fun (TabName) -> + case lists:member(Node, mnesia:table_info(TabName, ram_copies)) of + true -> {atomic, ok} = mnesia:clear_table(TabName); + false -> ok + end + end, table_names()), + ok. |
