Skip to content

Commit

Permalink
Merge pull request #10623 from rabbitmq/amqpl-headers
Browse files Browse the repository at this point in the history
Fix AMQP 0.9.1 headers regression
  • Loading branch information
kjnilsson authored Feb 27, 2024
2 parents 97134d3 + 8a2a740 commit 98203cf
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
2 changes: 1 addition & 1 deletion deps/rabbit/src/mc_amqpl.erl
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,7 @@ protocol_state(#content{properties = #'P_basic'{headers = H00} = B0} = C,
end, Headers0, Anns),
Headers = case Headers1 of
[] ->
undefined;
H00;
_ ->
%% Dedup
lists:usort(fun({Key1, _, _}, {Key2, _, _}) ->
Expand Down
36 changes: 34 additions & 2 deletions deps/rabbit/test/quorum_queue_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -166,8 +166,8 @@ all_tests() ->
consumer_priorities,
cancel_consumer_gh_3729,
cancel_and_consume_with_same_tag,
validate_messages_on_queue

validate_messages_on_queue,
amqpl_headers
].

memory_tests() ->
Expand Down Expand Up @@ -3332,6 +3332,38 @@ validate_messages_on_queue(Config) ->

ok.

amqpl_headers(Config) ->
[Server | _] = Servers = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
QQ = ?config(queue_name, Config),
?assertEqual({'queue.declare_ok', QQ, 0, 0},
declare(Ch, QQ, [{<<"x-queue-type">>, longstr, <<"quorum">>}])),

Headers1Sent = undefined,
Headers2Sent = [],
[ok = amqp_channel:cast(
Ch,
#'basic.publish'{routing_key = QQ},
#amqp_msg{props = #'P_basic'{headers = HeadersSent,
delivery_mode = 2}}) ||
HeadersSent <- [Headers1Sent, Headers2Sent]],
RaName = ra_name(QQ),
wait_for_messages_ready(Servers, RaName, 2),

{#'basic.get_ok'{},
#amqp_msg{props = #'P_basic'{headers = Headers1Received}}
} = amqp_channel:call(Ch, #'basic.get'{queue = QQ}),

{#'basic.get_ok'{delivery_tag = DeliveryTag},
#amqp_msg{props = #'P_basic'{headers = Headers2Received}}
} = amqp_channel:call(Ch, #'basic.get'{queue = QQ}),

?assertEqual(Headers1Sent, Headers1Received),
?assertEqual(Headers2Sent, Headers2Received),

ok = amqp_channel:cast(Ch, #'basic.ack'{delivery_tag = DeliveryTag,
multiple = true}).

leader_locator_client_local(Config) ->
[Server1 | _] = Servers = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
Q = ?config(queue_name, Config),
Expand Down

0 comments on commit 98203cf

Please sign in to comment.