summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2012-10-16 17:00:12 +0100
committerSimon MacMullen <simon@rabbitmq.com>2012-10-16 17:00:12 +0100
commit4a11eab72b23b0a1ffdd8834db7bd98b2a44de83 (patch)
treefda711e5b5253c6c4edcb532d9aeffa7307b3ce7
parent5e5e7c66d2a2bace209461dc60c3d2a95cba8083 (diff)
downloadrabbitmq-server-4a11eab72b23b0a1ffdd8834db7bd98b2a44de83.tar.gz
Define rabbit_policy entirely in terms of parameters, don't go mucking about in mnesia.
-rw-r--r--src/rabbit_policy.erl34
-rw-r--r--src/rabbit_runtime_parameters.erl3
2 files changed, 18 insertions, 19 deletions
diff --git a/src/rabbit_policy.erl b/src/rabbit_policy.erl
index e8c1548a..5e9f10a8 100644
--- a/src/rabbit_policy.erl
+++ b/src/rabbit_policy.erl
@@ -30,8 +30,6 @@
-export([parse_set/5, set/5, delete/2, lookup/2, list/0, list/1,
list_formatted/1, info_keys/0]).
--define(TABLE, rabbit_runtime_parameters).
-
-rabbit_boot_step({?MODULE,
[{description, "policy parameters"},
{mfa, {rabbit_policy, register, []}},
@@ -82,15 +80,16 @@ parse_set(VHost, Key, Pattern, Definition, Priority) ->
parse_set0(VHost, Key, Pattern, Defn, Priority) ->
case rabbit_misc:json_decode(Defn) of
{ok, JSON} ->
- set0(VHost, Key, [{<<"pattern">>, list_to_binary(Pattern)},
- {<<"policy">>, rabbit_misc:json_to_term(JSON)}] ++
+ set0(VHost, Key,
+ [{<<"pattern">>, list_to_binary(Pattern)},
+ {<<"definition">>, rabbit_misc:json_to_term(JSON)}] ++
Priority);
error ->
{error_string, "JSON decoding error"}
end.
set(VHost, Key, Pattern, Definition, Priority) ->
- PolicyProps = [{<<"pattern">>, Pattern}, {<<"policy">>, Definition}],
+ PolicyProps = [{<<"pattern">>, Pattern}, {<<"definition">>, Definition}],
set0(VHost, Key, case Priority of
undefined -> [];
_ -> [{<<"priority">>, Priority}]
@@ -103,9 +102,9 @@ delete(VHost, Key) ->
rabbit_runtime_parameters:clear_any(VHost, <<"policy">>, Key).
lookup(VHost, Key) ->
- case mnesia:dirty_read(?TABLE, {VHost, <<"policy">>, Key}) of
- [] -> not_found;
- [P] -> p(P, fun ident/1)
+ case rabbit_runtime_parameters:lookup(VHost, <<"policy">>, Key) of
+ not_found -> not_found;
+ P -> p(P, fun ident/1)
end.
list() ->
@@ -118,19 +117,18 @@ list_formatted(VHost) ->
order_policies(list0(VHost, fun format/1)).
list0(VHost, DefnFun) ->
- Match = #runtime_parameters{key = {VHost, <<"policy">>, '_'}, _ = '_'},
- [p(P, DefnFun) || P <- mnesia:dirty_match_object(?TABLE, Match)].
+ [p(P, DefnFun) || P <- rabbit_runtime_parameters:list(VHost, <<"policy">>)].
order_policies(PropList) ->
lists:sort(fun (A, B) -> pget(priority, A, 0) < pget(priority, B, 0) end,
PropList).
-p(#runtime_parameters{key = {VHost, <<"policy">>, Key}, value = Value},
- DefnFun) ->
- [{vhost, VHost},
- {key, Key},
+p(Parameter, DefnFun) ->
+ Value = pget(value, Parameter),
+ [{vhost, pget(vhost, Parameter)},
+ {key, pget(key, Parameter)},
{pattern, pget(<<"pattern">>, Value)},
- {definition, DefnFun(pget(<<"policy">>, Value))}] ++
+ {definition, DefnFun(pget(<<"definition">>, Value))}] ++
case pget(<<"priority">>, Value) of
undefined -> [];
Priority -> [{priority, Priority}]
@@ -211,9 +209,9 @@ sort_pred(A, B) -> pget(priority, A, 0) >= pget(priority, B, 0).
%%----------------------------------------------------------------------------
policy_validation() ->
- [{<<"priority">>, fun rabbit_parameter_validation:number/2, optional},
- {<<"pattern">>, fun rabbit_parameter_validation:regex/2, mandatory},
- {<<"policy">>, fun validation/2, mandatory}].
+ [{<<"priority">>, fun rabbit_parameter_validation:number/2, optional},
+ {<<"pattern">>, fun rabbit_parameter_validation:regex/2, mandatory},
+ {<<"definition">>, fun validation/2, mandatory}].
validation(_Name, []) ->
{error, "no policy provided", []};
diff --git a/src/rabbit_runtime_parameters.erl b/src/rabbit_runtime_parameters.erl
index e66cb749..3ee93fa1 100644
--- a/src/rabbit_runtime_parameters.erl
+++ b/src/rabbit_runtime_parameters.erl
@@ -155,7 +155,8 @@ list(VHost, Component, Default) ->
_ = '_'},
[p(P) || #runtime_parameters{ key = {_VHost, Comp, _Key}} = P <-
mnesia:dirty_match_object(?TABLE, Match),
- Comp /= <<"policy">>];
+ Comp =/= <<"policy">> orelse
+ Component =:= <<"policy">>];
_ -> Default
end.