1 |
|
-module(mongoose_wpool_riak). |
2 |
|
-behaviour(mongoose_wpool). |
3 |
|
|
4 |
|
-export([init/0]). |
5 |
|
-export([start/4]). |
6 |
|
-export([stop/2]). |
7 |
|
-export([is_supported_strategy/1]). |
8 |
|
-export([get_riak_opt/2]). |
9 |
|
-export([get_riak_opt/3]). |
10 |
|
|
11 |
|
-ignore_xref([get_riak_opt/3]). |
12 |
|
|
13 |
|
%% -------------------------------------------------------------- |
14 |
|
%% mongoose_wpool callbacks |
15 |
|
init() -> |
16 |
:-( |
ok. |
17 |
|
|
18 |
|
start(HostType, Tag, WpoolOptsIn, ConnOpts) -> |
19 |
:-( |
ProcName = mongoose_wpool:make_pool_name(riak, HostType, Tag), |
20 |
:-( |
WpoolOpts = wpool_spec(WpoolOptsIn, ConnOpts), |
21 |
:-( |
mongoose_wpool:start_sup_pool(riak, ProcName, WpoolOpts). |
22 |
|
|
23 |
|
stop(_, _) -> |
24 |
:-( |
ok. |
25 |
|
|
26 |
:-( |
is_supported_strategy(available_worker) -> false; |
27 |
:-( |
is_supported_strategy(_) -> true. |
28 |
|
|
29 |
|
%% -------------------------------------------------------------- |
30 |
|
%% Other functions |
31 |
|
|
32 |
|
wpool_spec(WpoolOptsIn, ConnOpts) -> |
33 |
:-( |
{_, RiakAddr} = mongoose_wpool_riak:get_riak_opt(address, ConnOpts), |
34 |
:-( |
{_, RiakPort} = mongoose_wpool_riak:get_riak_opt(port, ConnOpts), |
35 |
:-( |
SecurityOptsKeys = [credentials, cacertfile, ssl_opts], |
36 |
:-( |
SecurityOpts = [get_riak_opt(OptKey, ConnOpts) || OptKey <- SecurityOptsKeys], |
37 |
:-( |
RiakPBOpts = [auto_reconnect, keepalive], |
38 |
:-( |
WorkerArgs = maybe_add_additional_opts(RiakPBOpts, SecurityOpts), |
39 |
:-( |
Worker = {riakc_pb_socket, [RiakAddr, RiakPort, WorkerArgs]}, |
40 |
:-( |
[{worker, Worker} | WpoolOptsIn]. |
41 |
|
|
42 |
|
|
43 |
|
%% @doc Gets a particular option from `Opts'. They're expressed as a list |
44 |
|
%% of tuples where the first element is `OptKey'. If provided `OptKey' doesn't |
45 |
|
%% exist the `Default' is returned. |
46 |
|
-spec get_riak_opt(OptKey :: atom(), Opts :: [tuple()], Default :: tuple()) -> |
47 |
|
tuple(). |
48 |
|
get_riak_opt(OptKey, Opts, Default) -> |
49 |
:-( |
Opt = get_riak_opt(OptKey, Opts), |
50 |
:-( |
verify_if_riak_opt_exists(Opt, Default). |
51 |
|
|
52 |
|
get_riak_opt(OptKey, Opts) -> |
53 |
:-( |
lists:keyfind(OptKey, 1, Opts). |
54 |
|
|
55 |
:-( |
verify_if_riak_opt_exists(false, Default) -> Default; |
56 |
:-( |
verify_if_riak_opt_exists(Opt, _) -> Opt. |
57 |
|
|
58 |
|
%% @doc Merges `AdditionalOpts' into `Opts' if a particular additional option |
59 |
|
%% exists. |
60 |
|
-spec maybe_add_additional_opts(Opts :: [term()], |
61 |
|
AdditionalOpts :: [tuple()]) -> [term()]. |
62 |
|
maybe_add_additional_opts(Opts, AdditionalOpts) -> |
63 |
:-( |
Opts2 = [verify_if_riak_opt_exists(Opt, []) || Opt <- AdditionalOpts], |
64 |
:-( |
lists:flatten(Opts ++ Opts2). |