Skip to content

Commit 191c407

Browse files
committed
Merge pull request #93 from bearstech/master
Benching Carbon, from Graphite project
2 parents 402ae3d + 3f47040 commit 191c407

2 files changed

Lines changed: 80 additions & 0 deletions

File tree

examples/carbon.config

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{mode, {rate, 1}}.
2+
3+
{duration, 5}.
4+
5+
{concurrent, 100}.
6+
7+
{driver, basho_bench_driver_carbon}.
8+
9+
{operations, [{set, 1}]}.
10+
11+
{key_generator, {pareto_int, 100}}.
12+
13+
{carbon_batch_size, 150}.
14+
{carbon_keep_connect, true}.

src/basho_bench_driver_carbon.erl

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
-module(basho_bench_driver_carbon).
2+
3+
-export([new/1, run/4]).
4+
5+
-include("basho_bench.hrl").
6+
7+
-record(state, {
8+
host,
9+
port,
10+
keep_connect,
11+
batch_size,
12+
socket
13+
}).
14+
15+
new(_Id) ->
16+
Host = basho_bench_config:get(carbon_server, "127.0.0.1"),
17+
Port = basho_bench_config:get(carbon_port, 2003),
18+
KeepConnect = basho_bench_config:get(carbon_keep_connect, false),
19+
BatchSize = basho_bench_config:get(carbon_batch_size, 100),
20+
{ok, #state{
21+
host=Host,
22+
port=Port,
23+
keep_connect=KeepConnect,
24+
batch_size=BatchSize,
25+
socket=nil}}.
26+
27+
carbon(State = #state{host=Host, port=Port, socket=nil}, Message) ->
28+
case gen_tcp:connect(Host, Port, [list, {packet, 0}]) of
29+
{ok, Sock} ->
30+
carbon(State#state{socket=Sock}, Message);
31+
Error ->
32+
Error
33+
end;
34+
35+
carbon(State = #state{socket=Socket, keep_connect=KeepConnect}, Message) ->
36+
case gen_tcp:send(Socket, Message) of
37+
ok ->
38+
case KeepConnect of
39+
true ->
40+
{ok, State};
41+
_ ->
42+
ok = gen_tcp:close(Socket),
43+
{ok, State#state{socket=nil}}
44+
end;
45+
Error ->
46+
Error % let it crash
47+
end.
48+
49+
concat(0, _Keygen, _Ts, List) ->
50+
List;
51+
52+
concat(Size, KeyGen, Ts, List) ->
53+
Msg = io_lib:format("pim.pam.poum.~p ~p ~p~n", [KeyGen(), Ts, random:uniform(1000)]),
54+
concat(Size -1, KeyGen, Ts, [Msg | List]).
55+
56+
run(set, KeyGen, _ValueGen, State = #state{batch_size=BatchSize}) ->
57+
{Mega, Sec, _Micro} = now(),
58+
Msg = concat(BatchSize, KeyGen, Mega * 1000 + Sec, []),
59+
60+
case carbon(State, Msg) of
61+
{error, E} ->
62+
{error, E, State};
63+
OK ->
64+
OK
65+
end.
66+

0 commit comments

Comments
 (0)