refactor(bridge_v2): prefix compatibility functions with bridge_v1

This commit is contained in:
Kjell Winblad 2023-11-04 07:31:27 +01:00 committed by Ivan Dyachkov
parent 729e7df0d5
commit 99031f0dae
5 changed files with 39 additions and 30 deletions

View File

@ -307,7 +307,7 @@ list() ->
emqx:get_raw_config([bridges], #{}) emqx:get_raw_config([bridges], #{})
), ),
BridgeV2Bridges = BridgeV2Bridges =
emqx_bridge_v2:list_and_transform_to_bridge_v1(), emqx_bridge_v2:bridge_v1_list_and_transform(),
BridgeV1Bridges ++ BridgeV2Bridges. BridgeV1Bridges ++ BridgeV2Bridges.
%%BridgeV2Bridges = emqx_bridge_v2:list(). %%BridgeV2Bridges = emqx_bridge_v2:list().
@ -318,7 +318,7 @@ lookup(Id) ->
lookup(Type, Name) -> lookup(Type, Name) ->
case emqx_bridge_v2:is_bridge_v2_type(Type) of case emqx_bridge_v2:is_bridge_v2_type(Type) of
true -> true ->
emqx_bridge_v2:lookup_and_transform_to_bridge_v1(Type, Name); emqx_bridge_v2:bridge_v1_lookup_and_transform(Type, Name);
false -> false ->
RawConf = emqx:get_raw_config([bridges, Type, Name], #{}), RawConf = emqx:get_raw_config([bridges, Type, Name], #{}),
lookup(Type, Name, RawConf) lookup(Type, Name, RawConf)
@ -340,7 +340,7 @@ lookup(Type, Name, RawConf) ->
get_metrics(Type, Name) -> get_metrics(Type, Name) ->
case emqx_bridge_v2:is_bridge_v2_type(Type) of case emqx_bridge_v2:is_bridge_v2_type(Type) of
true -> true ->
case emqx_bridge_v2:is_valid_bridge_v1(Type, Name) of case emqx_bridge_v2:bridge_v1_is_valid(Type, Name) of
true -> true ->
BridgeV2Type = emqx_bridge_v2:bridge_v2_type_to_connector_type(Type), BridgeV2Type = emqx_bridge_v2:bridge_v2_type_to_connector_type(Type),
emqx_bridge_v2:get_metrics(BridgeV2Type, Name); emqx_bridge_v2:get_metrics(BridgeV2Type, Name);
@ -383,7 +383,7 @@ create(BridgeType0, BridgeName, RawConf) ->
}), }),
case emqx_bridge_v2:is_bridge_v2_type(BridgeType) of case emqx_bridge_v2:is_bridge_v2_type(BridgeType) of
true -> true ->
emqx_bridge_v2:split_bridge_v1_config_and_create(BridgeType, BridgeName, RawConf); emqx_bridge_v2:bridge_v1_split_config_and_create(BridgeType, BridgeName, RawConf);
false -> false ->
emqx_conf:update( emqx_conf:update(
emqx_bridge:config_key_path() ++ [BridgeType, BridgeName], emqx_bridge:config_key_path() ++ [BridgeType, BridgeName],

View File

@ -627,7 +627,7 @@ create_bridge(BridgeType, BridgeName, Conf) ->
update_bridge(BridgeType, BridgeName, Conf) -> update_bridge(BridgeType, BridgeName, Conf) ->
case emqx_bridge_v2:is_bridge_v2_type(BridgeType) of case emqx_bridge_v2:is_bridge_v2_type(BridgeType) of
true -> true ->
case emqx_bridge_v2:is_valid_bridge_v1(BridgeType, BridgeName) of case emqx_bridge_v2:bridge_v1_is_valid(BridgeType, BridgeName) of
true -> true ->
create_or_update_bridge(BridgeType, BridgeName, Conf, 200); create_or_update_bridge(BridgeType, BridgeName, Conf, 200);
false -> false ->

View File

@ -130,7 +130,7 @@ reset_metrics(ResourceId) ->
false -> false ->
emqx_resource:reset_metrics(ResourceId); emqx_resource:reset_metrics(ResourceId);
true -> true ->
case emqx_bridge_v2:is_valid_bridge_v1(Type, Name) of case emqx_bridge_v2:bridge_v1_is_valid(Type, Name) of
true -> true ->
BridgeV2Type = emqx_bridge_v2:bridge_v2_type_to_connector_type(Type), BridgeV2Type = emqx_bridge_v2:bridge_v2_type_to_connector_type(Type),
emqx_bridge_v2:reset_metrics(BridgeV2Type, Name); emqx_bridge_v2:reset_metrics(BridgeV2Type, Name);

View File

@ -40,6 +40,8 @@
list/0, list/0,
lookup/2, lookup/2,
create/3, create/3,
%% The remove/2 function is only for internal use as it may create
%% rules with broken dependencies
remove/2, remove/2,
%% The following is the remove function that is called by the HTTP API %% The following is the remove function that is called by the HTTP API
%% It also checks for rule action dependencies and optionally removes %% It also checks for rule action dependencies and optionally removes
@ -73,7 +75,8 @@
-export([ -export([
id/2, id/2,
id/3, id/3,
is_valid_bridge_v1/2 bridge_v1_is_valid/2,
extract_connector_id_from_bridge_v2_id/1
]). ]).
%% Config Update Handler API %% Config Update Handler API
@ -88,17 +91,23 @@
import_config/1 import_config/1
]). ]).
%% Compatibility API %% Bridge V2 Types and Conversions
-export([ -export([
bridge_v2_type_to_connector_type/1, bridge_v2_type_to_connector_type/1,
is_bridge_v2_type/1, is_bridge_v2_type/1
lookup_and_transform_to_bridge_v1/2, ]).
list_and_transform_to_bridge_v1/0,
%% Compatibility Layer API
%% All public functions for the compatibility layer should be prefixed with
%% birdge_v1_
-export([
bridge_v1_lookup_and_transform/2,
bridge_v1_list_and_transform/0,
bridge_v1_check_deps_and_remove/3, bridge_v1_check_deps_and_remove/3,
split_bridge_v1_config_and_create/3, bridge_v1_split_config_and_create/3,
bridge_v1_create_dry_run/2, bridge_v1_create_dry_run/2,
extract_connector_id_from_bridge_v2_id/1,
bridge_v1_type_to_bridge_v2_type/1, bridge_v1_type_to_bridge_v2_type/1,
bridge_v1_id_to_connector_resource_id/1, bridge_v1_id_to_connector_resource_id/1,
bridge_v1_enable_disable/3, bridge_v1_enable_disable/3,
@ -215,7 +224,7 @@ lookup(Type, Name) ->
}} }}
end. end.
-spec list() -> [bridge_v2_info() | {error, term()}]. -spec list() -> [bridge_v2_info()] | {error, term()}.
list() -> list() ->
list_with_lookup_fun(fun lookup/2). list_with_lookup_fun(fun lookup/2).
@ -1009,7 +1018,7 @@ unpack_bridge_conf(Type, PackedConf, TopLevelConf) ->
%% %%
%% * The corresponding bridge v2 should exist %% * The corresponding bridge v2 should exist
%% * The connector for the bridge v2 should have exactly one channel %% * The connector for the bridge v2 should have exactly one channel
is_valid_bridge_v1(BridgeV1Type, BridgeName) -> bridge_v1_is_valid(BridgeV1Type, BridgeName) ->
BridgeV2Type = ?MODULE:bridge_v1_type_to_bridge_v2_type(BridgeV1Type), BridgeV2Type = ?MODULE:bridge_v1_type_to_bridge_v2_type(BridgeV1Type),
case lookup_conf(BridgeV2Type, BridgeName) of case lookup_conf(BridgeV2Type, BridgeName) of
{error, _} -> {error, _} ->
@ -1050,12 +1059,12 @@ is_bridge_v2_type(<<"azure_event_hub_producer">>) ->
is_bridge_v2_type(_) -> is_bridge_v2_type(_) ->
false. false.
list_and_transform_to_bridge_v1() -> bridge_v1_list_and_transform() ->
Bridges = list_with_lookup_fun(fun lookup_and_transform_to_bridge_v1/2), Bridges = list_with_lookup_fun(fun bridge_v1_lookup_and_transform/2),
[B || B <- Bridges, B =/= not_bridge_v1_compatible_error()]. [B || B <- Bridges, B =/= not_bridge_v1_compatible_error()].
lookup_and_transform_to_bridge_v1(BridgeV1Type, Name) -> bridge_v1_lookup_and_transform(BridgeV1Type, Name) ->
case ?MODULE:is_valid_bridge_v1(BridgeV1Type, Name) of case ?MODULE:bridge_v1_is_valid(BridgeV1Type, Name) of
true -> true ->
Type = ?MODULE:bridge_v1_type_to_bridge_v2_type(BridgeV1Type), Type = ?MODULE:bridge_v1_type_to_bridge_v2_type(BridgeV1Type),
case lookup(Type, Name) of case lookup(Type, Name) of
@ -1063,7 +1072,7 @@ lookup_and_transform_to_bridge_v1(BridgeV1Type, Name) ->
ConnectorType = connector_type(Type), ConnectorType = connector_type(Type),
case emqx_connector:lookup(ConnectorType, ConnectorName) of case emqx_connector:lookup(ConnectorType, ConnectorName) of
{ok, Connector} -> {ok, Connector} ->
lookup_and_transform_to_bridge_v1_helper( bridge_v1_lookup_and_transform_helper(
BridgeV1Type, Name, Type, BridgeV2, ConnectorType, Connector BridgeV1Type, Name, Type, BridgeV2, ConnectorType, Connector
); );
Error -> Error ->
@ -1079,7 +1088,7 @@ lookup_and_transform_to_bridge_v1(BridgeV1Type, Name) ->
not_bridge_v1_compatible_error() -> not_bridge_v1_compatible_error() ->
{error, not_bridge_v1_compatible}. {error, not_bridge_v1_compatible}.
lookup_and_transform_to_bridge_v1_helper( bridge_v1_lookup_and_transform_helper(
BridgeV1Type, BridgeName, BridgeV2Type, BridgeV2, ConnectorType, Connector BridgeV1Type, BridgeName, BridgeV2Type, BridgeV2, ConnectorType, Connector
) -> ) ->
ConnectorRawConfig1 = maps:get(raw_config, Connector), ConnectorRawConfig1 = maps:get(raw_config, Connector),
@ -1132,7 +1141,7 @@ lookup_conf(Type, Name) ->
Config Config
end. end.
split_bridge_v1_config_and_create(BridgeV1Type, BridgeName, RawConf) -> bridge_v1_split_config_and_create(BridgeV1Type, BridgeName, RawConf) ->
BridgeV2Type = ?MODULE:bridge_v1_type_to_bridge_v2_type(BridgeV1Type), BridgeV2Type = ?MODULE:bridge_v1_type_to_bridge_v2_type(BridgeV1Type),
%% Check if the bridge v2 exists %% Check if the bridge v2 exists
case lookup_conf(BridgeV2Type, BridgeName) of case lookup_conf(BridgeV2Type, BridgeName) of
@ -1143,7 +1152,7 @@ split_bridge_v1_config_and_create(BridgeV1Type, BridgeName, RawConf) ->
BridgeV1Type, BridgeName, RawConf, PreviousRawConf BridgeV1Type, BridgeName, RawConf, PreviousRawConf
); );
_Conf -> _Conf ->
case ?MODULE:is_valid_bridge_v1(BridgeV1Type, BridgeName) of case ?MODULE:bridge_v1_is_valid(BridgeV1Type, BridgeName) of
true -> true ->
%% Using remove + create as update, hence do not delete deps. %% Using remove + create as update, hence do not delete deps.
RemoveDeps = [], RemoveDeps = [],
@ -1378,7 +1387,7 @@ bridge_v1_id_to_connector_resource_id(BridgeId) ->
end. end.
bridge_v1_enable_disable(Action, BridgeType, BridgeName) -> bridge_v1_enable_disable(Action, BridgeType, BridgeName) ->
case emqx_bridge_v2:is_valid_bridge_v1(BridgeType, BridgeName) of case emqx_bridge_v2:bridge_v1_is_valid(BridgeType, BridgeName) of
true -> true ->
bridge_v1_enable_disable_helper( bridge_v1_enable_disable_helper(
Action, Action,
@ -1423,7 +1432,7 @@ bridge_v1_start(BridgeV1Type, Name) ->
bridge_v1_operation_helper(BridgeV1Type, Name, ConnectorOpFun, DoHealthCheck) -> bridge_v1_operation_helper(BridgeV1Type, Name, ConnectorOpFun, DoHealthCheck) ->
BridgeV2Type = ?MODULE:bridge_v1_type_to_bridge_v2_type(BridgeV1Type), BridgeV2Type = ?MODULE:bridge_v1_type_to_bridge_v2_type(BridgeV1Type),
case emqx_bridge_v2:is_valid_bridge_v1(BridgeV1Type, Name) of case emqx_bridge_v2:bridge_v1_is_valid(BridgeV1Type, Name) of
true -> true ->
connector_operation_helper_with_conf( connector_operation_helper_with_conf(
BridgeV2Type, BridgeV2Type,

View File

@ -264,17 +264,17 @@ t_create_dry_run_connector_does_not_exist(_) ->
BridgeConf = (bridge_config())#{<<"connector">> => <<"connector_does_not_exist">>}, BridgeConf = (bridge_config())#{<<"connector">> => <<"connector_does_not_exist">>},
{error, _} = emqx_bridge_v2:create_dry_run(bridge_type(), BridgeConf). {error, _} = emqx_bridge_v2:create_dry_run(bridge_type(), BridgeConf).
t_is_valid_bridge_v1(_) -> t_bridge_v1_is_valid(_) ->
{ok, _} = emqx_bridge_v2:create(bridge_type(), my_test_bridge, bridge_config()), {ok, _} = emqx_bridge_v2:create(bridge_type(), my_test_bridge, bridge_config()),
true = emqx_bridge_v2:is_valid_bridge_v1(bridge_v1_type, my_test_bridge), true = emqx_bridge_v2:bridge_v1_is_valid(bridge_v1_type, my_test_bridge),
%% Add another channel/bridge to the connector %% Add another channel/bridge to the connector
{ok, _} = emqx_bridge_v2:create(bridge_type(), my_test_bridge_2, bridge_config()), {ok, _} = emqx_bridge_v2:create(bridge_type(), my_test_bridge_2, bridge_config()),
false = emqx_bridge_v2:is_valid_bridge_v1(bridge_v1_type, my_test_bridge), false = emqx_bridge_v2:bridge_v1_is_valid(bridge_v1_type, my_test_bridge),
ok = emqx_bridge_v2:remove(bridge_type(), my_test_bridge), ok = emqx_bridge_v2:remove(bridge_type(), my_test_bridge),
true = emqx_bridge_v2:is_valid_bridge_v1(bridge_v1_type, my_test_bridge_2), true = emqx_bridge_v2:bridge_v1_is_valid(bridge_v1_type, my_test_bridge_2),
ok = emqx_bridge_v2:remove(bridge_type(), my_test_bridge_2), ok = emqx_bridge_v2:remove(bridge_type(), my_test_bridge_2),
%% Non existing bridge is a valid Bridge V1 %% Non existing bridge is a valid Bridge V1
true = emqx_bridge_v2:is_valid_bridge_v1(bridge_v1_type, my_test_bridge), true = emqx_bridge_v2:bridge_v1_is_valid(bridge_v1_type, my_test_bridge),
ok. ok.
t_manual_health_check(_) -> t_manual_health_check(_) ->