summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniil Fedotov <hairyhum@gmail.com>2019-04-10 17:56:18 -0400
committerDaniil Fedotov <hairyhum@gmail.com>2019-04-10 17:58:30 -0400
commite5df4e6ee105900087744ed40e58b8041738b9cd (patch)
treef1298a1ccf56951237f0c5cb027c284d78d45dac
parent99e883e3fedb58270ac6b6b8e83982f4ef3e7038 (diff)
downloadrabbitmq-server-git-e5df4e6ee105900087744ed40e58b8041738b9cd.tar.gz
Do not use transactions in connection tracking process.
The connection tracking process is the only process making changes to the local connections table. There is not much point in having transactions here. Follow-up to #1971 and #1722
-rw-r--r--src/rabbit_connection_tracking.erl52
1 files changed, 20 insertions, 32 deletions
diff --git a/src/rabbit_connection_tracking.erl b/src/rabbit_connection_tracking.erl
index 34c12f41cb..aa5eb15464 100644
--- a/src/rabbit_connection_tracking.erl
+++ b/src/rabbit_connection_tracking.erl
@@ -263,35 +263,29 @@ tracked_connection_per_vhost_table_name_for(Node) ->
register_connection(#tracked_connection{vhost = VHost, id = ConnId, node = Node} = Conn) when Node =:= node() ->
TableName = tracked_connection_table_name_for(Node),
PerVhostTableName = tracked_connection_per_vhost_table_name_for(Node),
- rabbit_misc:execute_mnesia_transaction(
- fun() ->
- %% upsert
- case mnesia:dirty_read(TableName, ConnId) of
- [] ->
- mnesia:write(TableName, Conn, write),
- mnesia:dirty_update_counter(
- PerVhostTableName, VHost, 1);
- [_Row] ->
- ok
- end,
- ok
- end).
+ %% upsert
+ case mnesia:dirty_read(TableName, ConnId) of
+ [] ->
+ mnesia:dirty_write(TableName, Conn),
+ mnesia:dirty_update_counter(
+ PerVhostTableName, VHost, 1);
+ [_Row] ->
+ ok
+ end,
+ ok.
-spec unregister_connection(rabbit_types:connection_name()) -> ok.
unregister_connection(ConnId = {Node, _Name}) when Node =:= node() ->
TableName = tracked_connection_table_name_for(Node),
PerVhostTableName = tracked_connection_per_vhost_table_name_for(Node),
- rabbit_misc:execute_mnesia_transaction(
- fun() ->
- case mnesia:dirty_read(TableName, ConnId) of
- [] -> ok;
- [Row] ->
- mnesia:dirty_update_counter(
- PerVhostTableName, Row#tracked_connection.vhost, -1),
- mnesia:delete({TableName, ConnId})
- end
- end).
+ case mnesia:dirty_read(TableName, ConnId) of
+ [] -> ok;
+ [Row] ->
+ mnesia:dirty_update_counter(
+ PerVhostTableName, Row#tracked_connection.vhost, -1),
+ mnesia:dirty_delete(TableName, ConnId)
+ end.
-spec list() -> [rabbit_types:tracked_connection()].
@@ -350,15 +344,9 @@ count_connections_in(VirtualHost) ->
lists:foldl(fun (Node, Acc) ->
Tab = tracked_connection_per_vhost_table_name_for(Node),
try
- N = case mnesia:transaction(
- fun() ->
- case mnesia:dirty_read({Tab, VirtualHost}) of
- [] -> 0;
- [Val] -> Val#tracked_connection_per_vhost.connection_count
- end
- end) of
- {atomic, Val} -> Val;
- {aborted, _Reason} -> 0
+ N = case mnesia:dirty_read(Tab, VirtualHost) of
+ [] -> 0;
+ [Val] -> Val#tracked_connection_per_vhost.connection_count
end,
Acc + N
catch _:Err ->