diff options
author | Karl Nilsson <kjnilsson@gmail.com> | 2021-11-09 15:34:44 +0000 |
---|---|---|
committer | Karl Nilsson <kjnilsson@gmail.com> | 2021-11-10 09:10:55 +0000 |
commit | d2fde27b565780c2b443138557c27f7ee650f250 (patch) | |
tree | 52f932eb5ada5dda0b30a546c0666e6e8a874472 | |
parent | e721ab291f2c1ec2a348d917ff4913cf8b1dc7c6 (diff) | |
download | rabbitmq-server-git-qq-init-opts.tar.gz |
Avoid slow mnesia transaction on QQ initqq-init-opts
As we only need to make sure the rabbit_queues table is populated
use a dirty write function that only does this instead. This could potentially
half recovery times for many QQ scenarios.
-rw-r--r-- | deps/rabbit/src/rabbit_amqqueue.erl | 4 | ||||
-rw-r--r-- | deps/rabbit/src/rabbit_quorum_queue.erl | 3 |
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}; |