summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFrancesco Mazzoli <francesco@rabbitmq.com>2012-05-09 17:46:43 +0100
committerFrancesco Mazzoli <francesco@rabbitmq.com>2012-05-09 17:46:43 +0100
commitf01e52c4573fcf86ca57d0c38af26c386db869f3 (patch)
tree96692836b21b36ba08dc794de00d4f3bc5aea348 /src
parent46ba4d4f986b325625d6b1853fe9eb046fe52a52 (diff)
downloadrabbitmq-server-git-f01e52c4573fcf86ca57d0c38af26c386db869f3.tar.gz
dumping schema table on changes in ram nodes
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_mnesia.erl19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index a120b9a33c..08e91e27b6 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -97,6 +97,7 @@ status() ->
init() ->
ensure_mnesia_running(),
ensure_mnesia_dir(),
+ monitor_schema(),
Nodes = read_cluster_nodes_config(),
ok = init_db(Nodes, should_be_disc_node(Nodes)),
%% We intuitively expect the global name server to be synced when
@@ -830,3 +831,21 @@ start_mnesia() ->
stop_mnesia() ->
stopped = mnesia:stop(),
ensure_mnesia_not_running().
+
+handle_schema_events() ->
+ receive
+ {mnesia_table_event, _Event} ->
+ case is_disc_node() of
+ true -> ok;
+ false -> mnesia:dump_tables([schema])
+ end,
+ handle_schema_events();
+ _ ->
+ exit(non_event)
+ end.
+
+monitor_schema() ->
+ spawn(fun () -> mnesia:subscribe({table, schema, simple}),
+ handle_schema_events()
+ end),
+ ok.