Bladeren bron

Merge pull request #5907 from k32/mechanical-appup-update

chore(appup): Update appup scripts
k32 4 jaren geleden
bovenliggende
commit
4b098ce3af

+ 21 - 29
apps/emqx_auth_mnesia/src/emqx_auth_mnesia.appup.src

@@ -1,30 +1,22 @@
-%% -*-: erlang -*-
-
+%% -*- mode: erlang -*-
 {VSN,
-  [
-    {"4.3.2", [
-      {load_module,emqx_acl_mnesia_api, brutal_purge,soft_purge,[]},
-      {load_module,emqx_auth_mnesia_api, brutal_purge,soft_purge,[]}
-    ]},
-    {"4.3.1", [
-      {load_module,emqx_auth_mnesia_api, brutal_purge,soft_purge,[]}
-    ]},
-    {"4.3.0", [
-      {load_module,emqx_auth_mnesia_api, brutal_purge,soft_purge,[]}
-    ]},
-    {<<".*">>, []}
-  ],
-  [
-    {"4.3.2", [
-      {load_module,emqx_acl_mnesia_api, brutal_purge,soft_purge,[]},
-      {load_module,emqx_auth_mnesia_api, brutal_purge,soft_purge,[]}
-    ]},
-    {"4.3.1", [
-      {load_module,emqx_auth_mnesia_api, brutal_purge,soft_purge,[]}
-    ]},
-    {"4.3.0", [
-      {load_module,emqx_auth_mnesia_api, brutal_purge,soft_purge,[]}
-    ]},
-    {<<".*">>, []}
-  ]
-}.
+  [{"4.3.2",
+    [{load_module,emqx_acl_mnesia_api,brutal_purge,soft_purge,[]},
+     {load_module,emqx_auth_mnesia_api,brutal_purge,soft_purge,[]}]},
+   {"4.3.1",
+    [{load_module,emqx_acl_mnesia_api,brutal_purge,soft_purge,[]},
+     {load_module,emqx_auth_mnesia_api,brutal_purge,soft_purge,[]}]},
+   {"4.3.0",
+    [{load_module,emqx_acl_mnesia_api,brutal_purge,soft_purge,[]},
+     {load_module,emqx_auth_mnesia_api,brutal_purge,soft_purge,[]}]},
+   {<<".*">>,[]}],
+  [{"4.3.2",
+    [{load_module,emqx_acl_mnesia_api,brutal_purge,soft_purge,[]},
+     {load_module,emqx_auth_mnesia_api,brutal_purge,soft_purge,[]}]},
+   {"4.3.1",
+    [{load_module,emqx_acl_mnesia_api,brutal_purge,soft_purge,[]},
+     {load_module,emqx_auth_mnesia_api,brutal_purge,soft_purge,[]}]},
+   {"4.3.0",
+    [{load_module,emqx_acl_mnesia_api,brutal_purge,soft_purge,[]},
+     {load_module,emqx_auth_mnesia_api,brutal_purge,soft_purge,[]}]},
+   {<<".*">>,[]}]}.

+ 2 - 2
apps/emqx_management/src/emqx_management.appup.src

