This repository has been archived by the owner on Jan 31, 2024. It is now read-only.
forked from lpgauth/lhttpc
/
lhttpc_sup.erl
68 lines (61 loc) · 3.01 KB
/
lhttpc_sup.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
%%% ----------------------------------------------------------------------------
%%% Copyright (c) 2009, Erlang Training and Consulting Ltd.
%%% All rights reserved.
%%%
%%% Redistribution and use in source and binary forms, with or without
%%% modification, are permitted provided that the following conditions are met:
%%% * Redistributions of source code must retain the above copyright
%%% notice, this list of conditions and the following disclaimer.
%%% * Redistributions in binary form must reproduce the above copyright
%%% notice, this list of conditions and the following disclaimer in the
%%% documentation and/or other materials provided with the distribution.
%%% * Neither the name of Erlang Training and Consulting Ltd. nor the
%%% names of its contributors may be used to endorse or promote products
%%% derived from this software without specific prior written permission.
%%%
%%% THIS SOFTWARE IS PROVIDED BY Erlang Training and Consulting Ltd. ''AS IS''
%%% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
%%% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
%%% ARE DISCLAIMED. IN NO EVENT SHALL Erlang Training and Consulting Ltd. BE
%%% LIABLE SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
%%% BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
%%% WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
%%% OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
%%% ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
%%% ----------------------------------------------------------------------------
%%% @author Oscar Hellström <oscar@hellstrom.st>
%%% @doc Top supervisor for the lhttpc application.
%%% This is normally started by the application behaviour implemented in
%%% {@link lhttpc}.
%%% @end
-module(lhttpc_sup).
-behaviour(supervisor).
-export([start_link/0, start_link/1]).
-export([init/1]).
-type child() :: {atom(), {atom(), atom(), list(any)},
atom(), integer(), atom(), list(atom())}.
%% @spec () -> {ok, pid()} | {error, Reason}
%% Reason = atom()
%% @doc Starts and links to the supervisor.
%% This is normally called from an application behaviour or from another
%% supervisor.
%% @end
-spec start_link() -> {ok, pid()} | {error, atom()}.
start_link() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
start_link(Args) ->
supervisor:start_link({local, ?MODULE}, ?MODULE, Args).
%% @hidden
-spec init(any()) -> {ok, {{atom(), integer(), integer()}, [child()]}}.
init(Opts) ->
init_ets(Opts),
{ok, {{simple_one_for_one, 10, 1}, [
{load_balancer,
{lhttpc_lb, start_link, []},
transient, 10000, worker, [lhttpc_lb]}
]}}.
init_ets(Opts) ->
ETSOpts = proplists:get_value(ets, Opts, []),
%% Only option supported so far -- others do not really make sense at this point
ReadConc = {read_concurrency, proplists:get_value(read_concurrency, ETSOpts, false)},
ets:new(lhttpc_lb, [named_table, set, public, ReadConc]).