Bladeren bron

Replaced local size in state with ets lookup

Got rid of duplicated information in order to
reduce complexity and change points for upcoming
algorithm changes.
pull/123/head
benjaminplee 10 jaren geleden
bovenliggende
commit
8ee3444c14
1 gewijzigde bestanden met toevoegingen van 14 en 21 verwijderingen
  1. +14
    -21
      src/ibrowse_lb.erl

+ 14
- 21
src/ibrowse_lb.erl Bestand weergeven

@ -33,7 +33,6 @@
port,
max_sessions,
max_pipeline_size,
num_cur_sessions = 0,
proc_state}).
-include("ibrowse.hrl").
@ -119,23 +118,18 @@ handle_call(stop, _From, #state{ets_tid = Tid} = State) ->
handle_call(_, _From, #state{proc_state = shutting_down} = State) ->
{reply, {error, shutting_down}, State};
%% Update max_sessions in #state with supplied value
handle_call({spawn_connection, _Url, Max_sess, Max_pipe, _, _}, _From,
#state{num_cur_sessions = Num} = State)
when Num >= Max_sess ->
State_1 = maybe_create_ets(State),
Reply = find_best_connection(State_1#state.ets_tid, Max_pipe),
{reply, Reply, State_1#state{max_sessions = Max_sess, max_pipeline_size = Max_pipe}};
handle_call({spawn_connection, Url, Max_sess, Max_pipe, SSL_options, Process_options}, _From,
#state{num_cur_sessions = Cur} = State) ->
handle_call({spawn_connection, Url, Max_sess, Max_pipe, SSL_options, Process_options}, _From, State) ->
State_1 = maybe_create_ets(State),
Tid = State_1#state.ets_tid,
{ok, Pid} = ibrowse_http_client:start_link({Tid, Url, SSL_options}, Process_options),
ets:insert(Tid, {Pid, 0, 0}),
{reply, {ok, Pid}, State_1#state{num_cur_sessions = Cur + 1,
max_sessions = Max_sess,
max_pipeline_size = Max_pipe}};
Reply = case ets:info(Tid, size) of
X when X >= Max_sess ->
find_best_connection(Tid, Max_pipe);
_ ->
Result = {ok, Pid} = ibrowse_http_client:start_link({Tid, Url, SSL_options}, Process_options),
ets:insert(Tid, {Pid, 0, 0}),
Result
end,
{reply, Reply, State_1#state{max_sessions = Max_sess, max_pipeline_size = Max_pipe}};
handle_call(Request, _From, State) ->
Reply = {unknown_request, Request},
@ -162,15 +156,14 @@ handle_info({'EXIT', Parent, _Reason}, #state{parent_pid = Parent} = State) ->
{stop, normal, State};
handle_info({'EXIT', _Pid, _Reason}, #state{ets_tid = undefined} = State) ->
{noreply, State};
handle_info({'EXIT', Pid, _Reason}, #state{num_cur_sessions = Cur, ets_tid = Tid} = State) ->
handle_info({'EXIT', Pid, _Reason}, #state{ets_tid = Tid} = State) ->
ets:match_delete(Tid, {{'_', Pid}, '_'}),
Cur_1 = Cur - 1,
case Cur_1 of
case ets:info(Tid, size) of
0 ->
ets:delete(Tid),
{noreply, State#state{ets_tid = undefined, num_cur_sessions = 0}, 10000};
{noreply, State#state{ets_tid = undefined}, 10000};
_ ->
{noreply, State#state{num_cur_sessions = Cur_1}}
{noreply, State}
end;
handle_info({trace, Bool}, #state{ets_tid = undefined} = State) ->

Laden…
Annuleren
Opslaan