diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2013-09-03 12:47:13 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2013-09-03 12:47:13 +0100 |
commit | 5b3ef135f89fb3587f24039fd9498d6538ff6edc (patch) | |
tree | d8fcf83122127617c8046fbe27305e87038aa06e /src/rabbit_policy.erl | |
parent | 825c02bdc9a2cad849995e07177b3837ce7f944f (diff) | |
download | rabbitmq-server-5b3ef135f89fb3587f24039fd9498d6538ff6edc.tar.gz |
Reinstate optimisations, plus a bit of abstraction. This entails an API change in the return type of rabbit_policy:get/2.
Diffstat (limited to 'src/rabbit_policy.erl')
-rw-r--r-- | src/rabbit_policy.erl | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/rabbit_policy.erl b/src/rabbit_policy.erl index 0785d278..d371ac4d 100644 --- a/src/rabbit_policy.erl +++ b/src/rabbit_policy.erl @@ -26,7 +26,7 @@ -export([register/0]). -export([invalidate/0, recover/0]). --export([name/1, get/2, set/1]). +-export([name/1, get/2, get_arg/3, set/1]). -export([validate/4, notify/4, notify_clear/3]). -export([parse_set/6, set/6, delete/2, lookup/2, list/0, list/1, list_formatted/1, info_keys/0]). @@ -62,15 +62,25 @@ get(Name, #exchange{policy = Policy}) -> get0(Name, Policy); get(Name, EntityName = #resource{virtual_host = VHost}) -> get0(Name, match(EntityName, list(VHost))). -get0(_Name, undefined) -> {error, not_found}; +get0(_Name, undefined) -> undefined; get0(Name, List) -> case pget(definition, List) of - undefined -> {error, not_found}; - Policy -> case pget(Name, Policy) of - undefined -> {error, not_found}; - Value -> {ok, Value} - end + undefined -> undefined; + Policy -> pget(Name, Policy) end. +%% Many heads for optimisation +get_arg(_AName, _PName, #exchange{arguments = [], policy = undefined}) -> + undefined; +get_arg(_AName, PName, X = #exchange{arguments = []}) -> + get(PName, X); +get_arg(AName, _PName, #exchange{arguments = Args, policy = undefined}) -> + rabbit_misc:table_lookup(Args, AName); +get_arg(AName, PName, X = #exchange{arguments = Args}) -> + case rabbit_misc:table_lookup(Args, AName) of + undefined -> get(PName, X); + Arg -> Arg + end. + %%---------------------------------------------------------------------------- %% Gets called during upgrades - therefore must not assume anything about the |