diff options
| author | Daniil Fedotov <hairyhum@gmail.com> | 2019-04-10 17:56:18 -0400 |
|---|---|---|
| committer | Daniil Fedotov <hairyhum@gmail.com> | 2019-04-10 17:58:30 -0400 |
| commit | e5df4e6ee105900087744ed40e58b8041738b9cd (patch) | |
| tree | f1298a1ccf56951237f0c5cb027c284d78d45dac | |
| parent | 99e883e3fedb58270ac6b6b8e83982f4ef3e7038 (diff) | |
| download | rabbitmq-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.erl | 52 |
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 -> |
