diff --git a/apps/emqx/src/emqx_router.erl b/apps/emqx/src/emqx_router.erl index 0736a7082..380dddc55 100644 --- a/apps/emqx/src/emqx_router.erl +++ b/apps/emqx/src/emqx_router.erl @@ -92,9 +92,11 @@ ]). -export_type([dest/0]). +-export_type([schemavsn/0]). -type group() :: binary(). -type dest() :: node() | {group(), node()}. +-type schemavsn() :: v1 | v2. %% Operation :: {add, ...} | {delete, ...}. -type batch() :: #{batch_route() => _Operation :: tuple()}. @@ -643,8 +645,6 @@ match_to_route(M) -> -define(PT_SCHEMA_VSN, {?MODULE, schemavsn}). --type schemavsn() :: v1 | v2. - %% @doc Get the schema version in use. %% BPAPI RPC Target @ emqx_router_proto -spec get_schema_vsn() -> schemavsn(). diff --git a/apps/emqx/src/proto/emqx_router_proto_v1.erl b/apps/emqx/src/proto/emqx_router_proto_v1.erl index f1c08f893..78b39f506 100644 --- a/apps/emqx/src/proto/emqx_router_proto_v1.erl +++ b/apps/emqx/src/proto/emqx_router_proto_v1.erl @@ -32,6 +32,6 @@ introduced_in() -> "5.6.0". -spec get_routing_schema_vsn([node()]) -> - [emqx_rpc:erpc(emqx_router:schema_vsn())]. + [emqx_rpc:erpc(emqx_router:schemavsn())]. get_routing_schema_vsn(Nodes) -> erpc:multicall(Nodes, emqx_router, get_schema_vsn, [], ?TIMEOUT). diff --git a/changes/ce/fix-12768.en.md b/changes/ce/fix-12768.en.md index 1de56afee..7d101f1a7 100644 --- a/changes/ce/fix-12768.en.md +++ b/changes/ce/fix-12768.en.md @@ -1 +1,3 @@ +Fixed an issue which may occur when upgrading from versions prior to 5.4 to 5.4 or later. + When the cluster is empty (more precisely, routing tables are empty), try to additionally ask the cluster nodes for the routing schema in use, to make more informed decision about routing storage schema upon startup. This should make routing storage schema less likely to diverge across cluster nodes, especially when the cluster is composed of different versions of EMQX.