Skip to content

Commit dbf8a1b

Browse files
committed
issue #13: fix crash when deleting a deduplicating queue
It seems that after the queue deletion, the broker still issues few `info` requests. This caused the queue process to crash as the cache process was already terminated. Signed-off-by: Matteo Cafasso <[email protected]>
1 parent 9293207 commit dbf8a1b

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

lib/rabbit_message_deduplication_queue.ex

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -328,18 +328,20 @@ defmodule RabbitMQ.MessageDeduplicationPlugin.Queue do
328328
passthrough do: msg_rates(qs)
329329
end
330330

331-
def info(atom, dqstate(queue: queue, queue_state: qs)) do
332-
case passthrough do: info(atom, qs) do
333-
queue_info when is_list(queue_info) ->
334-
if duplicate?(queue) do
335-
[cache_info: cache_info(queue)] ++ queue_info
336-
else
337-
queue_info
338-
end
339-
queue_info -> queue_info
331+
def info(:backing_queue_status, dqstate(queue: queue, queue_state: qs)) do
332+
queue_info = passthrough do: info(:backing_queue_status, qs)
333+
334+
if duplicate?(queue) do
335+
[message_deduplication_cache_info: cache_info(queue)] ++ queue_info
336+
else
337+
queue_info
340338
end
341339
end
342340

341+
def info(atom, dqstate(queue_state: qs)) do
342+
passthrough do: info(atom, qs)
343+
end
344+
343345
def invoke(atom, function, state = dqstate(queue_state: qs)) do
344346
passthrough1(state, do: invoke(atom, function, qs))
345347
end
@@ -412,6 +414,12 @@ defmodule RabbitMQ.MessageDeduplicationPlugin.Queue do
412414

413415
# Returns the cache information
414416
defp cache_info(amqqueue(name: name)) do
415-
name |> Common.cache_name() |> MessageCache.info()
417+
cache = Common.cache_name(name)
418+
419+
try do
420+
MessageCache.info(cache)
421+
catch
422+
:exit, {:noproc, {GenServer, :call, [^cache | _]}} -> []
423+
end
416424
end
417425
end

0 commit comments

Comments
 (0)