summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <klishinm@vmware.com>2021-11-12 16:24:06 +0300
committerGitHub <noreply@github.com>2021-11-12 16:24:06 +0300
commit478b7b28ca88d9e898a8dd1457460745efd14ce4 (patch)
tree5792c69e9580f9cf7c72657bc24efbf64f07afda
parent491c38e96bab86d7b6529a174582f62353e7e0d1 (diff)
parentec63ea9fe91b969ebb58554984249983db105984 (diff)
downloadrabbitmq-server-git-478b7b28ca88d9e898a8dd1457460745efd14ce4.tar.gz
Merge pull request #3709 from rabbitmq/mergify/bp/v3.9.x/pr-3676
Avoid slow mnesia transaction on QQ init (backport #3676)
-rw-r--r--deps/rabbit/src/rabbit_amqqueue.erl4
-rw-r--r--deps/rabbit/src/rabbit_quorum_queue.erl3
2 files changed, 6 insertions, 1 deletions
diff --git a/deps/rabbit/src/rabbit_amqqueue.erl b/deps/rabbit/src/rabbit_amqqueue.erl
index c7c774dee0..a10b30e0a5 100644
--- a/deps/rabbit/src/rabbit_amqqueue.erl
+++ b/deps/rabbit/src/rabbit_amqqueue.erl
@@ -7,6 +7,7 @@
-module(rabbit_amqqueue).
+-export([store_queue_ram_dirty/1]).
-export([warn_file_limit/0]).
-export([recover/1, stop/1, start/1, declare/6, declare/7,
delete_immediately/1, delete_exclusive/2, delete/4, purge/1,
@@ -330,6 +331,9 @@ store_queue(Q) when not ?amqqueue_is_durable(Q) ->
store_queue_ram(Q) ->
ok = mnesia:write(rabbit_queue, rabbit_queue_decorator:set(Q), write).
+store_queue_ram_dirty(Q) ->
+ ok = mnesia:dirty_write(rabbit_queue, rabbit_queue_decorator:set(Q)).
+
-spec update_decorators(name()) -> 'ok'.
update_decorators(Name) ->
diff --git a/deps/rabbit/src/rabbit_quorum_queue.erl b/deps/rabbit/src/rabbit_quorum_queue.erl
index 445345bccd..62a08c5113 100644
--- a/deps/rabbit/src/rabbit_quorum_queue.erl
+++ b/deps/rabbit/src/rabbit_quorum_queue.erl
@@ -569,7 +569,8 @@ recover(_Vhost, Queues) ->
%% present in the rabbit_queue table and not just in
%% rabbit_durable_queue
%% So many code paths are dependent on this.
- {ok, Q} = rabbit_amqqueue:ensure_rabbit_queue_record_is_initialized(Q0),
+ ok = rabbit_amqqueue:store_queue_ram_dirty(Q0),
+ Q = Q0,
case Res of
ok ->
{[Q | R0], F0};