summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Klishin <michael@clojurewerkz.org>2016-01-10 01:40:19 +0300
committerMichael Klishin <michael@clojurewerkz.org>2016-01-10 01:40:19 +0300
commit630beb3a5cad8741ac0707219f7338133efe22a8 (patch)
tree7c89db713c56c2e10e323524c1de1c11e5fba64b /src
parent7b864ffa829137cd2c587fbcbc0bc0155425d642 (diff)
downloadrabbitmq-server-git-630beb3a5cad8741ac0707219f7338133efe22a8.tar.gz
Clear temporary runtime exchange parameters on boot
This makes sure that values that were set right before node failure or restart are not retained.
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_exchange.erl6
-rw-r--r--src/rabbit_exchange_parameters.erl16
-rw-r--r--src/rabbit_runtime_parameters.erl13
3 files changed, 27 insertions, 8 deletions
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl
index eec6986552..2e9afbfd2e 100644
--- a/src/rabbit_exchange.erl
+++ b/src/rabbit_exchange.erl
@@ -171,7 +171,7 @@ declare(XName, Type, Durable, AutoDelete, Internal, Args) ->
%%
%% See rabbitmq/rabbitmq-federation#7.
case rabbit_runtime_parameters:lookup(XName#resource.virtual_host,
- <<"exchange-delete-in-progress">>,
+ ?EXCHANGE_DELETE_IN_PROGRESS_COMPONENT,
XName#resource.name) of
not_found ->
rabbit_misc:execute_mnesia_transaction(
@@ -446,7 +446,7 @@ delete(XName, IfUnused) ->
%%
%% see rabbitmq/rabbitmq-federation#7
rabbit_runtime_parameters:set(XName#resource.virtual_host,
- <<"exchange-delete-in-progress">>,
+ ?EXCHANGE_DELETE_IN_PROGRESS_COMPONENT,
XName#resource.name, true, none),
call_with_exchange(
XName,
@@ -462,7 +462,7 @@ delete(XName, IfUnused) ->
end)
after
rabbit_runtime_parameters:clear(XName#resource.virtual_host,
- <<"exchange-delete-in-progress">>,
+ ?EXCHANGE_DELETE_IN_PROGRESS_COMPONENT,
XName#resource.name)
end.
diff --git a/src/rabbit_exchange_parameters.erl b/src/rabbit_exchange_parameters.erl
index 4fa7a283a6..c0ca0a985b 100644
--- a/src/rabbit_exchange_parameters.erl
+++ b/src/rabbit_exchange_parameters.erl
@@ -18,9 +18,13 @@
-behaviour(rabbit_runtime_parameter).
+-include("rabbit.hrl").
+
-export([register/0]).
-export([validate/5, notify/4, notify_clear/3]).
+-import(rabbit_misc, [pget/2]).
+
-rabbit_boot_step({?MODULE,
[{description, "exchange parameters"},
{mfa, {rabbit_exchange_parameters, register, []}},
@@ -29,13 +33,17 @@
register() ->
rabbit_registry:register(runtime_parameter,
- <<"exchange-delete-in-progress">>, ?MODULE).
+ ?EXCHANGE_DELETE_IN_PROGRESS_COMPONENT, ?MODULE),
+ %% ensure there are no leftovers from before node restart/crash
+ rabbit_runtime_parameters:clear_component(
+ ?EXCHANGE_DELETE_IN_PROGRESS_COMPONENT),
+ ok.
-validate(_VHost, <<"exchange-delete-in-progress">>, _Name, _Term, _User) ->
+validate(_VHost, ?EXCHANGE_DELETE_IN_PROGRESS_COMPONENT, _Name, _Term, _User) ->
ok.
-notify(_VHost, <<"exchange-delete-in-progress">>, _Name, _Term) ->
+notify(_VHost, ?EXCHANGE_DELETE_IN_PROGRESS_COMPONENT, _Name, _Term) ->
ok.
-notify_clear(_VHost, <<"exchange-delete-in-progress">>, _Name) ->
+notify_clear(_VHost, ?EXCHANGE_DELETE_IN_PROGRESS_COMPONENT, _Name) ->
ok.
diff --git a/src/rabbit_runtime_parameters.erl b/src/rabbit_runtime_parameters.erl
index a9e401ed28..ba1a830df1 100644
--- a/src/rabbit_runtime_parameters.erl
+++ b/src/rabbit_runtime_parameters.erl
@@ -51,7 +51,7 @@
-export([parse_set/5, set/5, set_any/5, clear/3, clear_any/3, list/0, list/1,
list_component/1, list/2, list_formatted/1, list_formatted/3,
- lookup/3, value/3, value/4, info_keys/0]).
+ lookup/3, value/3, value/4, info_keys/0, clear_component/1]).
-export([set_global/2, value_global/1, value_global/2]).
@@ -171,6 +171,17 @@ clear(_, <<"policy">> , _) ->
clear(VHost, Component, Name) ->
clear_any(VHost, Component, Name).
+clear_component(Component) ->
+ case rabbit_runtime_parameters:list_component(Component) of
+ [] ->
+ ok;
+ Xs ->
+ [rabbit_runtime_parameters:clear(pget(vhost, X),
+ pget(component, X),
+ pget(name, X))|| X <- Xs],
+ ok
+ end.
+
clear_any(VHost, Component, Name) ->
Notify = fun () ->
case lookup_component(Component) of