summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2015-03-09 12:55:44 +0100
committerJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2015-03-09 13:09:50 +0100
commite759f8fbe39f4d8a2156925745d987cdcaf7feb7 (patch)
treee9daf90f3d5613fc2c2d595b13733282ce783ac5
parentd538f7d95646a7a9527c9f05ee274768a758a266 (diff)
downloadrabbitmq-server-git-e759f8fbe39f4d8a2156925745d987cdcaf7feb7.tar.gz
rabbit_networking: In on_node_down(), don't remove listeners if node is back
If the node is already back in the cluster at the time rabbit_networking:on_node_down() is called don't remove the specified node's listeners. Otherwise, we would loose the record from the entire cluster, creating an inconsistency between the running listeners and the recorded ones.
-rw-r--r--src/rabbit_networking.erl6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/rabbit_networking.erl b/src/rabbit_networking.erl
index 1a2883748f..f5deaef388 100644
--- a/src/rabbit_networking.erl
+++ b/src/rabbit_networking.erl
@@ -394,7 +394,11 @@ node_listeners(Node) ->
mnesia:dirty_read(rabbit_listener, Node).
on_node_down(Node) ->
- ok = mnesia:dirty_delete(rabbit_listener, Node).
+ case lists:member(Node, nodes()) of
+ false -> ok = mnesia:dirty_delete(rabbit_listener, Node);
+ true -> rabbit_log:info(
+ "Keep ~s listeners: the node is already back~n", [Node])
+ end.
start_client(Sock, SockTransform) ->
{ok, _Child, Reader} = supervisor:start_child(rabbit_tcp_client_sup, []),