diff options
author | Michael Klishin <mklishin@pivotal.io> | 2019-07-08 22:01:21 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-08 22:01:21 +0300 |
commit | dfcb4d154eada2cd3ff4fc0906dbf8877137bed1 (patch) | |
tree | cebda5964958361142a6d18d01fb1958058c6304 | |
parent | d35182b709ed91b12b9b988ba28d1dcbf063370d (diff) | |
parent | 50ac865517c84e01a122e5a8e92a1313b7114d67 (diff) | |
download | rabbitmq-server-git-dfcb4d154eada2cd3ff4fc0906dbf8877137bed1.tar.gz |
Merge pull request #2024 from rabbitmq/management-only-apiv3.8.0-beta.5
Queue, connection and exchange count functions
-rw-r--r-- | src/rabbit_amqqueue.erl | 6 | ||||
-rw-r--r-- | src/rabbit_connection_tracking.erl | 26 | ||||
-rw-r--r-- | src/rabbit_exchange.erl | 7 | ||||
-rw-r--r-- | test/unit_inbroker_non_parallel_SUITE.erl | 45 |
4 files changed, 81 insertions, 3 deletions
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index 9922a3f105..cbe8738c5a 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -30,6 +30,7 @@ -export([list/0, list/1, info_keys/0, info/1, info/2, info_all/1, info_all/2, emit_info_all/5, list_local/1, info_local/1, emit_info_local/4, emit_info_down/4]). +-export([count/0]). -export([list_down/1, count/1, list_names/0, list_names/1, list_local_names/0, list_with_possible_retry/1]). -export([list_by_type/1]). @@ -792,6 +793,11 @@ list() -> do_list() -> mnesia:dirty_match_object(rabbit_queue, amqqueue:pattern_match_all()). +-spec count() -> non_neg_integer(). + +count() -> + mnesia:table_info(rabbit_queue, size). + -spec list_names() -> [rabbit_amqqueue:name()]. list_names() -> mnesia:dirty_all_keys(rabbit_queue). diff --git a/src/rabbit_connection_tracking.erl b/src/rabbit_connection_tracking.erl index aa5eb15464..88951eabe9 100644 --- a/src/rabbit_connection_tracking.erl +++ b/src/rabbit_connection_tracking.erl @@ -39,7 +39,9 @@ list/0, list/1, list_on_node/1, list_on_node/2, list_of_user/1, tracked_connection_from_connection_created/1, tracked_connection_from_connection_state/1, - count_connections_in/1]). + count_connections_in/1, + lookup/1, + count/0]). -include_lib("rabbit.hrl"). @@ -287,6 +289,20 @@ unregister_connection(ConnId = {Node, _Name}) when Node =:= node() -> mnesia:dirty_delete(TableName, ConnId) end. +-spec lookup(rabbit_types:connection_name()) -> rabbit_types:tracked_connection() | 'not_found'. + +lookup(Name) -> + Nodes = rabbit_mnesia:cluster_nodes(running), + lookup(Name, Nodes). + +lookup(_, []) -> + not_found; +lookup(Name, [Node | Nodes]) -> + TableName = tracked_connection_table_name_for(Node), + case mnesia:dirty_read(TableName, {Node, Name}) of + [] -> lookup(Name, Nodes); + [Row] -> Row + end. -spec list() -> [rabbit_types:tracked_connection()]. @@ -297,6 +313,14 @@ list() -> Acc ++ mnesia:dirty_match_object(Tab, #tracked_connection{_ = '_'}) end, [], rabbit_mnesia:cluster_nodes(running)). +-spec count() -> non_neg_integer(). + +count() -> + lists:foldl( + fun (Node, Acc) -> + Tab = tracked_connection_table_name_for(Node), + Acc + mnesia:table_info(Tab, size) + end, 0, rabbit_mnesia:cluster_nodes(running)). -spec list(rabbit_types:vhost()) -> [rabbit_types:tracked_connection()]. diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index b4ba89ca08..86c11c4ad2 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -23,7 +23,7 @@ lookup/1, lookup_or_die/1, list/0, list/1, lookup_scratch/2, update_scratch/3, update_decorators/1, immutable/1, info_keys/0, info/1, info/2, info_all/1, info_all/2, info_all/4, - route/2, delete/3, validate_binding/2]). + route/2, delete/3, validate_binding/2, count/0]). -export([list_names/0]). %% these must be run inside a mnesia tx -export([maybe_auto_delete/2, serial/1, peek_serial/1, update/2]). @@ -238,6 +238,11 @@ lookup_or_die(Name) -> list() -> mnesia:dirty_match_object(rabbit_exchange, #exchange{_ = '_'}). +-spec count() -> non_neg_integer(). + +count() -> + mnesia:table_info(rabbit_exchange, size). + -spec list_names() -> [rabbit_exchange:name()]. list_names() -> mnesia:dirty_all_keys(rabbit_exchange). diff --git a/test/unit_inbroker_non_parallel_SUITE.erl b/test/unit_inbroker_non_parallel_SUITE.erl index 0f6e5a5de0..4f11adefbc 100644 --- a/test/unit_inbroker_non_parallel_SUITE.erl +++ b/test/unit_inbroker_non_parallel_SUITE.erl @@ -18,6 +18,7 @@ -include_lib("eunit/include/eunit.hrl"). -include_lib("common_test/include/ct.hrl"). +-include_lib("eunit/include/eunit.hrl"). -include_lib("kernel/include/file.hrl"). -include_lib("amqp_client/include/amqp_client.hrl"). @@ -42,7 +43,11 @@ groups() -> log_management, %% Check log files. log_file_initialised_during_startup, log_file_fails_to_initialise_during_startup, - externally_rotated_logs_are_automatically_reopened %% Check log files. + externally_rotated_logs_are_automatically_reopened, %% Check log files. + exchange_count, + queue_count, + connection_count, + connection_lookup ]} ]. @@ -699,6 +704,44 @@ disk_monitor_enable1() -> passed. %% --------------------------------------------------------------------------- +%% Count functions for management only API purposes +%% --------------------------------------------------------------------------- +exchange_count(Config) -> + %% Default exchanges == 7 + ?assertEqual(7, rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_exchange, count, [])). + +queue_count(Config) -> + Conn = rabbit_ct_client_helpers:open_connection(Config, 0), + {ok, Ch} = amqp_connection:open_channel(Conn), + amqp_channel:call(Ch, #'queue.declare'{ queue = <<"my-queue">> }), + + ?assertEqual(1, rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_amqqueue, count, [])), + + amqp_channel:call(Ch, #'queue.delete'{ queue = <<"my-queue">> }), + rabbit_ct_client_helpers:close_channel(Ch), + rabbit_ct_client_helpers:close_connection(Conn), + ok. + +connection_count(Config) -> + Conn = rabbit_ct_client_helpers:open_connection(Config, 0), + + ?assertEqual(1, rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_connection_tracking, count, [])), + + rabbit_ct_client_helpers:close_connection(Conn), + ok. + +connection_lookup(Config) -> + Conn = rabbit_ct_client_helpers:open_connection(Config, 0), + + [Connection] = rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_connection_tracking, list, []), + ?assertMatch(Connection, rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_connection_tracking, + lookup, + [Connection#tracked_connection.name])), + + rabbit_ct_client_helpers:close_connection(Conn), + ok. + +%% --------------------------------------------------------------------------- %% rabbitmqctl helpers. %% --------------------------------------------------------------------------- |