summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2019-08-14 15:13:11 +0200
committerJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2019-08-14 15:22:54 +0200
commit7fea125217ced6aec7b48d06c6f267cee7b58973 (patch)
tree097f0ebe4a1d526768e473f473c80c6414f51e74
parent5dad9a1b9e47c9dcf45032910ab81281046716be (diff)
downloadrabbitmq-server-git-7fea125217ced6aec7b48d06c6f267cee7b58973.tar.gz
rabbit_amqqueue: Return empty list in consumers/1 when the queue is gone
This seems to happen in our CI quite frequently with `queue_parallel_SUITE`. In this testsuite, testcases are executed in parallel. At least the `basic_cancel` testcase queries all consumers of all queues: if an unrelated testcase finishes in parallel and thus deletes its queue(s), the call to `consumers_all/1` crashes.
-rw-r--r--src/rabbit_amqqueue.erl7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl
index ad6a183dfc..f740aa7c06 100644
--- a/src/rabbit_amqqueue.erl
+++ b/src/rabbit_amqqueue.erl
@@ -1074,9 +1074,10 @@ consumers(Q) when ?amqqueue_is_classic(Q) ->
delegate:invoke(QPid, {gen_server2, call, [consumers, infinity]});
consumers(Q) when ?amqqueue_is_quorum(Q) ->
QPid = amqqueue:get_pid(Q),
- {ok, {_, Result}, _} = ra:local_query(QPid,
- fun rabbit_fifo:query_consumers/1),
- maps:values(Result).
+ case ra:local_query(QPid, fun rabbit_fifo:query_consumers/1) of
+ {ok, {_, Result}, _} -> maps:values(Result);
+ _ -> []
+ end.
-spec consumer_info_keys() -> rabbit_types:info_keys().