Skip to content

Commit

Permalink
rabbit_mnesia:forget_cluster_node/2: Skip event if node if offline
Browse files Browse the repository at this point in the history
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 rabbitmq#500.
[#116521809]
  • Loading branch information
dumbbell committed Aug 25, 2016
1 parent 2994c42 commit 2527a85
Showing 1 changed file with 11 additions and 4 deletions.
15 changes: 11 additions & 4 deletions src/rabbit_mnesia.erl
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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.
Expand All @@ -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()
Expand Down

0 comments on commit 2527a85

Please sign in to comment.