mirror of
https://github.com/valitydev/epg_connector.git
synced 2024-11-06 08:15:23 +00:00
TD-927: add checkout timeout
This commit is contained in:
parent
d777d65c92
commit
c03df8b8f4
@ -8,13 +8,15 @@
|
|||||||
-export([with/2]).
|
-export([with/2]).
|
||||||
-export([with/3]).
|
-export([with/3]).
|
||||||
|
|
||||||
|
-define(CHECKOUT_TIMEOUT, 5000).
|
||||||
|
|
||||||
query(Pool, Stmt) when is_atom(Pool)->
|
query(Pool, Stmt) when is_atom(Pool)->
|
||||||
query(Pool, Stmt, []);
|
query(Pool, Stmt, []);
|
||||||
query(Conn, Stmt) when is_pid(Conn) ->
|
query(Conn, Stmt) when is_pid(Conn) ->
|
||||||
epgsql:equery(Conn, Stmt).
|
epgsql:equery(Conn, Stmt).
|
||||||
|
|
||||||
query(Pool, Stmt, Params) when is_atom(Pool) ->
|
query(Pool, Stmt, Params) when is_atom(Pool) ->
|
||||||
query(epg_pool_mgr:checkout(Pool), Pool, Stmt, Params);
|
query(get_connection(Pool), Pool, Stmt, Params);
|
||||||
query(Conn, Stmt, Params) when is_pid(Conn) ->
|
query(Conn, Stmt, Params) when is_pid(Conn) ->
|
||||||
epgsql:equery(Conn, Stmt, Params).
|
epgsql:equery(Conn, Stmt, Params).
|
||||||
|
|
||||||
@ -28,7 +30,7 @@ query(Conn, Pool, Stmt, Params) when is_pid(Conn) ->
|
|||||||
Result.
|
Result.
|
||||||
|
|
||||||
transaction(Pool, Fun) when is_atom(Pool) ->
|
transaction(Pool, Fun) when is_atom(Pool) ->
|
||||||
transaction(epg_pool_mgr:checkout(Pool), Pool, Fun);
|
transaction(get_connection(Pool), Pool, Fun);
|
||||||
transaction(Conn, Fun) when is_pid(Conn) ->
|
transaction(Conn, Fun) when is_pid(Conn) ->
|
||||||
epgsql:with_transaction(Conn, Fun).
|
epgsql:with_transaction(Conn, Fun).
|
||||||
|
|
||||||
@ -42,7 +44,7 @@ transaction(Conn, Pool, Fun) when is_pid(Conn) ->
|
|||||||
Result.
|
Result.
|
||||||
|
|
||||||
with(Pool, Fun) when is_atom(Pool) ->
|
with(Pool, Fun) when is_atom(Pool) ->
|
||||||
with(epg_pool_mgr:checkout(Pool), Pool, Fun);
|
with(get_connection(Pool), Pool, Fun);
|
||||||
with(Conn, Fun) when is_pid(Conn) ->
|
with(Conn, Fun) when is_pid(Conn) ->
|
||||||
Fun(Conn).
|
Fun(Conn).
|
||||||
|
|
||||||
@ -52,3 +54,21 @@ with(Conn, Pool, Fun) when is_pid(Conn) ->
|
|||||||
Result = Fun(Conn),
|
Result = Fun(Conn),
|
||||||
ok = epg_pool_mgr:checkin(Pool, self(), Conn),
|
ok = epg_pool_mgr:checkin(Pool, self(), Conn),
|
||||||
Result.
|
Result.
|
||||||
|
%%
|
||||||
|
|
||||||
|
get_connection(Pool) ->
|
||||||
|
get_connection(Pool, erlang:system_time(millisecod) + ?CHECKOUT_TIMEOUT).
|
||||||
|
|
||||||
|
get_connection(Pool, Deadline) ->
|
||||||
|
Now = erlang:system_time(millisecond),
|
||||||
|
case epg_pool_mgr:checkout(Pool) of
|
||||||
|
empty when Now < Deadline ->
|
||||||
|
timer:sleep(100),
|
||||||
|
get_connection(Pool, Deadline);
|
||||||
|
empty ->
|
||||||
|
{error, overload};
|
||||||
|
{error, _} = Err ->
|
||||||
|
Err;
|
||||||
|
Connection when is_pid(Connection) ->
|
||||||
|
Connection
|
||||||
|
end.
|
||||||
|
Loading…
Reference in New Issue
Block a user