|
|
@@ -465,62 +465,6 @@ system_continue(Parent, _Debug, State) ->
|
|
|
system_terminate(Reason, _Parent, _Debug, State) ->
|
|
|
terminate(Reason, State).
|
|
|
|
|
|
-system_code_change(State, _Mod, {down, Vsn}, _Extra)
|
|
|
- when Vsn == "4.2.0";
|
|
|
- Vsn == "4.2.1" ->
|
|
|
- Channel = State#state.channel,
|
|
|
- NSerialize = emqx_frame:serialize_fun(State#state.serialize),
|
|
|
- case {State#state.parse_state, element(10, Channel)} of
|
|
|
- {{none, _}, undefined} ->
|
|
|
- {ok, State#state{serialize = NSerialize}};
|
|
|
- {Ps, Quota} ->
|
|
|
- %% BACKW: e4.2.0-e4.2.1
|
|
|
- %% We can't recover/reconstruct anonymous function state for
|
|
|
- %% Parser or Quota consumer. So just close it.
|
|
|
- ?LOG(error, "Unsupport downgrade connection ~0p, peername: ~0p."
|
|
|
- " Due to it have an incomplete frame or unsafed quota counter,"
|
|
|
- " parser_state: ~0p, quota: ~0p."
|
|
|
- " Force close it now!!!", [self(), State#state.peername, Ps, Quota]),
|
|
|
- self() ! {close, unsupported_downgrade_connection_state},
|
|
|
- {ok, State#state{serialize = NSerialize}}
|
|
|
- end;
|
|
|
-
|
|
|
-system_code_change(State, _Mod, Vsn, _Extra)
|
|
|
- when Vsn == "4.2.0";
|
|
|
- Vsn == "4.2.1" ->
|
|
|
- Channel = State#state.channel,
|
|
|
- NChannel =
|
|
|
- case element(10, Channel) of
|
|
|
- undefined -> Channel;
|
|
|
- Quoter ->
|
|
|
- Zone = element(2, Quoter),
|
|
|
- Cks = element(3, Quoter),
|
|
|
- NCks = [case Name == overall_messages_routing of
|
|
|
- true -> Ck#{consumer => Zone};
|
|
|
- _ -> Ck
|
|
|
- end || Ck = #{name := Name} <- Cks],
|
|
|
- setelement(10, Channel, setelement(3, Quoter, NCks))
|
|
|
- end,
|
|
|
-
|
|
|
- NParseState =
|
|
|
- case State#state.parse_state of
|
|
|
- Ps = {none, _} -> Ps;
|
|
|
- Ps when is_function(Ps) ->
|
|
|
- case erlang:fun_info(Ps, env) of
|
|
|
- {_, [Hdr, Opts]} ->
|
|
|
- {{len, #{hdr => Hdr, len => {1, 0}}}, Opts};
|
|
|
- {_, [Bin, Hdr, Len, Opts]} when is_binary(Bin) ->
|
|
|
- {{body, #{hdr => Hdr, len => Len, rest => Bin}}, Opts};
|
|
|
- {_, [Hdr, Multip, Len, Opts]} ->
|
|
|
- {{len, #{hdr => Hdr, len => {Multip, Len}}}, Opts}
|
|
|
- end
|
|
|
- end,
|
|
|
-
|
|
|
- {_, [Ver, MaxSize]} = erlang:fun_info(State#state.serialize, env),
|
|
|
- NSerialize = #{version => Ver, max_size => MaxSize},
|
|
|
-
|
|
|
- {ok, State#state{channel = NChannel, parse_state = NParseState, serialize = NSerialize}};
|
|
|
-
|
|
|
system_code_change(State, _Mod, _OldVsn, _Extra) ->
|
|
|
{ok, State}.
|
|
|
|