aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaweł Chmielowski <pawel@process-one.net>2022-07-19 14:32:47 +0200
committerPaweł Chmielowski <pawel@process-one.net>2022-07-19 14:32:47 +0200
commit73167ef1bd8da6d4a1c35583d2d5ce03e3447a06 (patch)
tree38a57b734d8b4a1d679fb3b94cfd3ea1f95ceb36 /src
parentReact to sql driver process exit earlier (diff)
Make first sql reconnect wait shorter time
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_sql.erl13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/ejabberd_sql.erl b/src/ejabberd_sql.erl
index 6a11d0346..7f31668d2 100644
--- a/src/ejabberd_sql.erl
+++ b/src/ejabberd_sql.erl
@@ -74,6 +74,7 @@
{db_ref :: undefined | pid(),
db_type = odbc :: pgsql | mysql | sqlite | odbc | mssql,
db_version :: undefined | non_neg_integer(),
+ reconnect_count = 0 :: non_neg_integer(),
host :: binary(),
pending_requests :: p1_queue:queue(),
overload_reported :: undefined | integer()}).
@@ -375,7 +376,7 @@ connecting(connect, #state{host = Host} = State) ->
State1 = State#state{db_ref = Ref,
pending_requests = PendingRequests},
State2 = get_db_version(State1),
- {next_state, session_established, State2}
+ {next_state, session_established, State2#state{reconnect_count = 0}}
catch _:Reason ->
handle_reconnect(Reason, State)
end;
@@ -467,15 +468,19 @@ print_state(State) -> State.
%%%----------------------------------------------------------------------
%%% Internal functions
%%%----------------------------------------------------------------------
-handle_reconnect(Reason, #state{host = Host} = State) ->
- StartInterval = ejabberd_option:sql_start_interval(Host),
+handle_reconnect(Reason, #state{host = Host, reconnect_count = RC} = State) ->
+ StartInterval0 = ejabberd_option:sql_start_interval(Host),
+ StartInterval = case RC of
+ 0 -> erlang:min(5000, StartInterval0);
+ _ -> StartInterval0
+ end,
?WARNING_MSG("~p connection failed:~n"
"** Reason: ~p~n"
"** Retry after: ~B seconds",
[State#state.db_type, Reason,
StartInterval div 1000]),
p1_fsm:send_event_after(StartInterval, connect),
- {next_state, connecting, State}.
+ {next_state, connecting, State#state{reconnect_count = RC + 1}}.
run_sql_cmd(Command, From, State, Timestamp) ->
case current_time() >= Timestamp of