diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_policy.erl | 34 |
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) -> |
