فهرست منبع

fix(connector): update the connector config failed

Shawn 4 سال پیش
والد
کامیت
cfaad15364
2فایلهای تغییر یافته به همراه15 افزوده شده و 7 حذف شده
  1. 10 5
      apps/emqx_connector/src/emqx_connector_mqtt.erl
  2. 5 2
      apps/emqx_connector/test/emqx_connector_api_SUITE.erl

+ 10 - 5
apps/emqx_connector/src/emqx_connector_mqtt.erl

@@ -129,12 +129,11 @@ on_start(InstId, Conf) ->
     },
     case ?MODULE:create_bridge(BridgeConf) of
         {ok, _Pid} ->
-            case emqx_connector_mqtt_worker:ensure_started(InstanceId) of
-                ok -> {ok, #{name => InstanceId}};
-                {error, Reason} -> {error, Reason}
-            end;
+            ensure_mqtt_worker_started(InstanceId);
         {error, {already_started, _Pid}} ->
-            {ok, #{name => InstanceId}};
+            ok = ?MODULE:drop_bridge(InstanceId),
+            {ok, _} = ?MODULE:create_bridge(BridgeConf),
+            ensure_mqtt_worker_started(InstanceId);
         {error, Reason} ->
             {error, Reason}
     end.
@@ -162,6 +161,12 @@ on_health_check(_InstId, #{name := InstanceId} = State) ->
         _ -> {error, {connector_down, InstanceId}, State}
     end.
 
+ensure_mqtt_worker_started(InstanceId) ->
+    case emqx_connector_mqtt_worker:ensure_started(InstanceId) of
+        ok -> {ok, #{name => InstanceId}};
+        {error, Reason} -> {error, Reason}
+    end.
+
 make_sub_confs(EmptyMap) when map_size(EmptyMap) == 0 ->
     undefined;
 make_sub_confs(undefined) ->

+ 5 - 2
apps/emqx_connector/test/emqx_connector_api_SUITE.erl

@@ -422,9 +422,12 @@ t_mqtt_conn_update2(_) ->
                   , <<"connector">> := ?CONNECTR_ID
                   }, jsx:decode(Bridge)),
     %% we fix the 'server' parameter to a normal one, it should work
-    {ok, 200, Bridge2} = request(put, uri(["connectors", ?CONNECTR_ID]),
+    {ok, 200, _} = request(put, uri(["connectors", ?CONNECTR_ID]),
                                  ?MQTT_CONNECOTR2(<<"127.0.0.1:1883">>)),
-    ?assertMatch(#{<<"status">> := <<"connected">>}, jsx:decode(Bridge2)),
+    {ok, 200, BridgeStr} = request(get, uri(["bridges", ?BRIDGE_ID_EGRESS]), []),
+    ?assertMatch(#{ <<"id">> := ?BRIDGE_ID_EGRESS
+                  , <<"status">> := <<"connected">>
+                  }, jsx:decode(BridgeStr)),
     %% delete the bridge
     {ok, 204, <<>>} = request(delete, uri(["bridges", ?BRIDGE_ID_EGRESS]), []),
     {ok, 200, <<"[]">>} = request(get, uri(["bridges"]), []),