summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2016-08-25 17:43:17 +0200
committerJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2016-08-25 17:43:17 +0200
commit2527a853a27595915edcb736dbe35cd56fb067a2 (patch)
tree31e60386b481d1243eef91792397cbf641533f1c
parent2994c427aae5b06179f32cfdf92b9a0e2bf510e2 (diff)
downloadrabbitmq-server-git-2527a853a27595915edcb736dbe35cd56fb067a2.tar.gz
rabbit_mnesia:forget_cluster_node/2: Skip event if node if offline
When the node is offline (`--offline` is set on the command line), we must skip the emission of the `node_deleted` event because the rabbit_event event handler is not setup (RabbitMQ is stopped). Otherwise, the command fails with `badarg` in gen_event. References #500. [#116521809]
-rw-r--r--src/rabbit_mnesia.erl15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index a1cfe0948f..ef4ab674fd 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -297,6 +297,9 @@ update_cluster_nodes(DiscoveryNode) ->
%% the last or second to last after the node we're removing to go
%% down
forget_cluster_node(Node, RemoveWhenOffline) ->
+ forget_cluster_node(Node, RemoveWhenOffline, true).
+
+forget_cluster_node(Node, RemoveWhenOffline, EmitNodeDeletedEvent) ->
case lists:member(Node, cluster_nodes(all)) of
true -> ok;
false -> e(not_a_cluster_node)
@@ -308,9 +311,10 @@ forget_cluster_node(Node, RemoveWhenOffline) ->
{false, true} -> rabbit_log:info(
"Removing node ~p from cluster~n", [Node]),
case remove_node_if_mnesia_running(Node) of
- ok ->
- rabbit_event:notify(node_deleted, [{node, Node}]),
- ok;
+ ok when EmitNodeDeletedEvent ->
+ rabbit_event:notify(node_deleted, [{node, Node}]),
+ ok;
+ ok -> ok;
{error, _} = Err -> throw(Err)
end
end.
@@ -330,7 +334,10 @@ remove_node_offline_node(Node) ->
%% they are loaded.
rabbit_table:force_load(),
rabbit_table:wait_for_replicated(),
- forget_cluster_node(Node, false),
+ %% We skip the 'node_deleted' event because the
+ %% application is stopped and thus, rabbit_event is not
+ %% enabled.
+ forget_cluster_node(Node, false, false),
force_load_next_boot()
after
stop_mnesia()