diff options
| author | Michael Klishin <mklishin@pivotal.io> | 2015-03-26 00:21:18 +0300 |
|---|---|---|
| committer | Michael Klishin <mklishin@pivotal.io> | 2015-03-26 00:21:18 +0300 |
| commit | 632059acb473b0b2d64d01bc551449d615b6d37c (patch) | |
| tree | ac7c33f238e11e84c9456f841b9ec3f0ebf9d1b9 /src | |
| parent | 462e2b0f28dc105706a91a99b16a7d10ddf0c6c3 (diff) | |
| download | rabbitmq-server-git-632059acb473b0b2d64d01bc551449d615b6d37c.tar.gz | |
Refactoring, x-death.counter => x-death.count
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_basic.erl | 21 | ||||
| -rw-r--r-- | src/rabbit_dead_letter.erl | 48 |
2 files changed, 35 insertions, 34 deletions
diff --git a/src/rabbit_basic.erl b/src/rabbit_basic.erl index cd2846c00b..1cb6bef4ab 100644 --- a/src/rabbit_basic.erl +++ b/src/rabbit_basic.erl @@ -21,7 +21,7 @@ -export([publish/4, publish/5, publish/1, message/3, message/4, properties/1, prepend_table_header/3, extract_headers/1, map_headers/2, delivery/4, header_routes/1, - parse_expiration/1]). + parse_expiration/1, header/2, header/3]). -export([build_content/2, from_content/1, msg_size/1, maybe_gc_large_msg/1]). %%---------------------------------------------------------------------------- @@ -32,6 +32,7 @@ (rabbit_framing:amqp_property_record() | [{atom(), any()}])). -type(publish_result() :: ({ok, [pid()]} | rabbit_types:error('not_found'))). +-type(header() :: any()). -type(headers() :: rabbit_framing:amqp_table() | 'undefined'). -type(exchange_input() :: (rabbit_types:exchange() | rabbit_exchange:name())). @@ -61,6 +62,11 @@ -spec(prepend_table_header/3 :: (binary(), rabbit_framing:amqp_table(), headers()) -> headers()). +-spec(header/2 :: + (header(), headers()) -> 'undefined' | any()). +-spec(header/3 :: + (header(), headers(), any()) -> 'undefined' | any()). + -spec(extract_headers/1 :: (rabbit_types:content()) -> headers()). -spec(map_headers/2 :: (fun((headers()) -> headers()), rabbit_types:content()) @@ -225,6 +231,19 @@ update_invalid(Name, Value, ExistingHdr, Header) -> NewHdr = rabbit_misc:set_table_value(ExistingHdr, Name, array, Values), set_invalid(NewHdr, Header). +header(_Header, undefined) -> + undefined; +header(_Header, []) -> + undefined; +header(Header, Headers) -> + header(Header, Headers, undefined). + +header(Header, Headers, Default) -> + case lists:keysearch(Header, 1, Headers) of + false -> Default; + {value, Val} -> Val + end. + extract_headers(Content) -> #content{properties = #'P_basic'{headers = Headers}} = rabbit_binary_parser:ensure_content_decoded(Content), diff --git a/src/rabbit_dead_letter.erl b/src/rabbit_dead_letter.erl index da77271837..a6daeafbb5 100644 --- a/src/rabbit_dead_letter.erl +++ b/src/rabbit_dead_letter.erl @@ -34,12 +34,6 @@ %%---------------------------------------------------------------------------- --define(X_DEATH_HEADER, <<"x-death">>). --define(X_DEATH_COUNTER, <<"counter">>). --define(X_DEATH_QUEUE, <<"queue">>). --define(X_DEATH_REASON, <<"reason">>). - - publish(Msg, Reason, X, RK, QName) -> DLMsg = make_msg(Msg, Reason, X#exchange.name, RK, QName), Delivery = rabbit_basic:delivery(false, false, DLMsg, undefined), @@ -83,15 +77,6 @@ make_msg(Msg = #basic_message{content = Content, routing_keys = DeathRoutingKeys, content = Content2}. -x_death_header(undefined) -> - undefined; -x_death_header([]) -> - undefined; -x_death_header(Headers) -> - case lists:keysearch(?X_DEATH_HEADER, 1, Headers) of - false -> undefined; - {value, Val} -> Val - end. x_death_event_key(Info, Key, KeyType) -> case lists:keysearch(Key, 1, Info) of @@ -99,30 +84,27 @@ x_death_event_key(Info, Key, KeyType) -> {value, {Key, KeyType, Val}} -> Val end. -x_death_event_matcher({table, Info}, Queue, Reason) -> - x_death_event_key(Info, ?X_DEATH_QUEUE, longstr) =:= Queue - andalso x_death_event_key(Info, ?X_DEATH_REASON, longstr) =:= Reason. - update_x_death_header(Info, Headers) -> - Q = x_death_event_key(Info, ?X_DEATH_QUEUE, longstr), - R = x_death_event_key(Info, ?X_DEATH_REASON, longstr), - case x_death_header(Headers) of + Q = x_death_event_key(Info, <<"queue">>, longstr), + R = x_death_event_key(Info, <<"reason">>, longstr), + case rabbit_basic:header(<<"x-death">>, Headers) of undefined -> - rabbit_basic:prepend_table_header(?X_DEATH_HEADER, - [{?X_DEATH_COUNTER, long, 1} | Info], Headers); - {?X_DEATH_HEADER, array, Tables} -> - {Matches, Others} = lists:partition(fun (T) -> - x_death_event_matcher(T, Q, R) + rabbit_basic:prepend_table_header(<<"x-death">>, + [{<<"count">>, long, 1} | Info], Headers); + {<<"x-death">>, array, Tables} -> + {Matches, Others} = lists:partition(fun ({table, Info}) -> + x_death_event_key(Info, <<"queue">>, longstr) =:= Q + andalso x_death_event_key(Info, <<"reason">>, longstr) =:= R end, Tables), Info1 = case Matches of - [] -> [{?X_DEATH_COUNTER, long, 1} | Info]; + [] -> [{<<"count">>, long, 1} | Info]; [{table, M}] -> - case x_death_event_key(M, ?X_DEATH_COUNTER, long) of - undefined -> [{?X_DEATH_COUNTER, long, 1} | M]; - N -> lists:keyreplace(?X_DEATH_COUNTER, 1, M, {?X_DEATH_COUNTER, long, N + 1}) + case x_death_event_key(M, <<"count">>, long) of + undefined -> [{<<"count">>, long, 1} | M]; + N -> lists:keyreplace(<<"count">>, 1, M, {<<"count">>, long, N + 1}) end end, - rabbit_misc:set_table_value(Headers, ?X_DEATH_HEADER, array, + rabbit_misc:set_table_value(Headers, <<"x-death">>, array, [{table, rabbit_misc:sort_field_table(Info1)} | Others]) end. @@ -144,7 +126,7 @@ detect_cycles(_Reason, #basic_message{content = Content}, Queues) -> undefined -> NoCycles; _ -> - case rabbit_misc:table_lookup(Headers, ?X_DEATH_HEADER) of + case rabbit_misc:table_lookup(Headers, <<"x-death">>) of {array, Deaths} -> {Cycling, NotCycling} = lists:partition(fun (#resource{name = Queue}) -> |
