summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--deps/rabbit/src/rabbit_channel_tracking.erl13
-rw-r--r--deps/rabbit/src/rabbit_connection_tracking.erl16
2 files changed, 27 insertions, 2 deletions
diff --git a/deps/rabbit/src/rabbit_channel_tracking.erl b/deps/rabbit/src/rabbit_channel_tracking.erl
index 78ed80971a..323ddf1bab 100644
--- a/deps/rabbit/src/rabbit_channel_tracking.erl
+++ b/deps/rabbit/src/rabbit_channel_tracking.erl
@@ -179,7 +179,18 @@ list() ->
lists:foldl(
fun (Node, Acc) ->
Tab = tracked_channel_table_name_for(Node),
- Acc ++ mnesia:dirty_match_object(Tab, #tracked_channel{_ = '_'})
+ try
+ Acc ++
+ mnesia:dirty_match_object(Tab, #tracked_channel{_ = '_'})
+ catch
+ exit:{aborted, {no_exists, [Tab, _]}} ->
+ %% The table might not exist yet (or is already gone)
+ %% between the time rabbit_nodes:all_running() runs and
+ %% returns a specific node, and
+ %% mnesia:dirty_match_object() is called for that node's
+ %% table.
+ Acc
+ end
end, [], rabbit_nodes:all_running()).
-spec list_of_user(rabbit_types:username()) -> [rabbit_types:tracked_channel()].
diff --git a/deps/rabbit/src/rabbit_connection_tracking.erl b/deps/rabbit/src/rabbit_connection_tracking.erl
index fd37ee049b..10354925ab 100644
--- a/deps/rabbit/src/rabbit_connection_tracking.erl
+++ b/deps/rabbit/src/rabbit_connection_tracking.erl
@@ -351,7 +351,18 @@ list() ->
lists:foldl(
fun (Node, Acc) ->
Tab = tracked_connection_table_name_for(Node),
- Acc ++ mnesia:dirty_match_object(Tab, #tracked_connection{_ = '_'})
+ try
+ Acc ++
+ mnesia:dirty_match_object(Tab, #tracked_connection{_ = '_'})
+ catch
+ exit:{aborted, {no_exists, [Tab, _]}} ->
+ %% The table might not exist yet (or is already gone)
+ %% between the time rabbit_nodes:all_running() runs and
+ %% returns a specific node, and
+ %% mnesia:dirty_match_object() is called for that node's
+ %% table.
+ Acc
+ end
end, [], rabbit_nodes:all_running()).
-spec count() -> non_neg_integer().
@@ -360,6 +371,9 @@ count() ->
lists:foldl(
fun (Node, Acc) ->
Tab = tracked_connection_table_name_for(Node),
+ %% mnesia:table_info() returns 0 if the table doesn't exist. We
+ %% don't need the same kind of protection as the list() function
+ %% above.
Acc + mnesia:table_info(Tab, size)
end, 0, rabbit_nodes:all_running()).