Jelajahi Sumber

fix(rule-engine): fix rule status is not available after the emqx restart

Turtle 4 tahun lalu
induk
melakukan
8fb9170df8

+ 1 - 1
apps/emqx_rule_engine/src/emqx_rule_engine.app.src

@@ -1,6 +1,6 @@
 {application, emqx_rule_engine,
  [{description, "EMQ X Rule Engine"},
-  {vsn, "4.3.3"}, % strict semver, bump manually!
+  {vsn, "4.3.4"}, % strict semver, bump manually!
   {modules, []},
   {registered, [emqx_rule_engine_sup, emqx_rule_registry]},
   {applications, [kernel,stdlib,rulesql,getopt]},

+ 9 - 1
apps/emqx_rule_engine/src/emqx_rule_engine.appup.src

@@ -1,5 +1,5 @@
 %% -*-: erlang -*-
-{"4.3.3",
+{"4.3.4",
  [ {"4.3.0",
     [ {load_module, emqx_rule_funcs, brutal_purge, soft_purge, []}
     , {load_module, emqx_rule_engine, brutal_purge, soft_purge, []}
@@ -14,6 +14,10 @@
    {"4.3.2",
     [ {load_module, emqx_rule_registry, brutal_purge, soft_purge, []}
     , {apply, {emqx_stats, cancel_update, [rule_registery_stats]}}
+    , {load_module, emqx_rule_engine, brutal_purge, soft_purge, []}
+    ]},
+   {"4.3.3",
+    [ {load_module, emqx_rule_engine, brutal_purge, soft_purge, []}
     ]},
    {<<".*">>, []}
  ],
@@ -32,6 +36,10 @@
    {"4.3.2",
     [ {load_module, emqx_rule_registry, brutal_purge, soft_purge, []}
     , {apply, {emqx_stats, cancel_update, [rule_registery_stats]}}
+    , {load_module, emqx_rule_engine, brutal_purge, soft_purge, []}
+    ]},
+   {"4.3.3",
+    [ {load_module, emqx_rule_engine, brutal_purge, soft_purge, []}
     ]},
    {<<".*">>, []}
  ]

+ 8 - 2
apps/emqx_rule_engine/src/emqx_rule_engine.erl

@@ -383,8 +383,14 @@ refresh_resource(Type) when is_atom(Type) ->
     lists:foreach(fun refresh_resource/1,
                   emqx_rule_registry:get_resources_by_type(Type));
 
-refresh_resource(#resource{id = ResId}) ->
-    emqx_rule_monitor:ensure_resource_retrier(ResId, ?T_RETRY).
+refresh_resource(#resource{id = ResId, type = Type, config = Config}) ->
+    try
+        {ok, #resource_type{on_create = {M, F}}} =
+            emqx_rule_registry:find_resource_type(Type),
+        ok = emqx_rule_engine:init_resource(M, F, ResId, Config)
+    catch _:_ ->
+        emqx_rule_monitor:ensure_resource_retrier(ResId, ?T_RETRY)
+    end.
 
 -spec(refresh_rules() -> ok).
 refresh_rules() ->