summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Klishin <michael@clojurewerkz.org>2020-07-08 19:10:55 +0300
committerMichael Klishin <michael@clojurewerkz.org>2020-07-14 03:50:32 +0300
commit1a91b7c38bd12001b38c4ec66202f10546de1988 (patch)
tree0ab77ace95a876bea16c2249a767e20669ab985b /src
parentbcc6fc87c98ba0f79db8546c110d641193d1d753 (diff)
downloadrabbitmq-server-git-1a91b7c38bd12001b38c4ec66202f10546de1988.tar.gz
Make sure MQTT plugin closes its connections when a node is put into maintenance mode
Part of rabbitmq/rabbitmq-server#2321
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_maintenance.erl12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/rabbit_maintenance.erl b/src/rabbit_maintenance.erl
index 390a32d998..81eef9eb32 100644
--- a/src/rabbit_maintenance.erl
+++ b/src/rabbit_maintenance.erl
@@ -51,6 +51,10 @@ drain() ->
suspend_all_client_listeners(),
rabbit_log:alert("Suspended all listeners and will no longer accept client connections"),
{ok, NConnections} = close_all_client_connections(),
+ %% allow plugins to react e.g. by closing their protocol connections
+ rabbit_event:notify(maintenance_connections_closed, #{
+ reason => <<"node is being put into maintenance">>
+ }),
rabbit_log:alert("Closed ~b local client connections", [NConnections]),
TransferCandidates = primary_replica_transfer_candidate_nodes(),
@@ -59,6 +63,11 @@ drain() ->
[length(TransferCandidates), ReadableCandidates]),
transfer_leadership_of_classic_mirrored_queues(TransferCandidates),
transfer_leadership_of_quorum_queues(TransferCandidates),
+
+ %% allow plugins to react
+ rabbit_event:notify(maintenance_draining, #{
+ reason => <<"node is being put into maintenance">>
+ }),
rabbit_log:alert("Node is ready to be shut down for maintenance or upgrade"),
ok.
@@ -73,6 +82,9 @@ revive() ->
unmark_as_being_drained(),
rabbit_log:info("Marked this node as back from maintenance and ready to serve clients"),
+ %% allow plugins to react
+ rabbit_event:notify(maintenance_revived, #{}),
+
ok.
-spec mark_as_being_drained() -> boolean().