diff options
| author | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2019-08-14 15:13:11 +0200 |
|---|---|---|
| committer | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2019-08-14 15:22:54 +0200 |
| commit | 7fea125217ced6aec7b48d06c6f267cee7b58973 (patch) | |
| tree | 097f0ebe4a1d526768e473f473c80c6414f51e74 | |
| parent | 5dad9a1b9e47c9dcf45032910ab81281046716be (diff) | |
| download | rabbitmq-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.erl | 7 |
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(). |
