summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <michael@clojurewerkz.org>2020-05-19 11:24:13 +0300
committerMichael Klishin <michael@clojurewerkz.org>2020-07-14 03:50:29 +0300
commitc57b82a705dd38cfbf889f649807348e58140700 (patch)
treef2fee8028175f32dc5fcfd88daa5ee72fe7dfcf9
parent244bc0a438969e306768c959b508b14732cfe144 (diff)
downloadrabbitmq-server-git-c57b82a705dd38cfbf889f649807348e58140700.tar.gz
rabbit_maintenance: simplify return values of listener suspension functions
-rw-r--r--src/rabbit_maintenance.erl43
1 files changed, 27 insertions, 16 deletions
diff --git a/src/rabbit_maintenance.erl b/src/rabbit_maintenance.erl
index 023985b7b0..5d9f497d63 100644
--- a/src/rabbit_maintenance.erl
+++ b/src/rabbit_maintenance.erl
@@ -35,7 +35,7 @@ mark_as_drained() ->
unmark_as_drained() ->
ok.
--spec suspend_all_client_listeners() -> [rabbit_types:ok_or_error(any())].
+-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).
@@ -43,28 +43,39 @@ unmark_as_drained() ->
%% 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).
+ rabbit_log:info("Asked to suspend ~b client connection listeners. "
+ "No new client connections will be accepted until these listeners are resumed!", [length(Listeners)]),
+ Results = lists:foldl(local_listener_fold_fun(fun ranch:suspend_listener/1), [], Listeners),
+ lists:foldl(fun ok_or_first_error/2, ok, Results).
- -spec resume_all_client_listeners() -> [rabbit_types:ok_or_error(any())].
+ -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).
+ rabbit_log:info("Asked to resume ~b client connection listeners. "
+ "New client connections will be accepted from now on", [length(Listeners)]),
+ Results = lists:foldl(local_listener_fold_fun(fun ranch:resume_listener/1), [], Listeners),
+ lists:foldl(fun ok_or_first_error/2, ok, Results).
close_all_client_connections() ->
ok.
+
+%%
+%% Implementation
+%%
+
+local_listener_fold_fun(Fun) ->
+ fun(#listener{node = Node, ip_address = Addr, port = Port}, Acc) when Node =:= node() ->
+ RanchRef = rabbit_networking:ranch_ref(Addr, Port),
+ [Fun(RanchRef) | Acc];
+ (_, Acc) ->
+ Acc
+ end.
+
+ok_or_first_error(ok, Acc) ->
+ Acc;
+ok_or_first_error({error, _} = Err, _Acc) ->
+ Err.