diff options
| author | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2016-08-25 17:43:17 +0200 |
|---|---|---|
| committer | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2016-08-25 17:43:17 +0200 |
| commit | 2527a853a27595915edcb736dbe35cd56fb067a2 (patch) | |
| tree | 31e60386b481d1243eef91792397cbf641533f1c | |
| parent | 2994c427aae5b06179f32cfdf92b9a0e2bf510e2 (diff) | |
| download | rabbitmq-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.erl | 15 |
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() |
