fix(machine): Don't start business apps before emqx machine

This commit is contained in:
ieQu1 2023-07-18 13:39:33 +02:00
parent f6756ef6f9
commit f0ab8e36d1
2 changed files with 161 additions and 126 deletions

205
mix.exs
View File

@ -326,7 +326,7 @@ defmodule EMQXUmbrella.MixProject do
end end
def applications(edition_type) do def applications(edition_type) do
[ system_apps = [
crypto: :permanent, crypto: :permanent,
public_key: :permanent, public_key: :permanent,
asn1: :permanent, asn1: :permanent,
@ -339,96 +339,121 @@ defmodule EMQXUmbrella.MixProject do
redbug: :permanent, redbug: :permanent,
xmerl: :permanent, xmerl: :permanent,
hocon: :load, hocon: :load,
telemetry: :permanent, telemetry: :permanent
emqx: :load, ]
emqx_conf: :load,
emqx_machine: :permanent db_apps =
] ++ if enable_rocksdb?() do
if(enable_rocksdb?(), [:mnesia_rocksdb]
do: [mnesia_rocksdb: :load], else
else: [] []
) ++ end ++
[ [
mnesia: :load, :mnesia,
ekka: :load, :mria,
esasl: :load, :ekka
observer_cli: :permanent,
tools: :permanent,
covertool: :load,
system_monitor: :load,
emqx_utils: :load,
emqx_http_lib: :permanent,
emqx_resource: :permanent,
emqx_connector: :permanent,
emqx_authn: :permanent,
emqx_authz: :permanent,
emqx_auto_subscribe: :permanent,
emqx_gateway: :permanent,
emqx_gateway_stomp: :permanent,
emqx_gateway_mqttsn: :permanent,
emqx_gateway_coap: :permanent,
emqx_gateway_lwm2m: :permanent,
emqx_gateway_exproto: :permanent,
emqx_exhook: :permanent,
emqx_bridge: :permanent,
emqx_bridge_mqtt: :permanent,
emqx_bridge_http: :permanent,
emqx_rule_engine: :permanent,
emqx_modules: :permanent,
emqx_management: :permanent,
emqx_dashboard: :permanent,
emqx_retainer: :permanent,
emqx_prometheus: :permanent,
emqx_psk: :permanent,
emqx_slow_subs: :permanent,
emqx_mongodb: :permanent,
emqx_redis: :permanent,
emqx_mysql: :permanent,
emqx_plugins: :permanent,
emqx_mix: :none
] ++
if(enable_quicer?(), do: [quicer: :permanent], else: []) ++
if(enable_bcrypt?(), do: [bcrypt: :permanent], else: []) ++
if(enable_jq?(), do: [jq: :load], else: []) ++
if(is_app(:observer),
do: [observer: :load],
else: []
) ++
if(edition_type == :enterprise,
do: [
emqx_license: :permanent,
emqx_enterprise: :load,
emqx_bridge_kafka: :permanent,
emqx_bridge_pulsar: :permanent,
emqx_bridge_gcp_pubsub: :permanent,
emqx_bridge_cassandra: :permanent,
emqx_bridge_opents: :permanent,
emqx_bridge_clickhouse: :permanent,
emqx_bridge_dynamo: :permanent,
emqx_bridge_hstreamdb: :permanent,
emqx_bridge_influxdb: :permanent,
emqx_bridge_iotdb: :permanent,
emqx_bridge_matrix: :permanent,
emqx_bridge_mongodb: :permanent,
emqx_bridge_mysql: :permanent,
emqx_bridge_pgsql: :permanent,
emqx_bridge_redis: :permanent,
emqx_bridge_rocketmq: :permanent,
emqx_bridge_tdengine: :permanent,
emqx_bridge_timescale: :permanent,
emqx_bridge_sqlserver: :permanent,
emqx_oracle: :permanent,
emqx_bridge_oracle: :permanent,
emqx_bridge_rabbitmq: :permanent,
emqx_schema_registry: :permanent,
emqx_eviction_agent: :permanent,
emqx_node_rebalance: :permanent,
emqx_ft: :permanent
],
else: [
emqx_telemetry: :permanent
] ]
)
business_apps =
[
:emqx,
:emqx_conf,
:esasl,
:observer_cli,
:tools,
:covertool,
:system_monitor,
:emqx_utils,
:emqx_http_lib,
:emqx_resource,
:emqx_connector,
:emqx_authn,
:emqx_authz,
:emqx_auto_subscribe,
:emqx_gateway,
:emqx_gateway_stomp,
:emqx_gateway_mqttsn,
:emqx_gateway_coap,
:emqx_gateway_lwm2m,
:emqx_gateway_exproto,
:emqx_exhook,
:emqx_bridge,
:emqx_bridge_mqtt,
:emqx_bridge_http,
:emqx_rule_engine,
:emqx_modules,
:emqx_management,
:emqx_dashboard,
:emqx_retainer,
:emqx_prometheus,
:emqx_psk,
:emqx_slow_subs,
:emqx_mongodb,
:emqx_redis,
:emqx_mysql,
:emqx_plugins,
:emqx_mix
] ++
if enable_quicer?() do
[:quicer]
else
[]
end ++
if enable_bcrypt?() do
[:bcrypt]
else
[]
end ++
if enable_jq?() do
[:jq]
else
[]
end ++
if(is_app(:observer),
do: [:observer],
else: []
) ++
case edition_type do
:enterprise ->
[
:emqx_license,
:emqx_enterprise,
:emqx_bridge_kafka,
:emqx_bridge_pulsar,
:emqx_bridge_gcp_pubsub,
:emqx_bridge_cassandra,
:emqx_bridge_opents,
:emqx_bridge_clickhouse,
:emqx_bridge_dynamo,
:emqx_bridge_hstreamdb,
:emqx_bridge_influxdb,
:emqx_bridge_iotdb,
:emqx_bridge_matrix,
:emqx_bridge_mongodb,
:emqx_bridge_mysql,
:emqx_bridge_pgsql,
:emqx_bridge_redis,
:emqx_bridge_rocketmq,
:emqx_bridge_tdengine,
:emqx_bridge_timescale,
:emqx_bridge_sqlserver,
:emqx_oracle,
:emqx_bridge_oracle,
:emqx_bridge_rabbitmq,
:emqx_schema_registry,
:emqx_eviction_agent,
:emqx_node_rebalance,
:emqx_ft
]
_ ->
[:emqx_telemetry]
end
system_apps ++
Enum.map(db_apps, &{&1, :load}) ++
[emqx_machine: :permanent] ++
Enum.map(business_apps, &{&1, :load})
end end
defp is_app(name) do defp is_app(name) do

