fix: update rule_cache when get_rules/0

This commit is contained in:
Shawn 2023-03-31 14:17:06 +08:00
parent 7dbbef30c9
commit e33a5bfc89
2 changed files with 23 additions and 24 deletions

View File

@ -4,21 +4,19 @@
[{"4.4.16",
[{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine_app,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_registry,update_rules_cache,[]}}
]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
]},
{"4.4.15",
[{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine_app,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_registry,update_rules_cache,[]}}]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
]},
{<<"4\\.4\\.1[3-4]">>,
[{load_module,emqx_rule_engine_app,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_registry,update_rules_cache,[]}},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
@ -26,7 +24,6 @@
[{load_module,emqx_rule_engine_app,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_registry,update_rules_cache,[]}},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
@ -42,7 +39,6 @@
{update,emqx_rule_engine_jwt_sup,supervisor},
{load_module,emqx_rule_engine_jwt,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_registry,update_rules_cache,[]}},
{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,[]}},
@ -64,8 +60,8 @@
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_metrics,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_registry,update_rules_cache,[]}}]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
]},
{"4.4.9",
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{add_module,emqx_rule_engine_jwt},
@ -83,7 +79,6 @@
{load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_sqltester,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_registry,update_rules_cache,[]}},
{load_module,emqx_rule_metrics,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
{"4.4.8",
@ -102,7 +97,6 @@
{load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_sqltester,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_registry,update_rules_cache,[]}},
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_metrics,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
@ -124,8 +118,8 @@
{load_module,emqx_rule_utils,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_registry,update_rules_cache,[]}}]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
]},
{"4.4.5",
[{add_module,emqx_rule_engine_jwt},
{add_module,emqx_rule_engine_jwt_worker},
@ -142,7 +136,6 @@
{load_module,emqx_rule_sqltester,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_registry,update_rules_cache,[]}},
{load_module,emqx_rule_utils,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
@ -164,7 +157,6 @@
{load_module,emqx_rule_validator,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_utils,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_registry,update_rules_cache,[]}},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]}]},
@ -189,7 +181,6 @@
{add_module,emqx_rule_date},
{load_module,emqx_rule_maps,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_registry,update_rules_cache,[]}},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
{"4.4.2",
[{add_module,emqx_rule_engine_jwt},
@ -209,7 +200,6 @@
{load_module,emqx_rule_sqltester,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_registry,update_rules_cache,[]}},
{load_module,emqx_rule_metrics,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
{add_module,emqx_rule_date},
@ -237,9 +227,8 @@
{load_module,emqx_rule_utils,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
{add_module,emqx_rule_date},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_registry,update_rules_cache,[]}}
]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}
]},
{"4.4.0",
[{add_module,emqx_rule_engine_jwt},
{add_module,emqx_rule_engine_jwt_worker},
@ -259,7 +248,6 @@
{load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
{add_module,emqx_rule_date},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_registry,update_rules_cache,[]}},
{update,emqx_rule_metrics,{advanced,["4.4.0"]}},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},

View File

@ -165,6 +165,10 @@ dump() ->
start_link() ->
gen_server:start_link({local, ?REGISTRY}, ?MODULE, [], []).
%% Use a single process to protect the cache updating to avoid race conditions
update_rules_cache_locally() ->
gen_server:cast(?REGISTRY, update_rules_cache).
%%------------------------------------------------------------------------------
%% Rule Management
%%------------------------------------------------------------------------------
@ -172,7 +176,9 @@ start_link() ->
-spec(get_rules() -> list(emqx_rule_engine:rule())).
get_rules() ->
case get_rules_from_cache() of
not_found -> get_all_records(?RULE_TAB);
not_found ->
update_rules_cache_locally(),
get_all_records(?RULE_TAB);
CachedRules -> CachedRules
end.
@ -186,7 +192,8 @@ update_rules_cache() ->
put_rules_to_cache(get_all_records(?RULE_TAB)).
clear_rules_cache() ->
persistent_term:erase(?PK_RULE_TAB).
_ = persistent_term:erase(?PK_RULE_TAB),
ok.
get_rules_ordered_by_ts() ->
lists:keysort(#rule.created_at, get_rules()).
@ -472,6 +479,10 @@ handle_call(Req, _From, State) ->
?LOG(error, "[RuleRegistry]: unexpected call - ~p", [Req]),
{reply, ignored, State}.
handle_cast(update_rules_cache, State) ->
_ = update_rules_cache(),
{noreply, State};
handle_cast(Msg, State) ->
?LOG(error, "[RuleRegistry]: unexpected cast ~p", [Msg]),
{noreply, State}.