summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
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.