From dbff02f0708e26c8b77ec7a8fe36090a2f214c80 Mon Sep 17 00:00:00 2001 From: Simon MacMullen Date: Fri, 7 Nov 2014 12:20:42 +0000 Subject: Don't badarg if a process goes away while running this. --- src/rabbit_diagnostics.erl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rabbit_diagnostics.erl b/src/rabbit_diagnostics.erl index 4eafada3..bf45b757 100644 --- a/src/rabbit_diagnostics.erl +++ b/src/rabbit_diagnostics.erl @@ -41,13 +41,13 @@ maybe_stuck(Pids, Timeout) -> maybe_stuck(Pids2, Timeout - 500). looks_stuck(Pid) -> - case process_info(Pid, status) of + case catch process_info(Pid, status) of {status, waiting} -> %% It's tempting to just check for message_queue_len > 0 %% here rather than mess around with stack traces and %% heuristics. But really, sometimes freshly stuck %% processes can have 0 messages... - case erlang:process_info(Pid, current_stacktrace) of + case catch erlang:process_info(Pid, current_stacktrace) of {current_stacktrace, [H|_]} -> maybe_stuck_stacktrace(H); _ -> -- cgit v1.2.1 From abb89db322e5a11102722ded765bf00ae268f6a9 Mon Sep 17 00:00:00 2001 From: Simon MacMullen Date: Wed, 12 Nov 2014 15:58:40 +0000 Subject: Fix forgetting queue when deleting offline. --- src/rabbit_amqqueue.erl | 6 ++++-- src/rabbit_binding.erl | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index 68e96742..2e5a5e8c 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -726,8 +726,10 @@ forget_all_durable(Node) -> forget_node_for_queue(#amqqueue{name = Name, down_slave_nodes = []}) -> - %% No slaves to recover from, queue is gone - rabbit_binding:process_deletions(internal_delete1(Name, true)); + %% No slaves to recover from, queue is gone. + %% Don't process_deletions since that just calls callbacks and we + %% are not really up. + internal_delete1(Name, true); forget_node_for_queue(Q = #amqqueue{down_slave_nodes = [H|T]}) -> %% Promote a slave while down - it'll happily recover as a master diff --git a/src/rabbit_binding.erl b/src/rabbit_binding.erl index 12d4df99..53af2f20 100644 --- a/src/rabbit_binding.erl +++ b/src/rabbit_binding.erl @@ -469,7 +469,10 @@ group_bindings_fold(Fun, SrcName, Acc, Removed, Bindings, OnlyDurable) -> maybe_auto_delete(XName, Bindings, Deletions, OnlyDurable) -> {Entry, Deletions1} = - case mnesia:read({rabbit_exchange, XName}) of + case mnesia:read({case OnlyDurable of + true -> rabbit_durable_exchange; + false -> rabbit_exchange + end, XName}) of [] -> {{undefined, not_deleted, Bindings}, Deletions}; [X] -> case rabbit_exchange:maybe_auto_delete(X, OnlyDurable) of not_deleted -> -- cgit v1.2.1