- adjust gitignore

- make sure that the results dir is created
- ruggedize observer listen socket creation
- fix support for non-cuttlefish builds
- observer disk autodetection
This commit is contained in:
Evan Vigil-McClanahan 2014-04-17 17:42:51 -04:00
parent 1180eccdfc
commit acefade354
5 changed files with 73 additions and 32 deletions

2
.gitignore vendored
View File

@ -16,4 +16,4 @@ doc/
coverage
tags
riak-*
results/
*.png

5
results/.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
# Ignore everything in this directory
*
# Except this file
!.gitignore

View File

@ -32,15 +32,22 @@ watch(Nodes, Collector) ->
Pid.
watcher(Master, Nodes, {_Host, Port, _Dir} = Collector) ->
{ok, LSock} = gen_tcp:listen(Port, [{active, false}, binary, {packet, 2}]),
Acceptor = spawn_link(?MODULE, lloop, [self(), LSock]),
monitor(process, Master),
Probes = [{Node, undefined} || Node <- Nodes],
W = #watcher{nodes=Nodes,
acceptor=Acceptor,
collector=Collector,
probes=Probes},
watcher_loop(W).
case gen_tcp:listen(Port, [{active, false}, binary,
{packet, 2}]) of
{ok, LSock} ->
Acceptor = spawn_link(?MODULE, lloop, [self(), LSock]),
monitor(process, Master),
Probes = [{Node, undefined} || Node <- Nodes],
W = #watcher{nodes=Nodes,
acceptor={Acceptor, LSock},
collector=Collector,
probes=Probes},
watcher_loop(W);
{error, eaddrinuse} ->
timer:sleep(100),
watcher(Master, Nodes, Collector)
%% case_clause other errors
end.
lloop(Master, LSock) ->
{ok, Sock} = gen_tcp:accept(LSock),
@ -49,7 +56,7 @@ lloop(Master, LSock) ->
lloop(Master, LSock).
watcher_loop(W=#watcher{probes=Probes,
acceptor=Acceptor,
acceptor={Acceptor,LSock},
collector={_,_,Dir}}) ->
Missing = [Node || {Node, undefined} <- Probes],
%% io:format("Missing: ~p~n", [Missing]),
@ -87,7 +94,12 @@ watcher_loop(W=#watcher{probes=Probes,
?MODULE:watcher_loop(W2);
stop ->
exit(Acceptor),
[file:close(FD) || {_Sock, FD} <- get()]
gen_tcp:close(LSock),
[begin
file:close(FD),
gen_tcp:close(Sock)
end
|| {Sock, FD} <- get()]
end.
@ -184,16 +196,19 @@ collect(H0) ->
{_, P} = report_processes(H),
{H2, N} = report_network(H),
%% this needs to figure out the active disks on its own, or report
%% for all disks
{H3, D} = report_disk2([{<<"dm-0">>, "dm-0"},
{<<"dm-1">>, "dm-1"}], H2),
%% H3 = report_disk2([{<<"xvdb">>, "xvdb"},
%% {<<"xvdc">>, "xvdc"},
%% {<<"raid0">>, "md127"}], H2),
DiskList =
case get(disks) of
undefined ->
Disks = determine_disks(),
put(disks, Disks),
Disks;
Disks ->
Disks
end,
{H3, D} = report_disk2(DiskList, H2),
{_, V} = report_vmstat(H3),
{_, M} = report_memory(H3),
%% H3 = try report_disk2(H2) catch _:_ -> H2 end,
C = report_stats(riak_core_stat, all),
R = report_stats(riak_kv_stat, all),
Stats0 = L ++ Q ++ P ++ N ++ D ++ V ++ M ++ C ++ R,
@ -203,6 +218,26 @@ collect(H0) ->
%% catch print_down(Nodes),
H3.
%% this portion is meant to be run inside a VM instance running riak
determine_disks() ->
DataDir =
case application:get_env(riak_kv, storage_backend) of
{ok, riak_kv_bitcask_backend} ->
{ok, Dir} = application:get_env(bitcask, data_root),
Dir;
{ok, riak_kv_eleveldb_backend} ->
{ok, Dir} = application:get_env(eleveldb, data_root),
Dir;
_ ->
error(unhandled_backend)
end,
Name0 = os:cmd("basename `df "++DataDir++
" | tail -1 | awk '{print $1}'`"),
{Name, _} = lists:split(length(Name0)-1, Name0),
%% keep the old format just in case we need to extend this later.
[{Name, Name}].
report_queues(H) ->
Max = lists:max([Len || Pid <- processes(),
{message_queue_len, Len} <- [process_info(Pid, message_queue_len)]]),
@ -264,8 +299,8 @@ report_disk2(Name, Dev, LastStats, #history{rate=Rate}) ->
end,
{Stats, Report}.
append_atoms(Atom, Binary) ->
list_to_atom(binary_to_list(Binary) ++
append_atoms(Atom, List) ->
list_to_atom(List ++
"_" ++ atom_to_list(Atom)).
report_memory(H) ->

View File

@ -29,7 +29,7 @@ bench(Config, NodeList, TestName, Runners, Drop) ->
_ -> ok
end,
%% make a local config file, to be copied to a remote
%% make a lxoocal config file, to be copied to a remote
%% loadgen. They're named separately because for simplicity, we
%% use network operations even for local load generation
@ -48,7 +48,7 @@ bench(Config, NodeList, TestName, Runners, Drop) ->
BBDir = rt_config:get(basho_bench),
GenList =
[begin
G = lists:nth((C rem 2), LoadGens),
G = lists:nth(C, LoadGens),
{G, C}
end
|| C <- lists:seq(1, Runners)],
@ -70,7 +70,8 @@ bench(Config, NodeList, TestName, Runners, Drop) ->
lager:info("Spawning remote basho_bench w/ ~p on ~p",
[Cmd, LG]),
{0, R} = rtssh:ssh_cmd(LG, Cmd, false),
lager:info("bench run finished, returned ~p", [R]),
lager:info("bench run finished, on ~p returned ~p",
[LG, R]),
{0, _} = rtssh:ssh_cmd(LG, "rm -r "++BBTmp++"/"),
Owner ! {done, ok}
catch

View File

@ -237,7 +237,7 @@ deploy_nodes(NodeConfig, Hosts) ->
lists:zip(lists:zip(Nodes, Hosts), Configs)),
timer:sleep(500),
case rt_config:get(cuttle, true) of
case rt_config:get(perf_cuttle, true) of
false ->
rt:pmap(fun({Node, Host}) ->
Config = [{riak_api,
@ -391,11 +391,11 @@ maybe_prepop(Hosts, BinSize, SetSize) ->
%% drop the cache
rt_bench:bench(PrepopConfig, Hosts, PrepopName,
length(rt_config:get(perf_loadgens, [1])), true),
1, true),
timer:sleep(timer:minutes(1)+timer:seconds(30)),
stop_data_collectors(PPids),
collect_test_data(Hosts, PrepopName);
collect_test_data(Hosts, PrepopName),
timer:sleep(timer:minutes(1)+timer:seconds(30));
false ->
ok
end.
@ -423,7 +423,7 @@ standard_config(NodeCount) ->
standard_config(NodeCount, AAE) ->
Backend = rt_config:get(rt_backend, undefined),
Fish = rt_config:get(cuttle, true),
Fish = rt_config:get(perf_cuttle, true),
RingSize = rt:nearest_ringsize(NodeCount),
mk_std_conf(Backend, Fish, RingSize, AAE).
@ -468,8 +468,8 @@ mk_std_conf(riak_kv_eleveldb_backend, true, Ring, AAE0) ->
]};
mk_std_conf(_, false, Ring, AAE) ->
[{riak_core,
{handoff_concurrency, 16},
[{ring_creation_size, Ring}]},
[{handoff_concurrency, 16},
{ring_creation_size, Ring}]},
{riak_kv,
[{anti_entropy,{AAE, []}}]}
];