summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Lebedeff <binarin@gmail.com>2015-10-20 21:17:14 +0300
committerAlexey Lebedeff <binarin@gmail.com>2015-10-20 21:22:17 +0300
commit83e971df6b6693bb885bd57191f3e87a2b2ce3d1 (patch)
treec8acca6f64ff0d0f1a0c40b8a9c3551a35efdbc7
parent88328fe18ee5ba1cb8a01797050cc1443669be5d (diff)
downloadrabbitmq-server-git-83e971df6b6693bb885bd57191f3e87a2b2ce3d1.tar.gz
Add `exclusive` item to `rabbitmqctl list_queues`
In addition to owner_pid, which makes little sense to beginners. References #371
-rw-r--r--docs/rabbitmqctl.1.xml5
-rw-r--r--src/rabbit_amqqueue_process.erl5
-rw-r--r--test/src/rabbit_tests.erl10
3 files changed, 17 insertions, 3 deletions
diff --git a/docs/rabbitmqctl.1.xml b/docs/rabbitmqctl.1.xml
index 4a5e315ecd..74ef71108e 100644
--- a/docs/rabbitmqctl.1.xml
+++ b/docs/rabbitmqctl.1.xml
@@ -1230,6 +1230,11 @@
queue is non-exclusive.</para></listitem>
</varlistentry>
<varlistentry>
+ <term>exclusive</term>
+ <listitem><para>True if queue is exclusive (i.e. has
+ owner_pid), false otherwise</para></listitem>
+ </varlistentry>
+ <varlistentry>
<term>exclusive_consumer_pid</term>
<listitem><para>Id of the Erlang process representing the channel of the
exclusive consumer subscribed to this queue. Empty if
diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl
index 15fde37c9c..452047fdb2 100644
--- a/src/rabbit_amqqueue_process.erl
+++ b/src/rabbit_amqqueue_process.erl
@@ -92,7 +92,8 @@
durable,
auto_delete,
arguments,
- owner_pid
+ owner_pid,
+ exclusive
]).
-define(INFO_KEYS, [pid | ?CREATION_EVENT_KEYS ++ ?STATISTICS_KEYS -- [name]]).
@@ -828,6 +829,8 @@ i(owner_pid, #q{q = #amqqueue{exclusive_owner = none}}) ->
'';
i(owner_pid, #q{q = #amqqueue{exclusive_owner = ExclusiveOwner}}) ->
ExclusiveOwner;
+i(exclusive, #q{q = #amqqueue{exclusive_owner = ExclusiveOwner}}) ->
+ is_pid(ExclusiveOwner);
i(policy, #q{q = Q}) ->
case rabbit_policy:name(Q) of
none -> '';
diff --git a/test/src/rabbit_tests.erl b/test/src/rabbit_tests.erl
index 2235717ebf..e7df47a3d8 100644
--- a/test/src/rabbit_tests.erl
+++ b/test/src/rabbit_tests.erl
@@ -1192,17 +1192,23 @@ test_queue_master_location_policy_validation() ->
test_server_status() ->
%% create a few things so there is some useful information to list
{_Writer, Limiter, Ch} = test_channel(),
- [Q, Q2] = [Queue || Name <- [<<"foo">>, <<"bar">>],
+ [Q, Q2] = [Queue || {Name, Owner} <- [{<<"foo">>, none}, {<<"bar">>, self()}],
{new, Queue = #amqqueue{}} <-
[rabbit_amqqueue:declare(
rabbit_misc:r(<<"/">>, queue, Name),
- false, false, [], none)]],
+ false, false, [], Owner)]],
ok = rabbit_amqqueue:basic_consume(
Q, true, Ch, Limiter, false, 0, <<"ctag">>, true, [], undefined),
%% list queues
ok = info_action(list_queues, rabbit_amqqueue:info_keys(), true),
+ %% as we have no way to collect output of info_action/3 call, the only way
+ %% we can test individual queueinfoitems is by directly calling
+ %% rabbit_amqqueue:info/2
+ [{exclusive, false}] = rabbit_amqqueue:info(Q, [exclusive]),
+ [{exclusive, true}] = rabbit_amqqueue:info(Q2, [exclusive]),
+
%% list exchanges
ok = info_action(list_exchanges, rabbit_exchange:info_keys(), true),