From 4a3752a87f8d321f3f0dcf66d3aeae7f90da0750 Mon Sep 17 00:00:00 2001 From: David Ansari Date: Wed, 21 May 2025 17:32:04 +0200 Subject: [PATCH 1/2] Use more idiomatic `maybe` feature --- deps/rabbit/src/rabbit_queue_type_util.erl | 11 ----------- deps/rabbit/src/rabbit_quorum_queue.erl | 14 +++++--------- deps/rabbit/src/rabbit_stream_queue.erl | 21 ++++++++------------- 3 files changed, 13 insertions(+), 33 deletions(-) diff --git a/deps/rabbit/src/rabbit_queue_type_util.erl b/deps/rabbit/src/rabbit_queue_type_util.erl index f24f7eb62332..8d38290d83cc 100644 --- a/deps/rabbit/src/rabbit_queue_type_util.erl +++ b/deps/rabbit/src/rabbit_queue_type_util.erl @@ -12,7 +12,6 @@ check_auto_delete/1, check_exclusive/1, check_non_durable/1, - run_checks/2, erpc_call/5]). -include_lib("rabbit_common/include/rabbit.hrl"). @@ -62,16 +61,6 @@ check_non_durable(Q) when not ?amqqueue_is_durable(Q) -> {protocol_error, precondition_failed, "invalid property 'non-durable' for ~ts", [rabbit_misc:rs(Name)]}. -run_checks([], _) -> - ok; -run_checks([C | Checks], Q) -> - case C(Q) of - ok -> - run_checks(Checks, Q); - Err -> - Err - end. - -spec erpc_call(node(), module(), atom(), list(), non_neg_integer() | infinity) -> term() | {error, term()}. erpc_call(Node, M, F, A, _Timeout) diff --git a/deps/rabbit/src/rabbit_quorum_queue.erl b/deps/rabbit/src/rabbit_quorum_queue.erl index 08cb89ccee90..51287b70fb59 100644 --- a/deps/rabbit/src/rabbit_quorum_queue.erl +++ b/deps/rabbit/src/rabbit_quorum_queue.erl @@ -248,15 +248,11 @@ handle_event(QName, {From, Evt}, QState) -> {new | existing, amqqueue:amqqueue()} | {protocol_error, Type :: atom(), Reason :: string(), Args :: term()}. declare(Q, _Node) when ?amqqueue_is_quorum(Q) -> - case rabbit_queue_type_util:run_checks( - [fun rabbit_queue_type_util:check_auto_delete/1, - fun rabbit_queue_type_util:check_exclusive/1, - fun rabbit_queue_type_util:check_non_durable/1], - Q) of - ok -> - start_cluster(Q); - Err -> - Err + maybe + ok ?= rabbit_queue_type_util:check_auto_delete(Q), + ok ?= rabbit_queue_type_util:check_exclusive(Q), + ok ?= rabbit_queue_type_util:check_non_durable(Q), + start_cluster(Q) end. start_cluster(Q) -> diff --git a/deps/rabbit/src/rabbit_stream_queue.erl b/deps/rabbit/src/rabbit_stream_queue.erl index 047b385765bb..2efa05eaf123 100644 --- a/deps/rabbit/src/rabbit_stream_queue.erl +++ b/deps/rabbit/src/rabbit_stream_queue.erl @@ -137,19 +137,14 @@ is_compatible(_, _, _) -> -spec declare(amqqueue:amqqueue(), node()) -> {'new' | 'existing', amqqueue:amqqueue()} | {protocol_error, Type :: atom(), Reason :: string(), Args :: term()}. -declare(Q0, _Node) when ?amqqueue_is_stream(Q0) -> - case rabbit_queue_type_util:run_checks( - [fun rabbit_queue_type_util:check_auto_delete/1, - fun rabbit_queue_type_util:check_exclusive/1, - fun rabbit_queue_type_util:check_non_durable/1, - fun check_max_segment_size_bytes/1, - fun check_filter_size/1 - ], - Q0) of - ok -> - create_stream(Q0); - Err -> - Err +declare(Q, _Node) when ?amqqueue_is_stream(Q) -> + maybe + ok ?= rabbit_queue_type_util:check_auto_delete(Q), + ok ?= rabbit_queue_type_util:check_exclusive(Q), + ok ?= rabbit_queue_type_util:check_non_durable(Q), + ok ?= check_max_segment_size_bytes(Q), + ok ?= check_filter_size(Q), + create_stream(Q) end. check_max_segment_size_bytes(Q) -> From 31896865105efccc6158d2e2e8e13c4956c56fca Mon Sep 17 00:00:00 2001 From: David Ansari Date: Wed, 21 May 2025 17:48:51 +0200 Subject: [PATCH 2/2] Add maybe_expr feature for OTP 26 GitHub action Build and Xref on OTP 26 errored with: ``` src/rabbit_quorum_queue.erl:252:9: syntax error before: ok % 252| ok ?= rabbit_queue_type_util:check_auto_delete(Q), % | ^ ``` --- deps/rabbit/src/rabbit_quorum_queue.erl | 1 + deps/rabbit/src/rabbit_stream_queue.erl | 2 ++ 2 files changed, 3 insertions(+) diff --git a/deps/rabbit/src/rabbit_quorum_queue.erl b/deps/rabbit/src/rabbit_quorum_queue.erl index 51287b70fb59..000b6c22174b 100644 --- a/deps/rabbit/src/rabbit_quorum_queue.erl +++ b/deps/rabbit/src/rabbit_quorum_queue.erl @@ -6,6 +6,7 @@ %% -module(rabbit_quorum_queue). +-feature(maybe_expr, enable). -behaviour(rabbit_queue_type). -behaviour(rabbit_policy_validator). diff --git a/deps/rabbit/src/rabbit_stream_queue.erl b/deps/rabbit/src/rabbit_stream_queue.erl index 2efa05eaf123..6d5e0b5f3bf3 100644 --- a/deps/rabbit/src/rabbit_stream_queue.erl +++ b/deps/rabbit/src/rabbit_stream_queue.erl @@ -6,6 +6,8 @@ %% -module(rabbit_stream_queue). +-feature(maybe_expr, enable). + -include("mc.hrl"). -behaviour(rabbit_queue_type).