@@ -1,13 +1,13 @@
 %% -*- mode: erlang -*-
 {VSN,
- [ {<<"4.3.[0-6]">>,
+ [ {<<"4.3.[0-9]">>,
     [ {apply,{minirest,stop_http,['http:management']}},
       {apply,{minirest,stop_http,['https:management']}},
       {restart_application, emqx_management}
     ]},
    {<<".*">>, []}
  ],
- [ {<<"4.3.[0-6]">>,
+ [ {<<"4.3.[0-9]">>,
     [ {apply,{minirest,stop_http,['http:management']}},
       {apply,{minirest,stop_http,['https:management']}},
       {restart_application, emqx_management}

+ 19 - 27
apps/emqx_web_hook/src/emqx_web_hook.appup.src

@@ -1,28 +1,20 @@
-%% -*-: erlang -*-
-
+%% -*- mode: erlang -*-
 {VSN,
-  [
-    {<<"4.3.[0-2]">>, [
-     {apply, {application, stop,[emqx_web_hook]}},
-     {load_module, emqx_web_hook_app, brutal_purge, soft_purge, []},
-     {load_module, emqx_web_hook, brutal_purge, soft_purge, []},
-     {load_module, emqx_web_hook_actions, brutal_purge, soft_purge, []}
-    ]},
-    {<<"4.3.[3-5]">>, [
-      {load_module, emqx_web_hook_actions, brutal_purge, soft_purge, []}
-    ]},
-    {<<".*">>, []}
-  ],
-  [
-    {<<"4.3.[0-2]">>, [
-     {apply, {application, stop, [emqx_web_hook]}},
-     {load_module, emqx_web_hook_app, brutal_purge, soft_purge, []},
-     {load_module, emqx_web_hook, brutal_purge, soft_purge, []},
-     {load_module, emqx_web_hook_actions, brutal_purge, soft_purge, []}
-    ]},
-    {<<"4.3.[3-5]">>, [
-      {load_module, emqx_web_hook_actions, brutal_purge, soft_purge, []}
-    ]},
-    {<<".*">>, []}
-  ]
-}.
+  [{"4.3.5",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
+   {<<"4.3.[0-2]">>,
+    [{apply,{application,stop,[emqx_web_hook]}},
+     {load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
+     {load_module,emqx_web_hook,brutal_purge,soft_purge,[]},
+     {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
+   {<<"4.3.[3-4]">>,
+    [{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
+   {<<".*">>,[]}],
+  [{"4.3.5",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
+   {<<"4.3.[0-2]">>,
+    [{apply,{application,stop,[emqx_web_hook]}},
+     {load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
+     {load_module,emqx_web_hook,brutal_purge,soft_purge,[]},
+     {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
+   {<<"4.3.[3-4]">>,
+    [{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
+   {<<".*">>,[]}]}.

+ 2 - 2
lib-ce/emqx_dashboard/src/emqx_dashboard.appup.src

@@ -1,6 +1,6 @@
 %% -*- mode: erlang -*-
 {VSN,
- [ {<<"4.3.[0-4]">>,
+ [ {<<"4.3.[0-9]">>,
     %% load all plugins
     %% NOTE: this depends on the fact that emqx_dashboard is always
     %% the last application gets upgraded
@@ -10,7 +10,7 @@
     ]},
    {<<".*">>, []}
  ],
- [ {<<"4.3.[0-4]">>,
+ [ {<<"4.3.[0-9]">>,
     [ {apply, {emqx_rule_engine, load_providers, []}}
     , {restart_application, emqx_dashboard}
     , {apply, {emqx_plugins, load, []}}

+ 32 - 13
scripts/update_appup.escript

@@ -49,6 +49,13 @@ default_options() ->
      , src_dirs     => "{src,apps,lib-*}/**/"
      }.
 
+%% App-specific actions that should be added unconditionally to any update/downgrade:
+app_specific_actions(_) ->
+    [].
+
+ignored_apps() ->
+    [emqx_dashboard, emqx_management].
+
 main(Args) ->
     #{current_release := CurrentRelease} = Options = parse_args(Args, default_options()),
     init_globals(Options),
@@ -172,8 +179,8 @@ find_appup_actions(_App, AppIdx, AppIdx) ->
     [];
 find_appup_actions(App, CurrAppIdx, PrevAppIdx = #app{version = PrevVersion}) ->
     {OldUpgrade, OldDowngrade} = find_old_appup_actions(App, PrevVersion),
-    Upgrade = merge_update_actions(diff_app(App, CurrAppIdx, PrevAppIdx), OldUpgrade),
-    Downgrade = merge_update_actions(diff_app(App, PrevAppIdx, CurrAppIdx), OldDowngrade),
+    Upgrade = merge_update_actions(App, diff_app(App, CurrAppIdx, PrevAppIdx), OldUpgrade),
+    Downgrade = merge_update_actions(App, diff_app(App, PrevAppIdx, CurrAppIdx), OldDowngrade),
     if OldUpgrade =:= Upgrade andalso OldDowngrade =:= Downgrade ->
             %% The appup file has been already updated:
             [];
@@ -192,22 +199,24 @@ find_old_appup_actions(App, PrevVersion) ->
         end,
     {ensure_version(PrevVersion, Upgrade0), ensure_version(PrevVersion, Downgrade0)}.
 
-merge_update_actions(Changes, Vsns) ->
+merge_update_actions(App, Changes, Vsns) ->
     lists:map(fun(Ret = {<<".*">>, _}) ->
                       Ret;
                  ({Vsn, Actions}) ->
-                      {Vsn, do_merge_update_actions(Changes, Actions)}
+                      {Vsn, do_merge_update_actions(App, Changes, Actions)}
               end,
               Vsns).
 
-do_merge_update_actions({New0, Changed0, Deleted0}, OldActions) ->
+do_merge_update_actions(App, {New0, Changed0, Deleted0}, OldActions) ->
+    AppSpecific = app_specific_actions(App) -- OldActions,
     AlreadyHandled = lists:flatten(lists:map(fun process_old_action/1, OldActions)),
     New = New0 -- AlreadyHandled,
     Changed = Changed0 -- AlreadyHandled,
     Deleted = Deleted0 -- AlreadyHandled,
     [{load_module, M, brutal_purge, soft_purge, []} || M <- Changed ++ New] ++
         OldActions ++
-        [{delete_module, M} || M <- Deleted].
+        [{delete_module, M} || M <- Deleted] ++
+        AppSpecific.
 
 
 %% @doc Process the existing actions to exclude modules that are
@@ -222,12 +231,13 @@ process_old_action(LoadModule) when is_tuple(LoadModule) andalso
 process_old_action(_) ->
     [].
 
-ensure_version(Version, Versions) ->
-    case lists:keyfind(Version, 1, Versions) of
+ensure_version(Version, OldInstructions) ->
+    OldVersions = [ensure_string(element(1, I)) || I <- OldInstructions],
+    case lists:member(Version, OldVersions) of
         false ->
-            [{Version, []}|Versions];
+            [{Version, []}|OldInstructions];
         _ ->
-            Versions
+            OldInstructions
     end.
 
 read_appup(File) ->
@@ -288,8 +298,9 @@ create_stub(App) ->
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 index_apps(ReleaseDir) ->
-    maps:from_list([index_app(filename:join(ReleaseDir, AppFile)) ||
-                       AppFile <- filelib:wildcard("**/ebin/*.app", ReleaseDir)]).
+    Apps0 = maps:from_list([index_app(filename:join(ReleaseDir, AppFile)) ||
+                               AppFile <- filelib:wildcard("**/ebin/*.app", ReleaseDir)]),
+    maps:without(ignored_apps(), Apps0).
 
 index_app(AppFile) ->
     {ok, [{application, App, Properties}]} = file:consult(AppFile),
@@ -320,7 +331,10 @@ diff_app(App, #app{version = NewVersion, modules = NewModules}, #app{version = O
     NChanges = length(New) + length(Changed) + length(Deleted),
     if NewVersion =:= OldVersion andalso NChanges > 0 ->
             set_invalid(),
-            log("ERROR: Application '~p' contains changes, but its version is not updated", [App]);
+            log("ERROR: Application '~p' contains changes, but its version is not updated~n", [App]);
+       NewVersion > OldVersion ->
+            log("INFO: Application '~p' has been updated: ~p -> ~p~n", [App, OldVersion, NewVersion]),
+            ok;
        true ->
             ok
     end,
@@ -425,3 +439,8 @@ log(Msg) ->
 
 log(Msg, Args) ->
     io:format(standard_error, Msg, Args).
+
+ensure_string(Str) when is_binary(Str) ->
+    binary_to_list(Str);
+ensure_string(Str) when is_list(Str) ->
+    Str.

+ 92 - 93
src/emqx.appup.src

@@ -1,37 +1,36 @@
 %% -*- mode: erlang -*-
-Instructions =
-{"4.3.10",
-  [
-   %% app 4.3.9 was released in e4.3.4(enterprise) but not v4.3.9(opensource)
-   {"4.3.9", [
+{VSN,
+  [{"4.3.9",
+    [{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
+     {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_frame,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-    ]},
-   {"4.3.8", [
-     {load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.8",
+    [{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_frame,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-    ]},
-   {"4.3.7", [
-     {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.7",
+    [{load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_frame,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-    ]},
-   {"4.3.6", [
-     {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.6",
+    [{load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_ctl,brutal_purge,soft_purge,[]},
      {load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_frame,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-    ]},
-   {"4.3.5", [
-     {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.5",
+    [{load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_cm,brutal_purge,soft_purge,[]},
      {load_module,emqx_access_rule,brutal_purge,soft_purge,[]},
@@ -39,10 +38,10 @@ Instructions =
      {load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_frame,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-    ]},
-   {"4.3.4", [
-     {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.4",
+    [{load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_cm,brutal_purge,soft_purge,[]},
      {load_module,emqx_shared_sub,brutal_purge,soft_purge,[]},
@@ -51,10 +50,10 @@ Instructions =
      {load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_frame,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-    ]},
-   {"4.3.3", [
-     {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.3",
+    [{load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_packet,brutal_purge,soft_purge,[]},
      {load_module,emqx_shared_sub,brutal_purge,soft_purge,[]},
@@ -65,10 +64,10 @@ Instructions =
      {load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_frame,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-    ]},
-   {"4.3.2", [
-     {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.2",
+    [{load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_packet,brutal_purge,soft_purge,[]},
      {load_module,emqx_shared_sub,brutal_purge,soft_purge,[]},
@@ -82,10 +81,10 @@ Instructions =
      {load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_frame,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-    ]},
-   {"4.3.1", [
-     {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.1",
+    [{load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_packet,brutal_purge,soft_purge,[]},
      {load_module,emqx_shared_sub,brutal_purge,soft_purge,[]},
@@ -103,9 +102,11 @@ Instructions =
      {load_module,emqx_ctl,brutal_purge,soft_purge,[]},
      {load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-   ]},
-   {"4.3.0", [
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.0",
+    [{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
+     {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_packet,brutal_purge,soft_purge,[]},
@@ -126,43 +127,52 @@ Instructions =
      {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_access_rule,brutal_purge,soft_purge,[]},
      {load_module,emqx_ctl,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-   ]},
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
    {<<".*">>,[]}],
-  [
-   {"4.3.9", [
+  [{"4.3.9",
+    [{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
+     {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_frame,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-    ]},
-   {"4.3.8", [
-     {load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.8",
+    [{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_frame,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-    ]},
-   {"4.3.7", [
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.7",
+    [{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
+     {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_frame,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-    ]},
-   {"4.3.6", [
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.6",
+    [{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
+     {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_ctl,brutal_purge,soft_purge,[]},
      {load_module,emqx_frame,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-    ]},
-   {"4.3.5", [
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.5",
+    [{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
+     {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_cm,brutal_purge,soft_purge,[]},
      {load_module,emqx_access_rule,brutal_purge,soft_purge,[]},
      {load_module,emqx_ctl,brutal_purge,soft_purge,[]},
      {load_module,emqx_frame,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-    ]},
-   {"4.3.4", [
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.4",
+    [{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
+     {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_cm,brutal_purge,soft_purge,[]},
@@ -170,9 +180,11 @@ Instructions =
      {load_module,emqx_access_rule,brutal_purge,soft_purge,[]},
      {load_module,emqx_ctl,brutal_purge,soft_purge,[]},
      {load_module,emqx_frame,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-    ]},
-   {"4.3.3", [
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.3",
+    [{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
+     {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_packet,brutal_purge,soft_purge,[]},
@@ -182,9 +194,11 @@ Instructions =
      {load_module,emqx_access_rule,brutal_purge,soft_purge,[]},
      {load_module,emqx_ctl,brutal_purge,soft_purge,[]},
      {load_module,emqx_frame,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-    ]},
-   {"4.3.2", [
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.2",
+    [{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
+     {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_packet,brutal_purge,soft_purge,[]},
@@ -197,9 +211,11 @@ Instructions =
      {load_module,emqx_access_rule,brutal_purge,soft_purge,[]},
      {load_module,emqx_ctl,brutal_purge,soft_purge,[]},
      {load_module,emqx_frame,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-    ]},
-   {"4.3.1", [
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.1",
+    [{load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
+     {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_packet,brutal_purge,soft_purge,[]},
@@ -216,10 +232,10 @@ Instructions =
      {load_module,emqx_http_lib,brutal_purge,soft_purge,[]},
      {load_module,emqx_access_rule,brutal_purge,soft_purge,[]},
      {load_module,emqx_ctl,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-   ]},
-   {"4.3.0", [
-     {load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {"4.3.0",
+    [{load_module,emqx_alarm_handler,brutal_purge,soft_purge,[]},
      {load_module,emqx_misc,brutal_purge,soft_purge,[]},
      {load_module,emqx_packet,brutal_purge,soft_purge,[]},
      {load_module,emqx_shared_sub,brutal_purge,soft_purge,[]},
@@ -240,23 +256,6 @@ Instructions =
      {load_module,emqx_ctl,brutal_purge,soft_purge,[]},
      {load_module,emqx_pqueue,brutal_purge,soft_purge,[]},
      {load_module,emqx_mqueue,brutal_purge,soft_purge,[]},
-     {load_module,emqx_rpc,brutal_purge,soft_purge,[]}
-   ]},
-   {<<".*">>,[]}]},
-
-%% Always reload emqx_app for emqx_app:get_release/0 to return the correct version
-Mandatory = [{load_module,emqx_app,brutal_purge,soft_purge,[]}],
-
-Append = fun
-  ({<<".*">>, Instrs}) ->
-      {<<".*">>, Instrs};
-  ({Vsn, Instrs}) ->
-      {Vsn, Instrs ++ Mandatory}
-end,
-
-PostProcess = fun({Vsn, UpList, DownList}) ->
-  {Vsn, [Append(Up) || Up <- UpList],
-        [Append(Dn) || Dn <- DownList]}
-end,
-
-PostProcess(Instructions).
+     {load_module,emqx_rpc,brutal_purge,soft_purge,[]},
+     {load_module,emqx_app,brutal_purge,soft_purge,[]}]},
+   {<<".*">>,[]}]}.