diff options
| -rw-r--r-- | src/rabbit_amqqueue.erl | 14 | ||||
| -rw-r--r-- | src/rabbit_channel.erl | 6 | ||||
| -rw-r--r-- | src/rabbit_classic_queue.erl | 5 | ||||
| -rw-r--r-- | test/dynamic_ha_SUITE.erl | 7 |
4 files changed, 28 insertions, 4 deletions
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index 02d37350b4..78552ae440 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -45,6 +45,9 @@ -export([ensure_rabbit_queue_record_is_initialized/1]). -export([format/1]). -export([delete_immediately_by_resource/1]). +-export([delete_crashed/1, + delete_crashed/2, + delete_crashed_internal/2]). -export([pid_of/1, pid_of/2]). -export([mark_local_durable_queues_stopped/1]). @@ -1409,6 +1412,17 @@ delete_immediately_by_resource(Resources) -> delete(Q, IfUnused, IfEmpty, ActingUser) -> rabbit_queue_type:delete(Q, IfUnused, IfEmpty, ActingUser). +%% delete_crashed* INCLUDED FOR BACKWARDS COMPATBILITY REASONS +delete_crashed(Q) when ?amqqueue_is_classic(Q) -> + rabbit_classic_queue:delete_crashed(Q). + +delete_crashed(Q, ActingUser) when ?amqqueue_is_classic(Q) -> + rabbit_classic_queue:delete_crashed(Q, ActingUser). + +-spec delete_crashed_internal(amqqueue:amqqueue(), rabbit_types:username()) -> 'ok'. +delete_crashed_internal(Q, ActingUser) when ?amqqueue_is_classic(Q) -> + rabbit_classic_queue:delete_crashed_internal(Q, ActingUser). + -spec purge(amqqueue:amqqueue()) -> qlen(). purge(Q) when ?is_amqqueue(Q) -> rabbit_queue_type:purge(Q). diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl index b5c4ca8ca0..b788180b0f 100644 --- a/src/rabbit_channel.erl +++ b/src/rabbit_channel.erl @@ -2709,7 +2709,7 @@ handle_queue_actions(Actions, #ch{} = State0) -> end, State0, Actions). -find_queue_name_from_pid(Pid, QStates) -> +find_queue_name_from_pid(Pid, QStates) when is_pid(Pid) -> Fun = fun(K, _V, undefined) -> {ok, Q} = rabbit_amqqueue:lookup(K), Pids = get_queue_pids(Q), @@ -2718,7 +2718,9 @@ find_queue_name_from_pid(Pid, QStates) -> K; false -> undefined - end + end; + (_K, _V, Acc) -> + Acc end, rabbit_queue_type:fold_state(Fun, undefined, QStates). diff --git a/src/rabbit_classic_queue.erl b/src/rabbit_classic_queue.erl index cd601eb5ca..c9d9b951c9 100644 --- a/src/rabbit_classic_queue.erl +++ b/src/rabbit_classic_queue.erl @@ -336,7 +336,10 @@ info(Q, Items) -> {ok, Result} -> Result; {error, _Err} -> - [] + []; + Result when is_list(Result) -> + %% this is a backwards compatibility clause + Result end. -spec purge(amqqueue:amqqueue()) -> diff --git a/test/dynamic_ha_SUITE.erl b/test/dynamic_ha_SUITE.erl index c881aef8a1..85969135b6 100644 --- a/test/dynamic_ha_SUITE.erl +++ b/test/dynamic_ha_SUITE.erl @@ -969,7 +969,12 @@ wait_for_last_policy(QueueName, NodeA, TestedPolicies, Tries) -> %% Let's wait a bit longer. timer:sleep(1000), wait_for_last_policy(QueueName, NodeA, TestedPolicies, Tries - 1); - {ok, FinalInfo} -> + Result -> + FinalInfo = case Result of + {ok, I} -> I; + _ when is_list(Result) -> + Result + end, %% The last policy is the final state LastPolicy = lists:last(TestedPolicies), case verify_policy(LastPolicy, FinalInfo) of |
