Current section
Files
Jump to
Current section
Files
bench/src/pooler_driver.erl
%% @doc basho_bench driver for pooler testing
-module(pooler_driver).
-export([
new/1,
pool_name/1,
run/4
]).
-record(state, {
%% integer id received from new/1
id = 0,
%% pid of consumer worker process
consumer = undefined
}).
new(ID) ->
%% this is bogus, b/c called too many times.
init_driver(),
{ok, Consumer} = consumer_sup:new_consumer(),
{ok, #state{id = ID, consumer = Consumer}}.
%% KeyGen can be a function that returns a pool name atom.
run(simple, PoolNameFun, _ValueGen, #state{consumer = _C} = State) ->
PoolName = PoolNameFun(),
case pooler:take_member(PoolName) of
error_no_members ->
{error, error_no_members, State};
Pid ->
pooler:return_member(PoolName, Pid),
{ok, State}
end;
run(fast, PoolNameFun, _ValueGen, #state{consumer = C} = State) ->
PoolName = PoolNameFun(),
ConsumerOpts = [{consumer_crash, false},
{member_crash, false},
{take_cycles, 1},
{think_time, 10},
{pool_name, PoolName}
],
consumer:run(C, ConsumerOpts),
{ok, State};
run(slow, PoolNameFun, _ValueGen, #state{consumer = C} = State) ->
PoolName = PoolNameFun(),
ConsumerOpts = [{consumer_crash, false},
{member_crash, false},
{take_cycles, 1},
{think_time, 200},
{pool_name, PoolName}
],
consumer:run(C, ConsumerOpts),
{ok, State}.
%% gets called as the PoolNameFun aka key_generator via basho_bench config
pool_name(_Id) ->
fun() -> p1 end.
init_driver() ->
consumer_sup:start_link(),
member_sup:start_link(),
application:start(pooler),
Delay = 1000,
PoolConfig = [{name, p1},
{max_count, 5},
{init_count, 2},
{start_mfa,
{member_sup, new_member, [Delay]}}],
pooler:new_pool(PoolConfig),
ok.