diff --git a/apps/emqx_sn/src/emqx_sn.appup.src b/apps/emqx_sn/src/emqx_sn.appup.src index 6a4eb66d1..7b0bc91c3 100644 --- a/apps/emqx_sn/src/emqx_sn.appup.src +++ b/apps/emqx_sn/src/emqx_sn.appup.src @@ -1,26 +1,44 @@ %% -*- mode: erlang -*- {VSN, [ - {<<"4\\.3\\.[4-5]">>,[ + {"4.3.5",[ {load_module,emqx_sn_frame,brutal_purge,soft_purge,[]}, - {load_module,emqx_sn_gateway,brutal_purge,soft_purge,[]} + {update,emqx_sn_gateway,{advance,["4.3.5"]}} ]}, - {<<"4.3.[2-3]">>,[ + {"4.3.4",[ + {load_module,emqx_sn_frame,brutal_purge,soft_purge,[]}, + {update,emqx_sn_gateway,{advance,["4.3.4"]}} + ]}, + {"4.3.3",[ {load_module,emqx_sn_registry,brutal_purge,soft_purge,[]}, {load_module,emqx_sn_frame,brutal_purge,soft_purge,[]}, - {load_module,emqx_sn_gateway,brutal_purge,soft_purge,[]} + {update,emqx_sn_gateway,{advance, ["4.3.3"]}} + ]}, + {"4.3.2",[ + {load_module,emqx_sn_registry,brutal_purge,soft_purge,[]}, + {load_module,emqx_sn_frame,brutal_purge,soft_purge,[]}, + {update,emqx_sn_gateway,{advance, ["4.3.2"]}} ]}, {<<"4\\.3\\.[0-1]">>, [{restart_application,emqx_sn}]} ], [ - {<<"4\\.3\\.[4-5]">>,[ + {"4.3.5",[ {load_module,emqx_sn_frame,brutal_purge,soft_purge,[]}, - {load_module,emqx_sn_gateway,brutal_purge,soft_purge,[]} + {update,emqx_sn_gateway,{advance,["4.3.5"]}} ]}, - {<<"4.3.[2-3]">>,[ + {"4.3.4",[ + {load_module,emqx_sn_frame,brutal_purge,soft_purge,[]}, + {update,emqx_sn_gateway,{advance,["4.3.4"]}} + ]}, + {"4.3.3",[ {load_module,emqx_sn_registry,brutal_purge,soft_purge,[]}, {load_module,emqx_sn_frame,brutal_purge,soft_purge,[]}, - {load_module,emqx_sn_gateway,brutal_purge,soft_purge,[]} + {update,emqx_sn_gateway,{advance, ["4.3.3"]}} + ]}, + {"4.3.2",[ + {load_module,emqx_sn_registry,brutal_purge,soft_purge,[]}, + {load_module,emqx_sn_frame,brutal_purge,soft_purge,[]}, + {update,emqx_sn_gateway,{advance, ["4.3.2"]}} ]}, {<<"4\\.3\\.[0-1]">>, [{restart_application,emqx_sn}]} ]}. diff --git a/apps/emqx_sn/src/emqx_sn_gateway.erl b/apps/emqx_sn/src/emqx_sn_gateway.erl index d5c574f8c..3e8c18dc9 100644 --- a/apps/emqx_sn/src/emqx_sn_gateway.erl +++ b/apps/emqx_sn/src/emqx_sn_gateway.erl @@ -683,8 +683,29 @@ terminate(Reason, _StateName, #state{channel = Channel}) -> emqx_channel:terminate(Reason, Channel), ok. -code_change(_Vsn, StateName, State, _Extra) -> - {ok, StateName, State}. +%% in the emqx_sn:v4.3.6, we have added two new fields in the state last: +%% - waiting_sync_topics +%% - previous_outgoings_and_state +code_change({down, _Vsn}, StateName, State, [ToVsn]) -> + case re:run(ToVsn, "4\\.3\\.[2-5]") of + {match, _} -> + NState0 = lists:droplast(lists:droplast(tuple_to_list(State))), + NState = list_to_tuple(lists:reverse(NState0)), + {ok, StateName, NState}; + _ -> + {ok, StateName, State} + end; + +code_change(_Vsn, StateName, State, [FromVsn]) -> + case re:run(FromVsn, "4\\.3\\.[2-5]") of + {match, _} -> + NState = list_to_tuple( + tuple_to_list(State) ++ [[], undefined] + ), + {ok, StateName, NState}; + _ -> + {ok, StateName, State} + end. %%-------------------------------------------------------------------- %% Handle Call/Info