Skip to content

Commit

Permalink
fix(mria): Strictly check compatibility of the replicant with core
Browse files Browse the repository at this point in the history
  • Loading branch information
ieQu1 committed Mar 26, 2024
1 parent ed5a4aa commit 13c6c62
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 2 deletions.
2 changes: 1 addition & 1 deletion apps/emqx/rebar.config
Expand Up @@ -28,7 +28,7 @@
{gproc, {git, "https://github.com/emqx/gproc", {tag, "0.9.0.1"}}},
{cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.9.2"}}},
{esockd, {git, "https://github.com/emqx/esockd", {tag, "5.11.1"}}},
{ekka, {git, "https://github.com/emqx/ekka", {tag, "0.19.0"}}},
{ekka, {git, "https://github.com/emqx/ekka", {branch, "dev/custom-core-compat-cb"}}},
{gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "3.3.1"}}},
{hocon, {git, "https://github.com/emqx/hocon.git", {tag, "0.42.1"}}},
{emqx_http_lib, {git, "https://github.com/emqx/emqx_http_lib.git", {tag, "0.5.3"}}},
Expand Down
28 changes: 28 additions & 0 deletions apps/emqx_machine/src/emqx_machine.erl
Expand Up @@ -51,6 +51,26 @@ start() ->
configure_shard_transports(),
set_mnesia_extra_diagnostic_checks(),
emqx_otel_app:configure_otel_deps(),
%% Register mria callbacks that help to check compatibility of the
%% replicant with the core node. Currently they rely on the exact
%% match of the version of EMQX OTP application:
application:load(mria),
application:load(emqx),
mria_config:register_callback(
lb_custom_info,
fun() ->
get_emqx_vsn()
end
),
mria_config:register_callback(
lb_custom_info_check,
fun
(undefined) ->
false;
(OtherVsn) ->
get_emqx_vsn() =:= OtherVsn
end
),
ekka:start(),
ok.

Expand Down Expand Up @@ -227,3 +247,11 @@ resolve_dist_address_type() ->
_ ->
inet
end.

get_emqx_vsn() ->
case application:get_key(emqx, vsn) of
{ok, Vsn} ->
Vsn;
undefined ->
undefined
end.
2 changes: 2 additions & 0 deletions changes/ce/fix-12786.en.md
@@ -0,0 +1,2 @@
Add a strict check that prevents replicant nodes from connecting to the core nodes running with a different version of EMQX application.
Effectively it means that during the rolling upgrades the replicant nodes can only work if there is at least one core node with the matching EMQX release.
2 changes: 1 addition & 1 deletion rebar.config
Expand Up @@ -83,7 +83,7 @@
{cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.9.2"}}},
{esockd, {git, "https://github.com/emqx/esockd", {tag, "5.11.1"}}},
{rocksdb, {git, "https://github.com/emqx/erlang-rocksdb", {tag, "1.8.0-emqx-2"}}},
{ekka, {git, "https://github.com/emqx/ekka", {tag, "0.19.0"}}},
{ekka, {git, "https://github.com/emqx/ekka", {branch, "dev/custom-core-compat-cb"}}},
{gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "3.3.1"}}},
{grpc, {git, "https://github.com/emqx/grpc-erl", {tag, "0.6.12"}}},
{minirest, {git, "https://github.com/emqx/minirest", {tag, "1.4.0"}}},
Expand Down

0 comments on commit 13c6c62

Please sign in to comment.