Просмотр исходного кода

fix(pgsql connector): better msg when failing to remove statement

Kjell Winblad 1 год назад
Родитель
Сommit
2956e849eb
1 измененных файлов с 14 добавлено и 6 удалено
  1. 14 6
      apps/emqx_postgresql/src/emqx_postgresql.erl

+ 14 - 6
apps/emqx_postgresql/src/emqx_postgresql.erl

@@ -654,8 +654,8 @@ prepare_sql_to_conn(Conn, Prepares) ->
 
 prepare_sql_to_conn(Conn, [], Statements, _Attempts) when is_pid(Conn) ->
     {ok, Statements};
-prepare_sql_to_conn(Conn, [{Key, _} | _Rest], _Statements, _MaxAttempts = 3) when is_pid(Conn) ->
-    {error, {failed_to_remove_prev_prepared_statement, Key}};
+prepare_sql_to_conn(Conn, [{Key, _} | _Rest], _Statements, _MaxAttempts = 2) when is_pid(Conn) ->
+    failed_to_remove_prev_prepared_statement_error();
 prepare_sql_to_conn(
     Conn, [{Key, {SQL, _RowTemplate}} | Rest] = ToPrepare, Statements, Attempts
 ) when is_pid(Conn) ->
@@ -692,11 +692,12 @@ prepare_sql_to_conn(
             ?SLOG(warning, LogMsg),
             case epgsql:close(Conn, statement, Key) of
                 ok ->
-                    ?SLOG(info, #{msg => "pqsql_closed_statement_successfully"});
+                    ?SLOG(info, #{msg => "pqsql_closed_statement_successfully"}),
+                    prepare_sql_to_conn(Conn, ToPrepare, Statements, Attempts + 1);
                 {error, CloseError} ->
-                    ?SLOG(warning, #{msg => "pqsql_close_statement_failed", cause => CloseError})
-            end,
-            prepare_sql_to_conn(Conn, ToPrepare, Statements, Attempts + 1);
+                    ?SLOG(error, #{msg => "pqsql_close_statement_failed", cause => CloseError}),
+                    failed_to_remove_prev_prepared_statement_error()
+            end;
         {error, Error} ->
             TranslatedError = translate_to_log_context(Error),
             LogMsg =
@@ -708,6 +709,13 @@ prepare_sql_to_conn(
             {error, export_error(TranslatedError)}
     end.
 
+failed_to_remove_prev_prepared_statement_error() ->
+    Msg =
+        ("A previous prepared statement for the action already exists and "
+        "we are not able to close it. Please, try to disable and then enable "
+        "the connector to resolve this issue."),
+    {error, unicode:charactes_to_binary(Msg)}.
+
 to_bin(Bin) when is_binary(Bin) ->
     Bin;
 to_bin(Atom) when is_atom(Atom) ->