Преглед изворни кода

fix: call odbc:disconnect/1 when sqlserver pool worker is terminated

before this patch emqx would log a few errors each time connector is stopped

fixes EMQX-13224
Ivan Dyachkov пре 1 година
родитељ
комит
28921418a2
1 измењених фајлова са 11 додато и 3 уклоњено
  1. 11 3
      apps/emqx_bridge_sqlserver/src/emqx_bridge_sqlserver_connector.erl

+ 11 - 3
apps/emqx_bridge_sqlserver/src/emqx_bridge_sqlserver_connector.erl

@@ -44,8 +44,11 @@
     on_format_query_result/1
 ]).
 
-%% callbacks for ecpool
--export([connect/1]).
+%% `ecpool_worker' API
+-export([
+    connect/1,
+    disconnect/1
+]).
 
 %% Internal exports used to execute code with ecpool worker
 -export([do_get_status/1, worker_do_insert/3]).
@@ -213,7 +216,8 @@ on_start(
         {password, maps:get(password, Config, emqx_secret:wrap(""))},
         {driver, Driver},
         {database, Database},
-        {pool_size, PoolSize}
+        {pool_size, PoolSize},
+        {on_disconnect, {?MODULE, disconnect, []}}
     ],
 
     State = #{
@@ -350,6 +354,10 @@ connect(Options) ->
     Opts = proplists:get_value(options, Options, []),
     odbc:connect(ConnectStr, Opts).
 
+-spec disconnect(connection_reference()) -> ok | {error, term()}.
+disconnect(ConnectionPid) ->
+    odbc:disconnect(ConnectionPid).
+
 -spec do_get_status(connection_reference()) -> Result :: boolean().
 do_get_status(Conn) ->
     case execute(Conn, <<"SELECT 1">>) of