diff options
| author | Michael Klishin <michael@clojurewerkz.org> | 2020-05-19 03:50:17 +0300 |
|---|---|---|
| committer | Michael Klishin <michael@clojurewerkz.org> | 2020-07-14 03:50:29 +0300 |
| commit | 244bc0a438969e306768c959b508b14732cfe144 (patch) | |
| tree | 9f8ea370df8ef73bf1e79c8a6baf0ad778ab1683 | |
| parent | 029ea3ef508c2838be9f7b63fa95d5719640658f (diff) | |
| download | rabbitmq-server-git-244bc0a438969e306768c959b508b14732cfe144.tar.gz | |
Introduce rabbit_maintenance:{suspend,resume}_all_client_listeners/2
References #2321
| -rw-r--r-- | src/rabbit_maintenance.erl | 39 |
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. |
