Просмотр исходного кода

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

ieQu1 2 лет назад
Родитель
Сommit
f0ab8e36d1
2 измененных файлов с 160 добавлено и 125 удалено
  1. 114 89
      mix.exs
  2. 46 36
      rebar.config.erl

+ 114 - 89
mix.exs

@@ -326,7 +326,7 @@ defmodule EMQXUmbrella.MixProject do
   end
 
   def applications(edition_type) do
-    [
+    system_apps = [
       crypto: :permanent,
       public_key: :permanent,
       asn1: :permanent,
@@ -339,96 +339,121 @@ defmodule EMQXUmbrella.MixProject do
       redbug: :permanent,
       xmerl: :permanent,
       hocon: :load,
-      telemetry: :permanent,
-      emqx: :load,
-      emqx_conf: :load,
-      emqx_machine: :permanent
-    ] ++
-      if(enable_rocksdb?(),
-        do: [mnesia_rocksdb: :load],
-        else: []
-      ) ++
+      telemetry: :permanent
+    ]
+
+    db_apps =
+      if enable_rocksdb?() do
+        [:mnesia_rocksdb]
+      else
+        []
+      end ++
+        [
+          :mnesia,
+          :mria,
+          :ekka
+        ]
+
+    business_apps =
       [
-        mnesia: :load,
-        ekka: :load,
-        esasl: :load,
-        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
+        :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: :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
-        ]
-      )
+        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
 
   defp is_app(name) do

+ 46 - 36
rebar.config.erl

@@ -386,38 +386,43 @@ overlay_vars_pkg(pkg) ->
     ].
 
 relx_apps(ReleaseType, Edition) ->
-    [
-        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()] ++
+    SystemApps =
+        [
+            kernel,
+            sasl,
+            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 =
         [
-            {mnesia, load},
-            {ekka, load},
-            {esasl, load},
+            emqx,
+            emqx_conf,
+
+            esasl,
             observer_cli,
             tools,
-            {covertool, load},
+            covertool,
             % started by emqx_machine
-            {system_monitor, load},
-            {emqx_utils, load},
+            system_monitor,
+            emqx_utils,
             emqx_http_lib,
             emqx_resource,
             emqx_connector,
@@ -447,13 +452,18 @@ relx_apps(ReleaseType, Edition) ->
             emqx_mysql,
             emqx_plugins
         ] ++
-        [quicer || is_quicer_supported()] ++
-        [bcrypt || provide_bcrypt_release(ReleaseType)] ++
-        %% Started automatically when needed (only needs to be started when the
-        %% port implementation is used)
-        [{jq, load} || is_jq_supported()] ++
-        [{observer, load} || is_app(observer)] ++
-        relx_apps_per_edition(Edition).
+            [quicer || is_quicer_supported()] ++
+            [bcrypt || provide_bcrypt_release(ReleaseType)] ++
+            %% Started automatically when needed (only needs to be started when the
+            %% port implementation is used)
+            [jq || is_jq_supported()] ++
+            [observer || is_app(observer)] ++
+            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) ->
     case application:load(Name) of
@@ -465,7 +475,7 @@ is_app(Name) ->
 relx_apps_per_edition(ee) ->
     [
         emqx_license,
-        {emqx_enterprise, load},
+        emqx_enterprise,
         emqx_bridge_kafka,
         emqx_bridge_pulsar,
         emqx_bridge_gcp_pubsub,