summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_dead_letter.erl13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/rabbit_dead_letter.erl b/src/rabbit_dead_letter.erl
index ca4871d2e0..5ec1da0e34 100644
--- a/src/rabbit_dead_letter.erl
+++ b/src/rabbit_dead_letter.erl
@@ -112,14 +112,25 @@ group_by_queue_and_reason(Tables) ->
end, {sets:new(), []}, Tables),
Grouped.
+update_x_death_header(Info, undefined) ->
+ update_x_death_header(Info, []);
update_x_death_header(Info, Headers) ->
+ X = x_death_event_key(Info, <<"exchange">>),
Q = x_death_event_key(Info, <<"queue">>),
R = x_death_event_key(Info, <<"reason">>),
case rabbit_basic:header(<<"x-death">>, Headers) of
undefined ->
+ %% First x-death event gets its own top-level headers.
+ %% See rabbitmq/rabbitmq-server#1332.
+ Headers2 = rabbit_misc:set_table_value(Headers, <<"x-first-death-reason">>,
+ longstr, R),
+ Headers3 = rabbit_misc:set_table_value(Headers2, <<"x-first-death-queue">>,
+ longstr, Q),
+ Headers4 = rabbit_misc:set_table_value(Headers3, <<"x-first-death-exchange">>,
+ longstr, X),
rabbit_basic:prepend_table_header(
<<"x-death">>,
- [{<<"count">>, long, 1} | Info], Headers);
+ [{<<"count">>, long, 1} | Info], Headers4);
{<<"x-death">>, array, Tables} ->
%% group existing x-death headers in case we have some from
%% before rabbitmq-server#78