From 4e350467bcb8f2d8832b0f75aead11cdf5537ba1 Mon Sep 17 00:00:00 2001 From: Simon Unge Date: Thu, 27 Apr 2023 15:16:39 -0700 Subject: [PATCH] Add ha-sync-mode as an operator policy (cherry picked from commit 367b1f0a6d74d6bc079dcc8dd28d686c58ce9cac) (cherry picked from commit 530a7f6240b70685354639c5598b0f2a7c2b6b10) --- deps/rabbit/priv/schema/rabbit.schema | 4 ++++ deps/rabbit/src/rabbit_mirror_queue_misc.erl | 6 ++++++ deps/rabbit/test/config_schema_SUITE_data/rabbit.snippets | 3 +++ deps/rabbit/test/policy_SUITE.erl | 7 ++++++- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/deps/rabbit/priv/schema/rabbit.schema b/deps/rabbit/priv/schema/rabbit.schema index 9e27659ecc76..ab8b6b4f888c 100644 --- a/deps/rabbit/priv/schema/rabbit.schema +++ b/deps/rabbit/priv/schema/rabbit.schema @@ -776,6 +776,10 @@ end}. {datatype, [integer, {list, string}]} ]}. +{mapping, "default_policies.operator.$id.classic_queues.ha_sync_mode", "rabbit.default_policies.operator", [ + {datatype, string} +]}. + {translation, "rabbit.default_policies.operator", fun(Conf) -> Props = rabbit_cuttlefish:aggregate_props( Conf, diff --git a/deps/rabbit/src/rabbit_mirror_queue_misc.erl b/deps/rabbit/src/rabbit_mirror_queue_misc.erl index ac2e63dbe93b..e87be6d13fb1 100644 --- a/deps/rabbit/src/rabbit_mirror_queue_misc.erl +++ b/deps/rabbit/src/rabbit_mirror_queue_misc.erl @@ -52,10 +52,14 @@ [operator_policy_validator, <<"ha-mode">>, ?MODULE]}}, {mfa, {rabbit_registry, register, [operator_policy_validator, <<"ha-params">>, ?MODULE]}}, + {mfa, {rabbit_registry, register, + [operator_policy_validator, <<"ha-sync-mode">>, ?MODULE]}}, {mfa, {rabbit_registry, register, [policy_merge_strategy, <<"ha-mode">>, ?MODULE]}}, {mfa, {rabbit_registry, register, [policy_merge_strategy, <<"ha-params">>, ?MODULE]}}, + {mfa, {rabbit_registry, register, + [policy_merge_strategy, <<"ha-sync-mode">>, ?MODULE]}}, {requires, rabbit_registry}, {enables, recovery}]}). @@ -809,6 +813,8 @@ merge_policy_value(<<"ha-mode">>, <<"exactly">> = Val, _OpVal) -> Val; merge_policy_value(<<"ha-mode">>, _Val, <<"exactly">> = OpVal) -> OpVal; +merge_policy_value(<<"ha-sync-mode">>, _Val, OpVal) -> + OpVal; %% Both values are integers, both are ha-mode 'exactly' merge_policy_value(<<"ha-params">>, Val, OpVal) when is_integer(Val) andalso diff --git a/deps/rabbit/test/config_schema_SUITE_data/rabbit.snippets b/deps/rabbit/test/config_schema_SUITE_data/rabbit.snippets index 86f2775f991b..d2137afb5ebe 100644 --- a/deps/rabbit/test/config_schema_SUITE_data/rabbit.snippets +++ b/deps/rabbit/test/config_schema_SUITE_data/rabbit.snippets @@ -142,11 +142,14 @@ ssl_options.fail_if_no_peer_cert = true", default_policies.operator.a.vhost_pattern = banana default_policies.operator.a.classic_queues.ha_mode = exactly default_policies.operator.a.classic_queues.ha_params = 2 + default_policies.operator.a.classic_queues.ha_sync_mode = automatic + ", [{rabbit, [{default_policies, [{operator, [ {<<"a">>, [{<<"expires">>, 3600000}, {<<"ha_mode">>, "exactly"}, {<<"ha_params">>, 2}, + {<<"ha_sync_mode">>, "automatic"}, {<<"queue_pattern">>, "apple"}, {<<"vhost_pattern">>, "banana"}]}]}]}]}], []}, diff --git a/deps/rabbit/test/policy_SUITE.erl b/deps/rabbit/test/policy_SUITE.erl index 26457c4389f8..01dd86c801ee 100644 --- a/deps/rabbit/test/policy_SUITE.erl +++ b/deps/rabbit/test/policy_SUITE.erl @@ -167,12 +167,13 @@ target_count_policy(Config) -> {<<"ha-params">>, BNodes}], NodesPolicyOne = [{<<"ha-mode">>, <<"nodes">>}, {<<"ha-params">>, [hd(BNodes)]}], + SyncModePolicyAuto = [{<<"ha-mode">>, <<"all">>}, {<<"ha-sync-mode">>, <<"automatic">>}], + SyncModePolicyMan = [{<<"ha-mode">>, <<"all">>}, {<<"ha-sync-mode">>, <<"manual">>}], %% ALL has precedence Opts = #{config => Config, server => Server, qname => QName}, - verify_policies(AllPolicy, ExactlyPolicyTwo, [{<<"ha-mode">>, <<"all">>}], Opts), verify_policies(ExactlyPolicyTwo, AllPolicy, [{<<"ha-mode">>, <<"all">>}], Opts), @@ -181,6 +182,10 @@ target_count_policy(Config) -> verify_policies(NodesPolicyAll, AllPolicy, [{<<"ha-mode">>, <<"all">>}], Opts), + %% %% Sync mode OperPolicy has precedence + verify_policies(SyncModePolicyMan, SyncModePolicyAuto, [{<<"ha-sync-mode">>, <<"automatic">>}], Opts), + verify_policies(SyncModePolicyAuto, SyncModePolicyMan, [{<<"ha-sync-mode">>, <<"manual">>}], Opts), + %% exactly has precedence over nodes verify_policies(ExactlyPolicyTwo, NodesPolicyAll,[{<<"ha-mode">>, <<"exactly">>}, {<<"ha-params">>, 2}], Opts),