diff options
| author | Michael Klishin <michael@novemberain.com> | 2018-07-25 05:08:06 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-07-25 05:08:06 +0300 |
| commit | 08c6675a979856d2444a249079268d1f494e7748 (patch) | |
| tree | 694ccb0d9731845107f3e8714dc4ff519a519da7 | |
| parent | 4da1431d27336f31d5f04c23c8326680e6d25d5c (diff) | |
| parent | 051f7f3a8a31c8178630e0b10b950b82c4ac094c (diff) | |
| download | rabbitmq-server-git-08c6675a979856d2444a249079268d1f494e7748.tar.gz | |
Merge pull request #1650 from rabbitmq/binding-global-recover
Prepare semi-durable binding table once instead of each time a virtual host is recovered
| -rw-r--r-- | src/rabbit_binding.erl | 24 | ||||
| -rw-r--r-- | src/rabbit_vhost.erl | 4 |
2 files changed, 18 insertions, 10 deletions
diff --git a/src/rabbit_binding.erl b/src/rabbit_binding.erl index 090e30b2b4..a6907b8ce6 100644 --- a/src/rabbit_binding.erl +++ b/src/rabbit_binding.erl @@ -17,7 +17,7 @@ -module(rabbit_binding). -include("rabbit.hrl"). --export([recover/2, exists/1, add/2, add/3, remove/1, remove/3, list/1]). +-export([recover/0, recover/2, exists/1, add/2, add/3, remove/1, remove/3, list/1]). -export([list_for_source/1, list_for_destination/1, list_for_source_and_destination/2]). -export([new_deletions/0, combine_deletions/2, add_deletion/3, @@ -102,16 +102,20 @@ routing_key, arguments, vhost]). -recover(XNames, QNames) -> +%% Global table recovery +recover() -> rabbit_misc:table_filter( - fun (Route) -> - mnesia:read({rabbit_semi_durable_route, Route}) =:= [] - end, - fun (Route, true) -> - ok = mnesia:write(rabbit_semi_durable_route, Route, write); - (_Route, false) -> - ok - end, rabbit_durable_route), + fun (Route) -> + mnesia:read({rabbit_semi_durable_route, Route}) =:= [] + end, + fun (Route, true) -> + ok = mnesia:write(rabbit_semi_durable_route, Route, write); + (_Route, false) -> + ok + end, rabbit_durable_route). + +%% Virtual host-specific recovery +recover(XNames, QNames) -> XNameSet = sets:from_list(XNames), QNameSet = sets:from_list(QNames), SelectSet = fun (#resource{kind = exchange}) -> XNameSet; diff --git a/src/rabbit_vhost.erl b/src/rabbit_vhost.erl index e97af7a757..fdcba35db2 100644 --- a/src/rabbit_vhost.erl +++ b/src/rabbit_vhost.erl @@ -52,6 +52,10 @@ recover() -> rabbit_amqqueue:on_node_down(node()), rabbit_amqqueue:warn_file_limit(), + + %% Prepare rabbit_semi_durable_route table + rabbit_binding:recover(), + %% rabbit_vhost_sup_sup will start the actual recovery. %% So recovery will be run every time a vhost supervisor is restarted. ok = rabbit_vhost_sup_sup:start(), |
