Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMickaël Rémond <mickael.remond@process-one.net>2006-01-13 21:05:10 +0300
committerMickaël Rémond <mickael.remond@process-one.net>2006-01-13 21:05:10 +0300
commitc7bafe005698625a092e0359414b09ea066a25c0 (patch)
tree592a911af2b51976b068b9dbd36431c243a4ce11 /src
parent54a1ced6f6f35724265f5bdbf4193bae9ddd461b (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.erl13
-rw-r--r--src/odbc/ejabberd_odbc_sup.erl2
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,