diff --git a/apps/emqx_machine/src/emqx_machine_boot.erl b/apps/emqx_machine/src/emqx_machine_boot.erl index f2490ddef..cdb2c24e8 100644 --- a/apps/emqx_machine/src/emqx_machine_boot.erl +++ b/apps/emqx_machine/src/emqx_machine_boot.erl @@ -133,25 +133,11 @@ basic_reboot_apps() -> RebootListPath = filename:join([PrivDir, "reboot_lists.eterm"]), {ok, [ #{ - common_business_apps := CommonBusinessApps0, + common_business_apps := CommonBusinessApps, ee_business_apps := EEBusinessApps, ce_business_apps := CEBusinessApps } ]} = file:consult(RebootListPath), - Filters0 = maps:from_list([ - {App, is_app(App)} - || App <- [quicer, bcrypt, jq, observer] - ]), - CommonBusinessApps = - filter( - CommonBusinessApps0, - %% We don't need to restart these - Filters0#{ - system_monitor => false, - observer => false, - quicer => false - } - ), EditionSpecificApps = case emqx_release:edition() of ee -> EEBusinessApps; @@ -159,25 +145,12 @@ basic_reboot_apps() -> _ -> [] end, BusinessApps = CommonBusinessApps ++ EditionSpecificApps, - ?BASIC_REBOOT_APPS ++ BusinessApps. + ?BASIC_REBOOT_APPS ++ (BusinessApps -- excluded_apps()). -filter(AppList, Filters) -> - lists:foldr( - fun(App, Acc) -> - AppName = - case App of - {Name, _Type} -> Name; - Name when is_atom(Name) -> Name - end, - ShouldKeep = maps:get(AppName, Filters, true), - case ShouldKeep of - true -> [App | Acc]; - false -> Acc - end - end, - [], - AppList - ). +excluded_apps() -> + OptionalApps = [bcrypt, jq, observer], + [system_monitor, observer_cli] ++ + [App || App <- OptionalApps, not is_app(App)]. is_app(Name) -> case application:load(Name) of diff --git a/mix.exs b/mix.exs index 5094ed07c..6836137a9 100644 --- a/mix.exs +++ b/mix.exs @@ -341,16 +341,6 @@ defmodule EMQXUmbrella.MixProject do } ]} = :file.consult("apps/emqx_machine/priv/reboot_lists.eterm") - db_apps = filter(db_apps, %{mnesia_rocksdb: enable_rocksdb?()}) - - common_business_apps = - filter(common_business_apps, %{ - quicer: enable_quicer?(), - bcrypt: enable_bcrypt?(), - jq: enable_jq?(), - observer: is_app?(:observer) - }) - edition_specific_apps = if edition_type == :enterprise do ee_business_apps @@ -360,24 +350,31 @@ defmodule EMQXUmbrella.MixProject do business_apps = common_business_apps ++ edition_specific_apps - Enum.map(system_apps, fn app -> - if is_atom(app), do: {app, :permanent}, else: app - end) ++ - Enum.map(db_apps, &{&1, :load}) ++ - [emqx_machine: :permanent] ++ - Enum.map(business_apps, &{&1, :load}) + excluded_apps = excluded_apps() + + system_apps = + Enum.map(system_apps, fn app -> + if is_atom(app), do: {app, :permanent}, else: app + end) + + db_apps = Enum.map(db_apps, &{&1, :load}) + business_apps = Enum.map(business_apps, &{&1, :load}) + + [system_apps, db_apps, [emqx_machine: :permanent], business_apps] + |> List.flatten() + |> Keyword.reject(fn {app, _type} -> app in excluded_apps end) end - defp filter(apps, filters) do - Enum.filter(apps, fn app -> - app_name = - case app do - {app_name, _type} -> app_name - app_name when is_atom(app_name) -> app_name - end - - Map.get(filters, app_name, true) - end) + defp excluded_apps() do + %{ + mnesia_rocksdb: enable_rocksdb?(), + quicer: enable_quicer?(), + bcrypt: enable_bcrypt?(), + jq: enable_jq?(), + observer: is_app?(:observer) + } + |> Enum.reject(&elem(&1, 1)) + |> Enum.map(&elem(&1, 0)) end defp is_app?(name) do diff --git a/rebar.config.erl b/rebar.config.erl index a326d6fdc..06dd0f6eb 100644 --- a/rebar.config.erl +++ b/rebar.config.erl @@ -388,45 +388,35 @@ overlay_vars_pkg(pkg) -> relx_apps(ReleaseType, Edition) -> {ok, [ #{ - db_apps := DBApps0, + db_apps := DBApps, system_apps := SystemApps, - common_business_apps := CommonBusinessApps0, + common_business_apps := CommonBusinessApps, ee_business_apps := EEBusinessApps, ce_business_apps := CEBusinessApps } ]} = file:consult("apps/emqx_machine/priv/reboot_lists.eterm"), - DBApps = filter(DBApps0, #{mnesia_rocksdb => is_rocksdb_supported()}), - CommonBusinessApps = - filter(CommonBusinessApps0, #{ - quicer => is_quicer_supported(), - bcrypt => provide_bcrypt_release(ReleaseType), - jq => is_jq_supported(), - observer => is_app(observer) - }), EditionSpecificApps = case Edition of ee -> EEBusinessApps; ce -> CEBusinessApps end, BusinessApps = CommonBusinessApps ++ EditionSpecificApps, + ExcludedApps = excluded_apps(ReleaseType), SystemApps ++ %% EMQX starts the DB and the business applications: - [{App, load} || App <- DBApps] ++ + [{App, load} || App <- (DBApps -- ExcludedApps)] ++ [emqx_machine] ++ - [{App, load} || App <- BusinessApps]. + [{App, load} || App <- (BusinessApps -- ExcludedApps)]. -filter(AppList, Filters) -> - lists:filter( - fun(App) -> - AppName = - case App of - {Name, _Type} -> Name; - Name when is_atom(Name) -> Name - end, - maps:get(AppName, Filters, true) - end, - AppList - ). +excluded_apps(ReleaseType) -> + OptionalApps = [ + {quicer, is_quicer_supported()}, + {bcrypt, provide_bcrypt_release(ReleaseType)}, + {jq, is_jq_supported()}, + {observer, is_app(observer)}, + {mnesia_rocksdb, is_rocksdb_supported()} + ], + [App || {App, false} <- OptionalApps]. is_app(Name) -> case application:load(Name) of