فهرست منبع

Merge pull request #7940 from DDDHuang/mqtt_bridge_cs

fix: clean session when destroy mqtt bridge
DDDHuang 3 سال پیش
والد
کامیت
448f9b5c9f
1فایلهای تغییر یافته به همراه14 افزوده شده و 0 حذف شده
  1. 14 0
      apps/emqx_connector/src/mqtt/emqx_connector_mqtt_worker.erl

+ 14 - 0
apps/emqx_connector/src/mqtt/emqx_connector_mqtt_worker.erl

@@ -276,6 +276,20 @@ code_change(_Vsn, State, Data, _Extra) ->
 terminate(_Reason, _StateName, #{replayq := Q} = State) ->
 terminate(_Reason, _StateName, #{replayq := Q} = State) ->
     _ = disconnect(State),
     _ = disconnect(State),
     _ = replayq:close(Q),
     _ = replayq:close(Q),
+    maybe_destroy_session(State).
+
+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.
     ok.
 
 
 %% ensure_started will be deprecated in the future
 %% ensure_started will be deprecated in the future