diff options
| author | Michael Klishin <michael@clojurewerkz.org> | 2016-01-10 01:40:19 +0300 |
|---|---|---|
| committer | Michael Klishin <michael@clojurewerkz.org> | 2016-01-10 01:40:19 +0300 |
| commit | 630beb3a5cad8741ac0707219f7338133efe22a8 (patch) | |
| tree | 7c89db713c56c2e10e323524c1de1c11e5fba64b /src | |
| parent | 7b864ffa829137cd2c587fbcbc0bc0155425d642 (diff) | |
| download | rabbitmq-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.erl | 6 | ||||
| -rw-r--r-- | src/rabbit_exchange_parameters.erl | 16 | ||||
| -rw-r--r-- | src/rabbit_runtime_parameters.erl | 13 |
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 |
