summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <michael@clojurewerkz.org>2020-05-19 03:50:17 +0300
committerMichael Klishin <michael@clojurewerkz.org>2020-07-14 03:50:29 +0300
commit244bc0a438969e306768c959b508b14732cfe144 (patch)
tree9f8ea370df8ef73bf1e79c8a6baf0ad778ab1683
parent029ea3ef508c2838be9f7b63fa95d5719640658f (diff)
downloadrabbitmq-server-git-244bc0a438969e306768c959b508b14732cfe144.tar.gz
Introduce rabbit_maintenance:{suspend,resume}_all_client_listeners/2
References #2321
-rw-r--r--src/rabbit_maintenance.erl39
1 files changed, 33 insertions, 6 deletions
diff --git a/src/rabbit_maintenance.erl b/src/rabbit_maintenance.erl
index a40d0792d9..023985b7b0 100644
--- a/src/rabbit_maintenance.erl
+++ b/src/rabbit_maintenance.erl
@@ -16,11 +16,13 @@
-module(rabbit_maintenance).
+ -include("rabbit.hrl").
+
-export([
mark_as_drained/0,
unmark_as_drained/0,
- pause_all_listeners/0,
- resume_all_listeners/0,
+ suspend_all_client_listeners/0,
+ resume_all_client_listeners/0,
close_all_client_connections/0]).
%%
@@ -33,11 +35,36 @@ mark_as_drained() ->
unmark_as_drained() ->
ok.
-pause_all_listeners() ->
- ok.
+-spec suspend_all_client_listeners() -> [rabbit_types:ok_or_error(any())].
+
+ %% Pauses all listeners on the current node except for
+ %% Erlang distribution (clustering and CLI tools).
+ %% A respausedumed listener will not accept any new client connections
+ %% but previously established connections won't be interrupted.
+suspend_all_client_listeners() ->
+ Listeners = rabbit_networking:node_client_listeners(node()),
+ lists:foldl(fun (#listener{node = Node, ip_address = Addr, port = Port}, Acc) when Node =:= node() ->
+ Result = ranch:suspend_listener(rabbit_networking:ranch_ref(Addr, Port)),
+ [Result | Acc];
+ (_, Acc) ->
+ Acc
+ end,
+ [], Listeners).
-resume_all_listeners() ->
- ok.
+ -spec resume_all_client_listeners() -> [rabbit_types:ok_or_error(any())].
+
+ %% Resumes all listeners on the current node except for
+ %% Erlang distribution (clustering and CLI tools).
+ %% A resumed listener will accept new client connections.
+resume_all_client_listeners() ->
+ Listeners = rabbit_networking:node_client_listeners(node()),
+ lists:foldl(fun (#listener{node = Node, ip_address = Addr, port = Port}, Acc) when Node =:= node() ->
+ Result = ranch:resume_listener(rabbit_networking:ranch_ref(Addr, Port)),
+ [Result | Acc];
+ (_, Acc) ->
+ Acc
+ end,
+ [], Listeners).
close_all_client_connections() ->
ok.