diff options
author | Mickaël Rémond <mickael.remond@process-one.net> | 2006-01-13 21:05:10 +0300 |
---|---|---|
committer | Mickaël Rémond <mickael.remond@process-one.net> | 2006-01-13 21:05:10 +0300 |
commit | c7bafe005698625a092e0359414b09ea066a25c0 (patch) | |
tree | 592a911af2b51976b068b9dbd36431c243a4ce11 /src | |
parent | 54a1ced6f6f35724265f5bdbf4193bae9ddd461b (diff) |
* src/odbc/ejabberd_odbc.erl: Added a way to retry database
connection connect for 5 minutes when the connection is lost. No further
connection is retry after 5 minutes (EJAB-22 & EJAB-25)
* src/odbc/ejabberd_odbc_sup.erl: likewise
SVN Revision: 485
Diffstat (limited to 'src')
-rw-r--r-- | src/odbc/ejabberd_odbc.erl | 13 | ||||
-rw-r--r-- | src/odbc/ejabberd_odbc_sup.erl | 2 |
2 files changed, 13 insertions, 2 deletions
diff --git a/src/odbc/ejabberd_odbc.erl b/src/odbc/ejabberd_odbc.erl index 1634ecf0f..2be88c6bf 100644 --- a/src/odbc/ejabberd_odbc.erl +++ b/src/odbc/ejabberd_odbc.erl @@ -171,6 +171,11 @@ code_change(_OldVsn, State, _Extra) -> %% {noreply, State, Timeout} | %% {stop, Reason, State} (terminate/2 is called) %%---------------------------------------------------------------------- +%% We receive the down signal when we loose the MySQL connection (we are +%% monitoring the connection) +%% => We exit and let the supervisor restart the connection. +handle_info({'DOWN', _MonitorRef, process, _Pid, _Info}, State) -> + {stop, connection_dropped, State}; handle_info(_Info, State) -> {noreply, State}. @@ -185,7 +190,6 @@ terminate(_Reason, _State) -> %%%---------------------------------------------------------------------- %%% Internal functions %%%---------------------------------------------------------------------- - sql_query_internal(State, Query) -> case State#state.db_type of odbc -> @@ -223,6 +227,8 @@ odbc_connect(SQLServer) -> {error, Reason} -> ?ERROR_MSG("ODBC connection (~s) failed: ~p~n", [SQLServer, Reason]), + %% If we can't connect we wait for 30 seconds before retrying + timer:sleep(30000), {stop, odbc_connection_failed} end. @@ -237,6 +243,8 @@ pgsql_connect(Server, DB, Username, Password) -> {ok, #state{db_ref = Ref, db_type = pgsql}}; {error, Reason} -> ?ERROR_MSG("PostgreSQL connection failed: ~p~n", [Reason]), + %% If we can't connect we wait for 30 seconds before retrying + timer:sleep(30000), {stop, pgsql_connection_failed} end. @@ -271,9 +279,12 @@ mysql_connect(Server, DB, Username, Password) -> NoLogFun = fun(_Level,_Format,_Argument) -> ok end, case mysql_conn:start(Server, ?MYSQL_PORT, Username, Password, DB, NoLogFun) of {ok, Ref} -> + erlang:monitor(process, Ref), {ok, #state{db_ref = Ref, db_type = mysql}}; {error, Reason} -> ?ERROR_MSG("MySQL connection failed: ~p~n", [Reason]), + %% If we can't connect we wait for 30 seconds before retrying + timer:sleep(30000), {stop, mysql_connection_failed} end. diff --git a/src/odbc/ejabberd_odbc_sup.erl b/src/odbc/ejabberd_odbc_sup.erl index 6d294a448..7bb3a583f 100644 --- a/src/odbc/ejabberd_odbc_sup.erl +++ b/src/odbc/ejabberd_odbc_sup.erl @@ -25,7 +25,7 @@ start_link(Host) -> init([Host]) -> % TODO N = 10, - {ok, {{one_for_one, 10, 1}, + {ok, {{one_for_one, 10, 6}, lists:map( fun(I) -> {I, |