View File

@ -386,38 +386,43 @@ overlay_vars_pkg(pkg) ->
]. ].
relx_apps(ReleaseType, Edition) -> relx_apps(ReleaseType, Edition) ->
[ SystemApps =
kernel,
sasl,
crypto,
public_key,
asn1,
syntax_tools,
ssl,
os_mon,
inets,
compiler,
runtime_tools,
redbug,
xmerl,
{hocon, load},
telemetry,
% started by emqx_machine
{emqx, load},
{emqx_conf, load},
emqx_machine
] ++
[{mnesia_rocksdb, load} || is_rocksdb_supported()] ++
[ [
{mnesia, load}, kernel,
{ekka, load}, sasl,
{esasl, load}, crypto,
public_key,
asn1,
syntax_tools,
ssl,
os_mon,
inets,
compiler,
runtime_tools,
redbug,
xmerl,
{hocon, load},
telemetry
],
DBApps =
[mnesia_rocksdb || is_rocksdb_supported()] ++
[
mnesia,
mria,
ekka
],
BusinessApps =
[
emqx,
emqx_conf,
esasl,
observer_cli, observer_cli,
tools, tools,
{covertool, load}, covertool,
% started by emqx_machine % started by emqx_machine
{system_monitor, load}, system_monitor,
{emqx_utils, load}, emqx_utils,
emqx_http_lib, emqx_http_lib,
emqx_resource, emqx_resource,
emqx_connector, emqx_connector,
@ -447,13 +452,18 @@ relx_apps(ReleaseType, Edition) ->
emqx_mysql, emqx_mysql,
emqx_plugins emqx_plugins
] ++ ] ++
[quicer || is_quicer_supported()] ++ [quicer || is_quicer_supported()] ++
[bcrypt || provide_bcrypt_release(ReleaseType)] ++ [bcrypt || provide_bcrypt_release(ReleaseType)] ++
%% Started automatically when needed (only needs to be started when the %% Started automatically when needed (only needs to be started when the
%% port implementation is used) %% port implementation is used)
[{jq, load} || is_jq_supported()] ++ [jq || is_jq_supported()] ++
[{observer, load} || is_app(observer)] ++ [observer || is_app(observer)] ++
relx_apps_per_edition(Edition). relx_apps_per_edition(Edition),
SystemApps ++
%% EMQX starts the DB and the business applications:
[{App, load} || App <- DBApps] ++
[emqx_machine] ++
[{App, load} || App <- BusinessApps].
is_app(Name) -> is_app(Name) ->
case application:load(Name) of case application:load(Name) of
@ -465,7 +475,7 @@ is_app(Name) ->
relx_apps_per_edition(ee) -> relx_apps_per_edition(ee) ->
[ [
emqx_license, emqx_license,
{emqx_enterprise, load}, emqx_enterprise,
emqx_bridge_kafka, emqx_bridge_kafka,
emqx_bridge_pulsar, emqx_bridge_pulsar,
emqx_bridge_gcp_pubsub, emqx_bridge_gcp_pubsub,