-
Notifications
You must be signed in to change notification settings - Fork 190
Expand file tree
/
Copy pathbasho_bench_driver_carbon.erl
More file actions
66 lines (55 loc) · 1.76 KB
/
Copy pathbasho_bench_driver_carbon.erl
File metadata and controls
66 lines (55 loc) · 1.76 KB
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
-module(basho_bench_driver_carbon).
-export([new/1, run/4]).
-include("basho_bench.hrl").
-record(state, {
host,
port,
keep_connect,
batch_size,
socket
}).
new(_Id) ->
Host = basho_bench_config:get(carbon_server, "127.0.0.1"),
Port = basho_bench_config:get(carbon_port, 2003),
KeepConnect = basho_bench_config:get(carbon_keep_connect, false),
BatchSize = basho_bench_config:get(carbon_batch_size, 100),
{ok, #state{
host=Host,
port=Port,
keep_connect=KeepConnect,
batch_size=BatchSize,
socket=nil}}.
carbon(State = #state{host=Host, port=Port, socket=nil}, Message) ->
case gen_tcp:connect(Host, Port, [list, {packet, 0}]) of
{ok, Sock} ->
carbon(State#state{socket=Sock}, Message);
Error ->
Error
end;
carbon(State = #state{socket=Socket, keep_connect=KeepConnect}, Message) ->
case gen_tcp:send(Socket, Message) of
ok ->
case KeepConnect of
true ->
{ok, State};
_ ->
ok = gen_tcp:close(Socket),
{ok, State#state{socket=nil}}
end;
Error ->
Error % let it crash
end.
concat(0, _Keygen, _Ts, List) ->
List;
concat(Size, KeyGen, Ts, List) ->
Msg = io_lib:format("pim.pam.poum.~p ~p ~p~n", [KeyGen(), Ts, random:uniform(1000)]),
concat(Size -1, KeyGen, Ts, [Msg | List]).
run(set, KeyGen, _ValueGen, State = #state{batch_size=BatchSize}) ->
{Mega, Sec, _Micro} = now(),
Msg = concat(BatchSize, KeyGen, Mega * 1000 + Sec, []),
case carbon(State, Msg) of
{error, E} ->
{error, E, State};
OK ->
OK
end.