Skip to content

Commit 18d8135

Browse files
Merge pull request #292 from cloudamqp/4_0
Ensure Mnesia is running when Khepri is used as main metadata store
2 parents 1187327 + 028b624 commit 18d8135

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,12 @@ of some kind.
3333

3434
The most recent release of this plugin targets RabbitMQ 4.0.x.
3535

36-
This plugin currently only supports Mnesia for metadata store (do not use it with Khepri).
36+
This plugin can be enabled on a RabbitMQ cluster that uses either Mnesia or Khepri as metadata store.
37+
38+
Warning: the plugin must be disabled during Khepri migration. One
39+
needs to disable this plugin before enabling the `khepri_db` feature
40+
flag and enable it after. This will result in losing all previous
41+
delayed messages.
3742

3843
## Supported Erlang/OTP Versions
3944

src/rabbit_delayed_message.erl

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,13 @@ delay_message(Exchange, Message, Delay) ->
8585
infinity).
8686

8787
setup_mnesia() ->
88+
case rabbit_khepri:is_enabled() of
89+
true ->
90+
ensure_mnesia_running();
91+
false ->
92+
%% Mnesia should already be running
93+
ok
94+
end,
8895
_ = mnesia:create_table(?TABLE_NAME, [{record_name, delay_entry},
8996
{attributes,
9097
record_info(fields, delay_entry)},
@@ -97,6 +104,25 @@ setup_mnesia() ->
97104
{disc_copies, [node()]}]),
98105
rabbit_table:wait([?TABLE_NAME, ?INDEX_TABLE_NAME]).
99106

107+
ensure_mnesia_running() ->
108+
case rabbit_mnesia:is_running() of
109+
false ->
110+
ensure_mnesia_disc_schema(),
111+
rabbit_mnesia:start_mnesia(_CheckConsistency = false);
112+
true ->
113+
ok
114+
end.
115+
116+
ensure_mnesia_disc_schema() ->
117+
case mnesia:system_info(use_dir) of
118+
true ->
119+
%% There is a disc schema already
120+
ok;
121+
false ->
122+
rabbit_misc:ensure_ok(mnesia:create_schema([node()]),
123+
{?MODULE, cannot_create_mnesia_schema})
124+
end.
125+
100126
disable_plugin() ->
101127
_ = mnesia:delete_table(?INDEX_TABLE_NAME),
102128
_ = mnesia:delete_table(?TABLE_NAME),

0 commit comments

Comments
 (0)