Skip to content

Commit 2808ba4

Browse files
committed
Add khepri_mnesia_migration dependency to sync cluster membership
1 parent eb49dcb commit 2808ba4

File tree

6 files changed

+159
-11
lines changed

6 files changed

+159
-11
lines changed

MODULE.bazel

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,13 @@ erlang_package.git_package(
238238
repository = "rabbitmq/khepri",
239239
)
240240

241+
erlang_package.git_package(
242+
name = "khepri_mnesia_migration",
243+
build_file = "@rabbitmq-server//bazel:BUILD.khepri_mnesia_migration",
244+
repository = "rabbitmq/khepri_mnesia_migration",
245+
commit = "7893583d62ad78602ef3c3d8f8a82426c0926d19",
246+
)
247+
241248
erlang_package.hex_package(
242249
name = "thoas",
243250
build_file = "@rabbitmq-server//bazel:BUILD.thoas",
@@ -356,6 +363,7 @@ use_repo(
356363
"jose",
357364
"json",
358365
"khepri",
366+
"khepri_mnesia_migration",
359367
"observer_cli",
360368
"osiris",
361369
"parallel_stream",

bazel/BUILD.khepri_mnesia_migration

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
load("@rules_erlang//:erlang_bytecode2.bzl", "erlang_bytecode", "erlc_opts")
2+
load("@rules_erlang//:erlang_app.bzl", "erlang_app")
3+
4+
erlc_opts(
5+
name = "erlc_opts",
6+
values = select({
7+
"@rules_erlang//:debug_build": [
8+
"+debug_info",
9+
"+warn_export_vars",
10+
"+warnings_as_errors",
11+
],
12+
"//conditions:default": [
13+
"+debug_info",
14+
"+deterministic",
15+
"+warn_export_vars",
16+
"+warnings_as_errors",
17+
],
18+
}),
19+
visibility = [":__subpackages__"],
20+
)
21+
22+
erlang_bytecode(
23+
name = "other_beam",
24+
srcs = [
25+
"src/khepri_mnesia_migration_app.erl",
26+
"src/khepri_mnesia_migration_sup.erl",
27+
"src/kmm_utils.erl",
28+
"src/m2k_cluster_sync.erl",
29+
"src/m2k_cluster_sync_sup.erl",
30+
"src/m2k_export.erl",
31+
"src/m2k_subscriber.erl",
32+
"src/m2k_table_copy.erl",
33+
"src/m2k_table_copy_sup.erl",
34+
"src/m2k_table_copy_sup_sup.erl",
35+
"src/mnesia_to_khepri.erl",
36+
"src/mnesia_to_khepri_default_converter.erl",
37+
],
38+
outs = [
39+
"ebin/khepri_mnesia_migration_app.beam",
40+
"ebin/khepri_mnesia_migration_sup.beam",
41+
"ebin/kmm_utils.beam",
42+
"ebin/m2k_cluster_sync.beam",
43+
"ebin/m2k_cluster_sync_sup.beam",
44+
"ebin/m2k_export.beam",
45+
"ebin/m2k_subscriber.beam",
46+
"ebin/m2k_table_copy.beam",
47+
"ebin/m2k_table_copy_sup.beam",
48+
"ebin/m2k_table_copy_sup_sup.beam",
49+
"ebin/mnesia_to_khepri.beam",
50+
"ebin/mnesia_to_khepri_default_converter.beam",
51+
],
52+
hdrs = [
53+
"src/kmm_error.hrl",
54+
"src/kmm_logging.hrl",
55+
],
56+
app_name = "khepri_mnesia_migration",
57+
erlc_opts = "//:erlc_opts",
58+
deps = ["@khepri//:erlang_app"],
59+
)
60+
61+
filegroup(
62+
name = "beam_files",
63+
srcs = [":other_beam"],
64+
)
65+
66+
filegroup(
67+
name = "srcs",
68+
srcs = [
69+
"src/khepri_mnesia_migration.app.src",
70+
"src/khepri_mnesia_migration_app.erl",
71+
"src/khepri_mnesia_migration_sup.erl",
72+
"src/kmm_utils.erl",
73+
"src/m2k_cluster_sync.erl",
74+
"src/m2k_cluster_sync_sup.erl",
75+
"src/m2k_export.erl",
76+
"src/m2k_subscriber.erl",
77+
"src/m2k_table_copy.erl",
78+
"src/m2k_table_copy_sup.erl",
79+
"src/m2k_table_copy_sup_sup.erl",
80+
"src/mnesia_to_khepri.erl",
81+
"src/mnesia_to_khepri_default_converter.erl",
82+
],
83+
)
84+
85+
filegroup(
86+
name = "private_hdrs",
87+
srcs = [
88+
"src/kmm_error.hrl",
89+
"src/kmm_logging.hrl",
90+
],
91+
)
92+
93+
filegroup(name = "public_hdrs")
94+
95+
filegroup(name = "priv")
96+
97+
filegroup(
98+
name = "licenses",
99+
srcs = [
100+
"LICENSE-Apache-2.0",
101+
"LICENSE-MPL-2.0",
102+
],
103+
)
104+
105+
filegroup(
106+
name = "public_and_private_hdrs",
107+
srcs = [
108+
":private_hdrs",
109+
":public_hdrs",
110+
],
111+
)
112+
113+
filegroup(
114+
name = "all_srcs",
115+
srcs = [
116+
":public_and_private_hdrs",
117+
":srcs",
118+
],
119+
)
120+
121+
erlang_app(
122+
name = "erlang_app",
123+
srcs = [":all_srcs"],
124+
app_name = "khepri_mnesia_migration",
125+
beam_files = [":beam_files"],
126+
deps = ["@khepri//:erlang_app"],
127+
)
128+
129+
alias(
130+
name = "khepri_mnesia_migration",
131+
actual = ":erlang_app",
132+
visibility = ["//visibility:public"],
133+
)

deps/rabbit/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ DEPS = [
147147
"//deps/rabbit_common:erlang_app",
148148
"@cuttlefish//:erlang_app",
149149
"@khepri//:erlang_app",
150+
"@khepri_mnesia_migration//:erlang_app",
150151
"@ra//:erlang_app",
151152
"@ranch//:erlang_app",
152153
"@stdout_formatter//:erlang_app",

deps/rabbit/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ APPS_DIR := $(CURDIR)/apps
142142
LOCAL_DEPS = sasl rabbitmq_prelaunch os_mon inets compiler public_key crypto ssl syntax_tools xmerl
143143

144144
BUILD_DEPS = rabbitmq_cli
145-
DEPS = ranch rabbit_common ra sysmon_handler stdout_formatter recon redbug observer_cli osiris amqp10_common syslog systemd seshat khepri
145+
DEPS = ranch rabbit_common ra sysmon_handler stdout_formatter recon redbug observer_cli osiris amqp10_common syslog systemd seshat khepri khepri_mnesia_migration
146146
TEST_DEPS = rabbitmq_ct_helpers rabbitmq_ct_client_helpers amqp_client meck proper
147147

148148
PLT_APPS += mnesia
@@ -152,6 +152,7 @@ dep_osiris = git https://github.com/rabbitmq/osiris v1.5.0
152152
dep_systemd = hex 0.6.1
153153
dep_seshat = hex 0.4.0
154154
dep_khepri = git https://github.com/rabbitmq/khepri.git main
155+
dep_khepri_mnesia_migration = git https://github.com/rabbitmq/khepri_mnesia_migration.git main
155156

156157
define usage_xml_to_erl
157158
$(subst __,_,$(patsubst $(DOCS_DIR)/rabbitmq%.1.xml, src/rabbit_%_usage.erl, $(subst -,_,$(1))))

deps/rabbit/src/rabbit_khepri.erl

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -466,20 +466,12 @@ cli_cluster_status() ->
466466

467467
%% For when Khepri is enabled
468468
init_cluster(ClusterNodes) ->
469-
%% TODO this probably returns an empty list! If we don't know the local nodes, we can't exclude from unclustered nodes and it crashes trying to join with itself. Maybe we have to setup khepri here and not in do_join
470469
%% Ensure the local Khepri store is running before we can join it. It
471470
%% could be stopped if RabbitMQ is not running for instance.
472471
ok = setup(),
473472
khepri:info(?RA_CLUSTER_NAME),
474-
475-
ActualNodes = locally_known_nodes(),
476-
UnclusteredNodes = ClusterNodes -- ActualNodes,
477-
case UnclusteredNodes of
478-
[] ->
479-
ok;
480-
_ ->
481-
add_members(UnclusteredNodes)
482-
end.
473+
_ = application:ensure_all_started(khepri_mnesia_migration),
474+
mnesia_to_khepri:sync_cluster_membership(?STORE_ID).
483475

484476
add_members([]) ->
485477
ok;

moduleindex.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,19 @@ khepri:
294294
- khepri_tx
295295
- khepri_tx_adv
296296
- khepri_utils
297+
khepri_mnesia_migration:
298+
- khepri_mnesia_migration_app
299+
- khepri_mnesia_migration_sup
300+
- kmm_utils
301+
- m2k_cluster_sync
302+
- m2k_cluster_sync_sup
303+
- m2k_export
304+
- m2k_subscriber
305+
- m2k_table_copy
306+
- m2k_table_copy_sup
307+
- m2k_table_copy_sup_sup
308+
- mnesia_to_khepri
309+
- mnesia_to_khepri_default_converter
297310
meck:
298311
- meck
299312
- meck_args_matcher

0 commit comments

Comments
 (0)