merge stable into master

This commit is contained in:
Michael Klishin 2016-04-13 00:22:50 +03:00
parent 8fb6be6b45
commit 28060d517b
6 changed files with 45 additions and 4 deletions

View File

@ -447,7 +447,7 @@ get_value(Table, Id, Tag, Type) ->
end.
ets_delete_value(Table, Key) ->
ets:delete(rabbit_mgmt_stats_tables:index(Table), Key),
ets:delete_object(rabbit_mgmt_stats_tables:index(Table), Key),
ets:delete(Table, Key).
indexes(Table, Id) ->

View File

@ -34,6 +34,9 @@ rest_init(Req, _Config) ->
variances(Req, Context) ->
{[<<"accept-encoding">>, <<"origin">>], Req, Context}.
finish_request(ReqData, Context) ->
{ok, rabbit_mgmt_cors:set_headers(ReqData, Context), Context}.
allowed_methods(ReqData, Context) ->
{[<<"POST">>, <<"OPTIONS">>], ReqData, Context}.

View File

@ -53,7 +53,8 @@ resource_exists(ReqData, Context) ->
end, ReqData, Context}.
to_json(ReqData, Context) ->
rabbit_mgmt_util:reply(rabbit_mgmt_format:parameter(parameter(ReqData)),
rabbit_mgmt_util:reply(rabbit_mgmt_format:parameter(
rabbit_mgmt_wm_parameters:fix_shovel_publish_properties(parameter(ReqData))),
ReqData, Context).
accept_content(ReqData, Context = #context{user = User}) ->

View File

@ -19,6 +19,7 @@
-export([init/3, rest_init/2, to_json/2, content_types_provided/2, is_authorized/2,
resource_exists/2, basic/1]).
-export([variances/2]).
-export([fix_shovel_publish_properties/1]).
-include("rabbit_mgmt.hrl").
-include_lib("rabbit_common/include/rabbit.hrl").
@ -52,6 +53,25 @@ is_authorized(ReqData, Context) ->
%%--------------------------------------------------------------------
%% Hackish fix to make sure we return a JSON object instead of an empty list
%% when the publish-properties value is empty. Should be removed in 3.7.0
%% when we switch to a new JSON library.
fix_shovel_publish_properties(P) ->
case lists:keyfind(component, 1, P) of
{_, <<"shovel">>} ->
case lists:keytake(value, 1, P) of
{value, {_, Values}, P2} ->
case lists:keytake(<<"publish-properties">>, 1, Values) of
{_, {_, []}, Values2} ->
P2 ++ [{value, Values2 ++ [{<<"publish-properties">>, empty_struct}]}];
_ ->
P
end;
_ -> P
end;
_ -> P
end.
basic(ReqData) ->
Raw = case rabbit_mgmt_util:id(component, ReqData) of
none -> rabbit_runtime_parameters:list();
@ -65,5 +85,5 @@ basic(ReqData) ->
end,
case Raw of
not_found -> not_found;
_ -> [rabbit_mgmt_format:parameter(P) || P <- Raw]
_ -> [rabbit_mgmt_format:parameter(fix_shovel_publish_properties(P)) || P <- Raw]
end.

View File

@ -34,6 +34,9 @@ rest_init(Req, _Config) ->
variances(Req, Context) ->
{[<<"accept-encoding">>, <<"origin">>], Req, Context}.
finish_request(ReqData, Context) ->
{ok, rabbit_mgmt_cors:set_headers(ReqData, Context), Context}.
allowed_methods(ReqData, Context) ->
{[<<"POST">>, <<"OPTIONS">>], ReqData, Context}.

View File

@ -29,7 +29,10 @@ gc_test() ->
Stats = stats(Before),
try
rabbit_mgmt_stats:gc(cutoff(), Stats, ?ID),
?assertEqual(After, unstats(Stats))
?assertEqual(After, unstats(Stats)),
Keys = get_table_keys(?TABLE),
Indexes = get_indexes(?TABLE),
?assertEqual(Keys, Indexes)
after
ets:delete_all_objects(?TABLE)
end
@ -182,3 +185,14 @@ select_messages(List) ->
Messages ->
Messages
end.
get_table_keys(Table) ->
%% Note: it only matches queue_msg_counts table 4-tuple
lists:sort(
ets:select(Table,
[{{{'$1', '$2'}, '_', '_', '_'},
[{'=/=', base, '$2'}, {'=/=', total, '$2'}],
[{{'$1', '$2'}}]}])).
get_indexes(Table) ->
lists:sort(ets:tab2list(rabbit_mgmt_stats_tables:index(Table))).