Skip to content

Commit b056b45

Browse files
committed
Make death_v2{} record extensible
similar to how death{} record is extensible
1 parent d0b0ec8 commit b056b45

File tree

4 files changed

+14
-11
lines changed

4 files changed

+14
-11
lines changed

deps/rabbit/include/mc.hrl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
-define(ANN_PRIORITY, p).
1515

1616
%% RabbitMQ >= 3.13.3
17+
-type death_v2_anns() :: #{ttl => OriginalTtlHeader :: non_neg_integer()}.
1718
-record(death_v2, {source_queue :: rabbit_misc:resource_name(),
1819
reason :: rabbit_dead_letter:reason(),
1920
%% how many times this message was dead lettered
@@ -24,10 +25,9 @@
2425
first_death_timestamp :: pos_integer(),
2526
original_exchange :: rabbit_misc:resource_name(),
2627
original_routing_keys :: [rabbit_types:routing_key(),...],
27-
%% original message ttl header if reason is 'expired'
28-
original_ttl :: undefined | non_neg_integer()}).
28+
annotations :: death_v2_anns()}).
2929

30-
%% These records were used in RabbitMQ 3.13.0 - 3.13.2.
30+
%% RabbitMQ 3.13.0 - 3.13.2.
3131
-type death_v1_key() :: {SourceQueue :: rabbit_misc:resource_name(), rabbit_dead_letter:reason()}.
3232
-type death_v1_anns() :: #{first_time := non_neg_integer(),
3333
last_time := non_neg_integer(),

deps/rabbit/src/mc.erl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,7 @@ record_death(Reason, SourceQueue, BasicMsg) ->
414414

415415
record_death_v2(SourceQueue, Reason, ReasonBin, Exchange, RoutingKeys, Timestamp, Ttl,
416416
#?MODULE{annotations = Anns0} = State) ->
417+
DeathAnns = rabbit_misc:maps_put_truthy(ttl, Ttl, #{}),
417418
Anns = case Anns0 of
418419
#{deaths_v2 := Deaths0} ->
419420
%% deaths_v2 is ordered by recency
@@ -428,7 +429,7 @@ record_death_v2(SourceQueue, Reason, ReasonBin, Exchange, RoutingKeys, Timestamp
428429
first_death_timestamp = Timestamp,
429430
original_exchange = Exchange,
430431
original_routing_keys = RoutingKeys,
431-
original_ttl = Ttl},
432+
annotations = DeathAnns},
432433
[Death | Deaths0]
433434
end,
434435
Anns0#{deaths_v2 := Deaths,
@@ -442,7 +443,7 @@ record_death_v2(SourceQueue, Reason, ReasonBin, Exchange, RoutingKeys, Timestamp
442443
first_death_timestamp = Timestamp,
443444
original_exchange = Exchange,
444445
original_routing_keys = RoutingKeys,
445-
original_ttl = Ttl},
446+
annotations = DeathAnns},
446447
Anns0#{deaths_v2 => [Death],
447448
<<"x-first-death-reason">> => ReasonBin,
448449
<<"x-first-death-queue">> => SourceQueue,

deps/rabbit/src/mc_amqp.erl

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ encode_deaths(Deaths) ->
588588
first_death_timestamp = Timestamp,
589589
original_exchange = Exchange,
590590
original_routing_keys = RoutingKeys,
591-
original_ttl = Ttl}) ->
591+
annotations = Anns}) ->
592592
RKeys = [{utf8, Rk} || Rk <- RoutingKeys],
593593
Map0 = [
594594
{{symbol, <<"queue">>}, {utf8, Queue}},
@@ -598,10 +598,11 @@ encode_deaths(Deaths) ->
598598
{{symbol, <<"exchange">>}, {utf8, Exchange}},
599599
{{symbol, <<"routing-keys">>}, {array, utf8, RKeys}}
600600
],
601-
Map = if Ttl =:= undefined ->
602-
Map0;
603-
is_integer(Ttl) ->
604-
[{{symbol, <<"ttl">>}, {uint, Ttl}} | Map0]
601+
Map = case Anns of
602+
#{ttl := Ttl} ->
603+
[{{symbol, <<"ttl">>}, {uint, Ttl}} | Map0];
604+
_ ->
605+
Map0
605606
end,
606607
{map, Map}
607608
end, Deaths).

deps/rabbit/src/mc_amqpl.erl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -607,7 +607,8 @@ deaths_v2_to_headers(Deaths, Headers) ->
607607
first_death_timestamp = Timestamp,
608608
original_exchange = Ex,
609609
original_routing_keys = RKeys,
610-
original_ttl = Ttl}) ->
610+
annotations = Anns}) ->
611+
Ttl = maps:get(ttl, Anns, undefined),
611612
death_table(Queue, Reason, Count, Timestamp, Ex, RKeys, Ttl)
612613
end, Deaths),
613614
rabbit_misc:set_table_value(Headers, <<"x-death">>, array, Infos).

0 commit comments

Comments
 (0)