summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordcorbacho <dparracorbacho@piotal.io>2021-02-19 16:45:57 +0100
committerdcorbacho <dparracorbacho@piotal.io>2021-02-19 16:45:57 +0100
commit0e63a7d79c9da3d4e62550137c0ad82b51fdc5fd (patch)
tree12420dc594c73cd8688dd9b4605160b37c8d3961
parent699cd1ab29a86c70a930d589041a78f5b3bc338e (diff)
downloadrabbitmq-server-git-0e63a7d79c9da3d4e62550137c0ad82b51fdc5fd.tar.gz
Select applicable policies from exclusion list
It's not possible to know all aplicable policies since plugins can extend these, i.e. federation. Thus, we'll exclude the known unapplicable core policies and allow through any other policy.
-rw-r--r--deps/rabbit/src/rabbit_classic_queue.erl11
-rw-r--r--deps/rabbit/src/rabbit_queue_type.erl4
-rw-r--r--deps/rabbit/src/rabbit_quorum_queue.erl11
-rw-r--r--deps/rabbit/src/rabbit_stream_queue.erl11
4 files changed, 22 insertions, 15 deletions
diff --git a/deps/rabbit/src/rabbit_classic_queue.erl b/deps/rabbit/src/rabbit_classic_queue.erl
index e53c0aecc2..94cc7cc190 100644
--- a/deps/rabbit/src/rabbit_classic_queue.erl
+++ b/deps/rabbit/src/rabbit_classic_queue.erl
@@ -441,14 +441,9 @@ recover_durable_queues(QueuesAndRecoveryTerms) ->
[Q || {_, {new, Q}} <- Results].
capabilities() ->
- #{policies => [<<"expires">>, <<"message-ttl">>, <<"dead-letter-exchange">>,
- <<"dead-letter-routing-key">>, <<"max-length">>,
- <<"max-length-bytes">>, <<"max-in-memory-length">>, <<"max-in-memory-bytes">>,
- <<"max-priority">>, <<"overflow">>, <<"queue-mode">>,
- <<"single-active-consumer">>, <<"delivery-limit">>,
- <<"ha-mode">>, <<"ha-params">>, <<"ha-sync-mode">>,
- <<"ha-promote-on-shutdown">>, <<"ha-promote-on-failure">>,
- <<"queue-master-locator">>],
+ #{policies => [ %% Stream policies
+ <<"max-age">>, <<"max-segment-size">>,
+ <<"queue-leader-locator">>, <<"initial-cluster-size">>],
queue_arguments => [<<"x-expires">>, <<"x-message-ttl">>, <<"x-dead-letter-exchange">>,
<<"x-dead-letter-routing-key">>, <<"x-max-length">>,
<<"x-max-length-bytes">>, <<"x-max-in-memory-length">>,
diff --git a/deps/rabbit/src/rabbit_queue_type.erl b/deps/rabbit/src/rabbit_queue_type.erl
index 6ecaf40c7d..b568cd9981 100644
--- a/deps/rabbit/src/rabbit_queue_type.erl
+++ b/deps/rabbit/src/rabbit_queue_type.erl
@@ -298,9 +298,9 @@ i_down(_K, _Q, _DownReason) -> ''.
is_policy_applicable(Q, Policy) ->
Mod = amqqueue:get_type(Q),
Capabilities = Mod:capabilities(),
- Applicable = maps:get(policies, Capabilities, []),
+ NotApplicable = maps:get(policies, Capabilities, []),
lists:all(fun({P, _}) ->
- lists:member(P, Applicable)
+ not lists:member(P, NotApplicable)
end, Policy).
is_server_named_allowed(Type) ->
diff --git a/deps/rabbit/src/rabbit_quorum_queue.erl b/deps/rabbit/src/rabbit_quorum_queue.erl
index fa9c4f5d45..d4bfaf16ac 100644
--- a/deps/rabbit/src/rabbit_quorum_queue.erl
+++ b/deps/rabbit/src/rabbit_quorum_queue.erl
@@ -350,9 +350,14 @@ filter_quorum_critical(Queues, ReplicaStates) ->
end, Queues).
capabilities() ->
- #{policies => [<<"max-length">>, <<"max-length-bytes">>, <<"overflow">>,
- <<"expires">>, <<"max-in-memory-length">>, <<"max-in-memory-bytes">>,
- <<"delivery-limit">>, <<"dead-letter-exchange">>, <<"dead-letter-routing-key">>],
+ #{policies => [ %% Classic policies
+ <<"message-ttl">>, <<"max-priority">>, <<"queue-mode">>,
+ <<"single-active-consumer">>, <<"ha-mode">>, <<"ha-params">>,
+ <<"ha-sync-mode">>, <<"ha-promote-on-shutdown">>, <<"ha-promote-on-failure">>,
+ <<"queue-master-locator">>,
+ %% Stream policies
+ <<"max-age">>, <<"max-segment-size">>,
+ <<"queue-leader-locator">>, <<"initial-cluster-size">>],
queue_arguments => [<<"x-expires">>, <<"x-dead-letter-exchange">>,
<<"x-dead-letter-routing-key">>, <<"x-max-length">>,
<<"x-max-length-bytes">>, <<"x-max-in-memory-length">>,
diff --git a/deps/rabbit/src/rabbit_stream_queue.erl b/deps/rabbit/src/rabbit_stream_queue.erl
index 206584fe61..96806fe948 100644
--- a/deps/rabbit/src/rabbit_stream_queue.erl
+++ b/deps/rabbit/src/rabbit_stream_queue.erl
@@ -744,8 +744,15 @@ msg_to_iodata(#basic_message{exchange_name = #resource{name = Exchange},
rabbit_msg_record:to_iodata(R).
capabilities() ->
- #{policies => [<<"max-length-bytes">>, <<"max-age">>, <<"max-segment-size">>,
- <<"queue-leader-locator">>, <<"initial-cluster-size">>],
+ #{policies => [ %% Classic policies
+ <<"expires">>, <<"message-ttl">>, <<"dead-letter-exchange">>,
+ <<"dead-letter-routing-key">>, <<"max-length">>,
+ <<"max-in-memory-length">>, <<"max-in-memory-bytes">>,
+ <<"max-priority">>, <<"overflow">>, <<"queue-mode">>,
+ <<"single-active-consumer">>, <<"delivery-limit">>,
+ <<"ha-mode">>, <<"ha-params">>, <<"ha-sync-mode">>,
+ <<"ha-promote-on-shutdown">>, <<"ha-promote-on-failure">>,
+ <<"queue-master-locator">>],
queue_arguments => [<<"x-dead-letter-exchange">>, <<"x-dead-letter-routing-key">>,
<<"x-max-length">>, <<"x-max-length-bytes">>,
<<"x-single-active-consumer">>, <<"x-queue-type">>,