diff options
author | Paweł Chmielowski <pawel@process-one.net> | 2022-07-19 14:32:47 +0200 |
---|---|---|
committer | Paweł Chmielowski <pawel@process-one.net> | 2022-07-19 14:32:47 +0200 |
commit | 73167ef1bd8da6d4a1c35583d2d5ce03e3447a06 (patch) | |
tree | 38a57b734d8b4a1d679fb3b94cfd3ea1f95ceb36 /src | |
parent | React to sql driver process exit earlier (diff) |
Make first sql reconnect wait shorter time
Diffstat (limited to 'src')
-rw-r--r-- | src/ejabberd_sql.erl | 13 |
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 |