fix: restart oracle resources at relup

This commit is contained in:
Shawn 2023-01-30 14:53:20 +08:00
parent ae4b4f9e60
commit e459180015
3 changed files with 55 additions and 14 deletions

View File

@ -1,10 +1,13 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.4.14",[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}]},
{"4.4.13",[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}]},
[{<<"4\\.4\\.1[3-4]">>,
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
]},
{"4.4.12",
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine_jwt_worker,brutal_purge,soft_purge,[]},
{update,emqx_rule_engine_jwt_sup,supervisor},
{load_module,emqx_rule_engine_jwt,brutal_purge,soft_purge,[]}]},
@ -16,7 +19,8 @@
{load_module,emqx_rule_engine_sup,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_engine_sup,ensure_api_delegator_started,[]}},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
]},
{"4.4.10",
[{add_module,emqx_rule_engine_jwt},
{add_module,emqx_rule_engine_jwt_worker},
@ -222,10 +226,13 @@
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.4.14",[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}]},
{"4.4.13",[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}]},
[{<<"4\\.4\\.1[3-4]">>,
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
]},
{"4.4.12",
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine_jwt_worker,brutal_purge,soft_purge,[]},
{update,emqx_rule_engine_jwt_sup,supervisor},
{load_module,emqx_rule_engine_jwt,brutal_purge,soft_purge,[]}]},

View File

@ -36,6 +36,7 @@
, create_resource/1
, test_resource/1
, start_resource/1
, start_all_resources_of_type/1
, get_resource_status/1
, is_resource_alive/1
, is_resource_alive/2
@ -354,19 +355,27 @@ do_check_and_update_resource(#{id := Id, type := Type, description := NewDescrip
-spec(start_resource(resource_id()) -> ok | {error, Reason :: term()}).
start_resource(ResId) ->
case emqx_rule_registry:find_resource(ResId) of
{ok, #resource{type = ResType, config = Config}} ->
{ok, #resource_type{on_create = {Mod, Create}}}
= emqx_rule_registry:find_resource_type(ResType),
try
init_resource_with_retrier(Mod, Create, ResId, Config),
refresh_actions_of_a_resource(ResId)
catch
throw:Reason -> {error, Reason}
end;
{ok, Res} ->
do_start_resource(Res);
not_found ->
{error, {resource_not_found, ResId}}
end.
do_start_resource(#resource{id = ResId, type = ResType, config = Config}) ->
{ok, #resource_type{on_create = {Mod, Create}}}
= emqx_rule_registry:find_resource_type(ResType),
try
init_resource_with_retrier(Mod, Create, ResId, Config),
refresh_actions_of_a_resource(ResId)
catch
throw:Reason -> {error, Reason}
end.
-spec(start_all_resources_of_type(resource_type_name()) -> [{resource_id(), ok | {error, term()}}]).
start_all_resources_of_type(Type) ->
[{ResId, do_start_resource(Res)}
|| #resource{id = ResId} = Res <- emqx_rule_registry:get_resources_by_type(Type)].
-spec(test_resource(#{type := _, config := _, _ => _}) -> ok | {error, Reason :: term()}).
test_resource(#{type := Type} = Params) ->
case emqx_rule_registry:find_resource_type(Type) of

View File

@ -32,6 +32,7 @@ post_release_upgrade(FromRelVsn, _) ->
{_, CurrRelVsn} = ?EMQX_RELEASE,
?INFO("emqx has been upgraded from ~s to ~s!", [FromRelVsn, CurrRelVsn]),
maybe_refresh_jwt_module(FromRelVsn),
_ = maybe_restart_oracle_resources(FromRelVsn),
reload_components().
%% What to do after downgraded to an old release vsn.
@ -93,3 +94,27 @@ maybe_refresh_jwt_module(_) ->
ok.
-endif.
-ifdef(EMQX_ENTERPRISE).
maybe_restart_oracle_resources("4.4." ++ PatchVsn0) ->
try
case list_to_integer(PatchVsn0) of
PatchVsn when PatchVsn =< 14 ->
emqx_rule_engine:start_all_resources_of_type(backend_oracle);
_ -> ok
end
catch
Err:Reason:ST ->
?INFO("maybe_restart_oracle_resources failed: ~p", [{Err, Reason, ST}]),
ok
end;
maybe_restart_oracle_resources(_) ->
ok.
-else.
maybe_restart_oracle_resources(_) ->
ok.
-endif.