diff options
author | Michael Klishin <michael@clojurewerkz.org> | 2021-12-10 20:10:10 +0600 |
---|---|---|
committer | Michael Klishin <michael@clojurewerkz.org> | 2021-12-10 20:10:10 +0600 |
commit | 6edb7396fd3217bc0f93df6d69f694e5cd203f66 (patch) | |
tree | 2c3e98a01d5d6fa2e2a2d96543968a79af9c8a85 | |
parent | 71f70af933b0efcf60964d8df3d15757b185cdcc (diff) | |
download | rabbitmq-server-git-mk-revisit-policy-merging.tar.gz |
Revisit operator policy merging rules for boolean fieldsmk-revisit-policy-merging
For booleans, we can prefer the operator policy value
unconditionally, without any safety implications.
Per discussion with @binarin @pjk25
-rw-r--r-- | deps/rabbit/src/rabbit_policies.erl | 4 | ||||
-rw-r--r-- | deps/rabbit/test/unit_operator_policy_SUITE.erl | 55 |
2 files changed, 55 insertions, 4 deletions
diff --git a/deps/rabbit/src/rabbit_policies.erl b/deps/rabbit/src/rabbit_policies.erl index 062635c5b4..e23d12d81a 100644 --- a/deps/rabbit/src/rabbit_policies.erl +++ b/deps/rabbit/src/rabbit_policies.erl @@ -176,4 +176,6 @@ merge_policy_value(<<"max-length-bytes">>, Val, OpVal) -> min(Val, OpVal); merge_policy_value(<<"max-in-memory-length">>, Val, OpVal) -> min(Val, OpVal); merge_policy_value(<<"max-in-memory-bytes">>, Val, OpVal) -> min(Val, OpVal); merge_policy_value(<<"expires">>, Val, OpVal) -> min(Val, OpVal); -merge_policy_value(<<"delivery-limit">>, Val, OpVal) -> min(Val, OpVal). +merge_policy_value(<<"delivery-limit">>, Val, OpVal) -> min(Val, OpVal); +%% use operator policy value for booleans +merge_policy_value(_Key, Val, OpVal) when is_boolean(Val) andalso is_boolean(OpVal) -> OpVal. diff --git a/deps/rabbit/test/unit_operator_policy_SUITE.erl b/deps/rabbit/test/unit_operator_policy_SUITE.erl index 804da2d1c9..dedd6c82af 100644 --- a/deps/rabbit/test/unit_operator_policy_SUITE.erl +++ b/deps/rabbit/test/unit_operator_policy_SUITE.erl @@ -21,7 +21,8 @@ all() -> groups() -> [ {parallel_tests, [parallel], [ - merge_operator_policy_definitions + merge_operator_policy_definitions, + conflict_resolution_for_booleans ]} ]. @@ -102,6 +103,54 @@ merge_operator_policy_definitions(_Config) -> [{definition, [ {<<"message-ttl">>, 3000} ]}]) - ), + ). + - passed. + conflict_resolution_for_booleans(_Config) -> + ?assertEqual( + [ + {<<"remote-dc-replicate">>, true} + ], + rabbit_policy:merge_operator_definitions( + #{definition => #{ + <<"remote-dc-replicate">> => true + }}, + [{definition, [ + {<<"remote-dc-replicate">>, true} + ]}])), + + ?assertEqual( + [ + {<<"remote-dc-replicate">>, false} + ], + rabbit_policy:merge_operator_definitions( + #{definition => #{ + <<"remote-dc-replicate">> => false + }}, + [{definition, [ + {<<"remote-dc-replicate">>, false} + ]}])), + + ?assertEqual( + [ + {<<"remote-dc-replicate">>, true} + ], + rabbit_policy:merge_operator_definitions( + #{definition => #{ + <<"remote-dc-replicate">> => false + }}, + [{definition, [ + {<<"remote-dc-replicate">>, true} + ]}])), + + ?assertEqual( + [ + {<<"remote-dc-replicate">>, false} + ], + rabbit_policy:merge_operator_definitions( + #{definition => #{ + <<"remote-dc-replicate">> => true + }}, + [{definition, [ + {<<"remote-dc-replicate">>, false} + ]}])).
\ No newline at end of file |