summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_policy.erl34
1 files changed, 17 insertions, 17 deletions
diff --git a/src/rabbit_policy.erl b/src/rabbit_policy.erl
index ff07bfa8ee..c718c743f9 100644
--- a/src/rabbit_policy.erl
+++ b/src/rabbit_policy.erl
@@ -43,7 +43,7 @@
-export([register/0]).
-export([invalidate/0, recover/0]).
--export([name/1, name_op/1, effective_definition/1, get/2, get_arg/3, set/1]).
+-export([name/1, name_op/1, effective_definition/1, merge_operator_definitions/2, get/2, get_arg/3, set/1]).
-export([validate/5, notify/5, notify_clear/4]).
-export([parse_set/7, set/7, delete/3, lookup/2, list/0, list/1,
list_formatted/1, list_formatted/3, info_keys/0]).
@@ -76,23 +76,23 @@ name0(Policy) -> pget(name, Policy).
effective_definition(Q) when ?is_amqqueue(Q) ->
Policy = amqqueue:get_policy(Q),
OpPolicy = amqqueue:get_operator_policy(Q),
- effective_definition0(Policy, OpPolicy);
+ merge_operator_definitions(Policy, OpPolicy);
effective_definition(#exchange{policy = Policy, operator_policy = OpPolicy}) ->
- effective_definition0(Policy, OpPolicy).
-
-effective_definition0(undefined, undefined) -> undefined;
-effective_definition0(Policy, undefined) -> pget(definition, Policy);
-effective_definition0(undefined, OpPolicy) -> pget(definition, OpPolicy);
-effective_definition0(Policy, OpPolicy) ->
- OpDefinition = pget(definition, OpPolicy, []),
- Definition = pget(definition, Policy, []),
- {Keys, _} = lists:unzip(Definition),
- {OpKeys, _} = lists:unzip(OpDefinition),
+ merge_operator_definitions(Policy, OpPolicy).
+
+merge_operator_definitions(undefined, undefined) -> undefined;
+merge_operator_definitions(Policy, undefined) -> pget(definition, Policy);
+merge_operator_definitions(undefined, OpPolicy) -> pget(definition, OpPolicy);
+merge_operator_definitions(Policy, OpPolicy) ->
+ OpDefinition = rabbit_data_coercion:to_map(pget(definition, OpPolicy, [])),
+ Definition = rabbit_data_coercion:to_map(pget(definition, Policy, [])),
+ Keys = maps:keys(Definition),
+ OpKeys = maps:keys(OpDefinition),
lists:map(fun(Key) ->
- case {pget(Key, Definition), pget(Key, OpDefinition)} of
- {Val, undefined} -> {Key, Val};
- {undefined, Val} -> {Key, Val};
- {Val, OpVal} -> {Key, merge_policy_value(Key, Val, OpVal)}
+ case {maps:get(Key, Definition, undefined), maps:get(Key, OpDefinition, undefined)} of
+ {Val, undefined} -> {Key, Val};
+ {undefined, OpVal} -> {Key, OpVal};
+ {Val, OpVal} -> {Key, merge_policy_value(Key, Val, OpVal)}
end
end,
lists:umerge(Keys, OpKeys)).
@@ -142,7 +142,7 @@ get0(Name, Policy, OpPolicy) ->
merge_policy_value(Name, PolicyVal, OpVal) ->
case policy_merge_strategy(Name) of
{ok, Module} -> Module:merge_policy_value(Name, PolicyVal, OpVal);
- {error, not_found} -> PolicyVal
+ {error, not_found} -> rabbit_policies:merge_policy_value(Name, PolicyVal, OpVal)
end.
policy_merge_strategy(Name) ->