Skip to content

Commit 8c6ba6d

Browse files
SignalWhisperermichaelklishin
authored andcommitted
Add Classic Queue version to operator policies
1 parent 1e8701f commit 8c6ba6d

File tree

5 files changed

+40
-4
lines changed

5 files changed

+40
-4
lines changed

deps/rabbit/priv/schema/rabbit.schema

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -782,6 +782,12 @@ end}.
782782
{datatype, string}
783783
]}.
784784

785+
{mapping, "default_policies.operator.$id.classic_queues.queue_version", "rabbit.default_policies.operator",
786+
[
787+
{validators, ["non_zero_positive_integer"]},
788+
{datatype, integer}
789+
]}.
790+
785791
{translation, "rabbit.default_policies.operator", fun(Conf) ->
786792
Props = rabbit_cuttlefish:aggregate_props(
787793
Conf,

deps/rabbit/src/rabbit_policies.erl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,15 @@ register() ->
5454
{operator_policy_validator, <<"max-in-memory-length">>},
5555
{operator_policy_validator, <<"max-in-memory-bytes">>},
5656
{operator_policy_validator, <<"delivery-limit">>},
57+
{operator_policy_validator, <<"queue-version">>},
5758
{policy_merge_strategy, <<"expires">>},
5859
{policy_merge_strategy, <<"message-ttl">>},
5960
{policy_merge_strategy, <<"max-length">>},
6061
{policy_merge_strategy, <<"max-length-bytes">>},
6162
{policy_merge_strategy, <<"max-in-memory-length">>},
6263
{policy_merge_strategy, <<"max-in-memory-bytes">>},
63-
{policy_merge_strategy, <<"delivery-limit">>}]],
64+
{policy_merge_strategy, <<"delivery-limit">>},
65+
{policy_merge_strategy, <<"queue-version">>}]],
6466
ok.
6567

6668
-spec validate_policy([{binary(), term()}]) -> rabbit_policy_validator:validate_results().
@@ -211,5 +213,6 @@ merge_policy_value(<<"max-in-memory-length">>, Val, OpVal) -> min(Val, OpVal);
211213
merge_policy_value(<<"max-in-memory-bytes">>, Val, OpVal) -> min(Val, OpVal);
212214
merge_policy_value(<<"expires">>, Val, OpVal) -> min(Val, OpVal);
213215
merge_policy_value(<<"delivery-limit">>, Val, OpVal) -> min(Val, OpVal);
216+
merge_policy_value(<<"queue-version">>, _Val, OpVal) -> OpVal;
214217
%% use operator policy value for booleans
215218
merge_policy_value(_Key, Val, OpVal) when is_boolean(Val) andalso is_boolean(OpVal) -> OpVal.

deps/rabbit/test/config_schema_SUITE_data/rabbit.snippets

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ ssl_options.fail_if_no_peer_cert = true",
151151
default_policies.operator.a.classic_queues.ha_mode = exactly
152152
default_policies.operator.a.classic_queues.ha_params = 2
153153
default_policies.operator.a.classic_queues.ha_sync_mode = automatic
154+
default_policies.operator.a.classic_queues.queue_version = 2
154155
155156
",
156157
[{rabbit, [{default_policies, [{operator, [
@@ -159,6 +160,7 @@ ssl_options.fail_if_no_peer_cert = true",
159160
{<<"ha_params">>, 2},
160161
{<<"ha_sync_mode">>, <<"automatic">>},
161162
{<<"queue_pattern">>, <<"apple">>},
163+
{<<"queue_version">>, 2},
162164
{<<"vhost_pattern">>, "banana"}]}]}]}]}],
163165
[]},
164166

deps/rabbit/test/policy_SUITE.erl

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ groups() ->
2828
operator_retroactive_policy_ttl,
2929
operator_retroactive_policy_publish_ttl,
3030
queue_type_specific_policies,
31+
queue_version_specific_policies,
3132
is_supported_operator_policy_expires,
3233
is_supported_operator_policy_message_ttl,
3334
is_supported_operator_policy_max_length,
@@ -256,6 +257,29 @@ queue_type_specific_policies(Config) ->
256257
rabbit_ct_client_helpers:close_connection(Conn),
257258
passed.
258259

260+
queue_version_specific_policies(Config) ->
261+
[Server | _] = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
262+
{Conn, Ch} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0),
263+
QName = <<"policy_queue_version">>,
264+
declare(Ch, QName),
265+
QueueVersionOnePolicy = [{<<"queue-version">>, 1}],
266+
QueueVersionTwoPolicy = [{<<"queue-version">>, 2}],
267+
268+
Opts = #{config => Config,
269+
server => Server,
270+
qname => QName},
271+
272+
%% Queue version OperPolicy has precedence always
273+
verify_policies(QueueVersionOnePolicy, QueueVersionTwoPolicy, QueueVersionTwoPolicy, Opts),
274+
verify_policies(QueueVersionTwoPolicy, QueueVersionOnePolicy, QueueVersionOnePolicy, Opts),
275+
276+
delete(Ch, QName),
277+
rabbit_ct_broker_helpers:clear_policy(Config, 0, <<"policy">>),
278+
rabbit_ct_broker_helpers:clear_operator_policy(Config, 0, <<"op_policy">>),
279+
rabbit_ct_client_helpers:close_channel(Ch),
280+
rabbit_ct_client_helpers:close_connection(Conn),
281+
passed.
282+
259283
%% See supported policies in https://www.rabbitmq.com/parameters.html#operator-policies
260284
%% This test applies all supported operator policies to all queue types,
261285
%% and later verifies the effective policy definitions.
@@ -433,10 +457,10 @@ verify_policies(Policy, OperPolicy, VerifyFuns, #{config := Config,
433457
server := Server,
434458
qname := QName}) ->
435459
rabbit_ct_broker_helpers:set_policy(Config, 0, <<"policy">>,
436-
<<"policy_ha">>, <<"queues">>,
460+
QName, <<"queues">>,
437461
Policy),
438462
rabbit_ct_broker_helpers:set_operator_policy(Config, 0, <<"op_policy">>,
439-
<<"policy_ha">>, <<"queues">>,
463+
QName, <<"queues">>,
440464
OperPolicy),
441465
verify_policy(VerifyFuns, Server, QName).
442466

deps/rabbitmq_management/priv/www/js/tmpl/policies.ejs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,8 @@
288288
<span class="argument-link" field="definitionop" key="ha-sync-mode" type="string">HA sync mode</span> <span class="help" id="policy-ha-sync-mode"></span> </br>
289289
<span class="argument-link" field="definitionop" key="max-length" type="number">Max length</span> |
290290
<span class="argument-link" field="definitionop" key="max-length-bytes" type="number">Max length bytes</span> |
291-
<span class="argument-link" field="definitionop" key="message-ttl" type="number">Message TTL</span>
291+
<span class="argument-link" field="definitionop" key="message-ttl" type="number">Message TTL</span> |
292+
<span class="argument-link" field="definitionop" key="queue-version" type="number">Version</span> <span class="help" id="queue-version"></span> </br>
292293
<span class="help" id="queue-message-ttl"></span>
293294
</td>
294295
</tr>

0 commit comments

Comments
 (0)