fix(mqtt-bridge): stop respecting `clean_start` config parameter
We are ignoring the user configuration because there's currently no reliable way to ensure proper session recovery according to the MQTT spec.
This commit is contained in:
parent
ca5c192f4b
commit
0912f13c1f
|
@ -242,6 +242,29 @@ t_mqtt_conn_bridge_ingress(_) ->
|
||||||
|
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
|
t_mqtt_conn_bridge_ignores_clean_start(_) ->
|
||||||
|
BridgeName = atom_to_binary(?FUNCTION_NAME),
|
||||||
|
BridgeID = create_bridge(
|
||||||
|
?SERVER_CONF(<<"user1">>)#{
|
||||||
|
<<"type">> => ?TYPE_MQTT,
|
||||||
|
<<"name">> => BridgeName,
|
||||||
|
<<"ingress">> => ?INGRESS_CONF,
|
||||||
|
<<"clean_start">> => false
|
||||||
|
}
|
||||||
|
),
|
||||||
|
|
||||||
|
{ok, 200, BridgeJSON} = request(get, uri(["bridges", BridgeID]), []),
|
||||||
|
Bridge = jsx:decode(BridgeJSON),
|
||||||
|
|
||||||
|
%% verify that there's no `clean_start` in response
|
||||||
|
?assertEqual(#{}, maps:with([<<"clean_start">>], Bridge)),
|
||||||
|
|
||||||
|
%% delete the bridge
|
||||||
|
{ok, 204, <<>>} = request(delete, uri(["bridges", BridgeID]), []),
|
||||||
|
{ok, 200, <<"[]">>} = request(get, uri(["bridges"]), []),
|
||||||
|
|
||||||
|
ok.
|
||||||
|
|
||||||
t_mqtt_conn_bridge_ingress_no_payload_template(_) ->
|
t_mqtt_conn_bridge_ingress_no_payload_template(_) ->
|
||||||
User1 = <<"user1">>,
|
User1 = <<"user1">>,
|
||||||
BridgeIDIngress = create_bridge(
|
BridgeIDIngress = create_bridge(
|
||||||
|
|
|
@ -251,7 +251,6 @@ basic_config(
|
||||||
server := Server,
|
server := Server,
|
||||||
proto_ver := ProtoVer,
|
proto_ver := ProtoVer,
|
||||||
bridge_mode := BridgeMode,
|
bridge_mode := BridgeMode,
|
||||||
clean_start := CleanStart,
|
|
||||||
keepalive := KeepAlive,
|
keepalive := KeepAlive,
|
||||||
retry_interval := RetryIntv,
|
retry_interval := RetryIntv,
|
||||||
max_inflight := MaxInflight,
|
max_inflight := MaxInflight,
|
||||||
|
@ -271,7 +270,10 @@ basic_config(
|
||||||
%% non-standard mqtt connection packets will be filtered out by LB.
|
%% non-standard mqtt connection packets will be filtered out by LB.
|
||||||
%% So let's disable bridge_mode.
|
%% So let's disable bridge_mode.
|
||||||
bridge_mode => BridgeMode,
|
bridge_mode => BridgeMode,
|
||||||
clean_start => CleanStart,
|
%% NOTE
|
||||||
|
%% We are ignoring the user configuration here because there's currently no reliable way
|
||||||
|
%% to ensure proper session recovery according to the MQTT spec.
|
||||||
|
clean_start => true,
|
||||||
keepalive => ms_to_s(KeepAlive),
|
keepalive => ms_to_s(KeepAlive),
|
||||||
retry_interval => RetryIntv,
|
retry_interval => RetryIntv,
|
||||||
max_inflight => MaxInflight,
|
max_inflight => MaxInflight,
|
||||||
|
|
|
@ -110,7 +110,9 @@ fields("server_configs") ->
|
||||||
boolean(),
|
boolean(),
|
||||||
#{
|
#{
|
||||||
default => true,
|
default => true,
|
||||||
desc => ?DESC("clean_start")
|
desc => ?DESC("clean_start"),
|
||||||
|
hidden => true,
|
||||||
|
deprecated => {since, "v5.0.16"}
|
||||||
}
|
}
|
||||||
)},
|
)},
|
||||||
{keepalive, mk_duration("MQTT Keepalive.", #{default => "300s"})},
|
{keepalive, mk_duration("MQTT Keepalive.", #{default => "300s"})},
|
||||||
|
|
|
@ -425,18 +425,3 @@ printable_maps(Headers) ->
|
||||||
#{},
|
#{},
|
||||||
Headers
|
Headers
|
||||||
).
|
).
|
||||||
|
|
||||||
%% TODO
|
|
||||||
% maybe_destroy_session(#{connect_opts := ConnectOpts = #{clean_start := false}} = State) ->
|
|
||||||
% try
|
|
||||||
% %% Destroy session if clean_start is not set.
|
|
||||||
% %% Ignore any crashes, just refresh the clean_start = true.
|
|
||||||
% _ = do_connect(State#{connect_opts => ConnectOpts#{clean_start => true}}),
|
|
||||||
% _ = disconnect(State),
|
|
||||||
% ok
|
|
||||||
% catch
|
|
||||||
% _:_ ->
|
|
||||||
% ok
|
|
||||||
% end;
|
|
||||||
% maybe_destroy_session(_State) ->
|
|
||||||
% ok.
|
|
||||||
|
|
Loading…
Reference in New Issue