summaryrefslogtreecommitdiff
path: root/src
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 /src
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.
Diffstat (limited to 'src')
-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, []),