./ct_report/coverage/mongoose_wpool_rdbms.COVER.html

1 -module(mongoose_wpool_rdbms).
2 -behaviour(mongoose_wpool).
3
4 -export([init/0]).
5 -export([start/4]).
6 -export([default_opts/0]).
7 -export([stop/2]).
8
9 %% --------------------------------------------------------------
10 %% mongoose_wpool callbacks
11 init() ->
12 73 case ets:info(prepared_statements) of
13 undefined ->
14 73 Heir = case whereis(ejabberd_sup) of
15
:-(
undefined -> [];
16 73 Pid -> [{heir, Pid, undefined}]
17 end,
18 73 ets:new(prepared_statements,
19 [named_table, public, {read_concurrency, true} | Heir]),
20 73 ok;
21 _ ->
22
:-(
ok
23 end.
24
25 start(HostType, Tag, WpoolOpts, RdbmsOpts) ->
26 73 try do_start(HostType, Tag, WpoolOpts, RdbmsOpts)
27 catch
28
:-(
Err -> {error, Err}
29 end.
30
31 default_opts() ->
32 73 [{call_timeout, 60000}].
33
34 stop(_, _) ->
35 70 ok.
36
37 %% --------------------------------------------------------------
38 %% Helper functions
39 do_start(HostType, Tag, WpoolOpts0, RdbmsOpts) when is_list(WpoolOpts0) and is_list(RdbmsOpts) ->
40 73 BackendName = backend_name(RdbmsOpts),
41 73 BackendOpts = RdbmsOpts ++ [{backend, BackendName}],
42 73 mongoose_backend:init(global, mongoose_rdbms, [query, execute], BackendOpts),
43
44 73 mongoose_metrics:ensure_db_pool_metric({rdbms, HostType, Tag}),
45 73 WpoolOpts = make_wpool_opts(WpoolOpts0, RdbmsOpts),
46 73 ProcName = mongoose_wpool:make_pool_name(rdbms, HostType, Tag),
47 73 mongoose_wpool:start_sup_pool(rdbms, ProcName, WpoolOpts).
48
49 make_wpool_opts(WpoolOpts0, RdbmsOpts) ->
50 73 Worker = {mongoose_rdbms, RdbmsOpts},
51 73 [{worker, Worker}, {pool_sup_shutdown, infinity} | WpoolOpts0].
52
53 -spec backend_name(proplist:proplists()) -> odbc | pgsql | mysql.
54 backend_name(RdbmsOpts) ->
55 73 case lists:keyfind(server, 1, RdbmsOpts) of
56 73 {_, ConnStr} when is_list(ConnStr) -> odbc;
57
:-(
{_, Tuple} when is_tuple(Tuple) -> element(1, Tuple)
58 end.
Line Hits Source