WIP: tests for wedge state all working

This commit is contained in:
Scott Lystig Fritchie 2015-05-08 21:37:19 +09:00
parent 0dd9282789
commit dc43a32945
2 changed files with 33 additions and 16 deletions

View file

@ -103,9 +103,9 @@ update_wedge_state(PidSpec, Boolean, EpochId)
%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%
ets_table_name(FluName) when is_atom(FluName) -> ets_table_name(FluName) when is_atom(FluName) ->
list_to_atom(atom_to_list(FluName) ++ "_epoch"); list_to_atom(atom_to_list(FluName) ++ "_epoch").
ets_table_name(FluName) when is_binary(FluName) -> %% ets_table_name(FluName) when is_binary(FluName) ->
list_to_atom(binary_to_list(FluName) ++ "_epoch"). %% list_to_atom(binary_to_list(FluName) ++ "_epoch").
main2(FluName, TcpPort, DataDir, Rest) -> main2(FluName, TcpPort, DataDir, Rest) ->
{Props, DbgProps} = case proplists:get_value(dbg, Rest) of {Props, DbgProps} = case proplists:get_value(dbg, Rest) of
@ -236,15 +236,14 @@ net_server_loop(Sock, #state{flu_name=FluName, data_dir=DataDir}=S) ->
EpochIDRaw:(?EpochIDSpace)/binary, EpochIDRaw:(?EpochIDSpace)/binary,
OffsetHex:16/binary, LenHex:8/binary, OffsetHex:16/binary, LenHex:8/binary,
File:FileLenLF/binary, "\n">> -> File:FileLenLF/binary, "\n">> ->
{Wedged_p, CurrentEpochId} = ets:lookup_element(S#state.etstab, epoch, 2),
do_net_server_read(Sock, OffsetHex, LenHex, File, DataDir, do_net_server_read(Sock, OffsetHex, LenHex, File, DataDir,
EpochIDRaw, Wedged_p, CurrentEpochId); EpochIDRaw, S);
<<"L ", _EpochIDRaw:(?EpochIDSpace)/binary, "\n">> -> <<"L ", _EpochIDRaw:(?EpochIDSpace)/binary, "\n">> ->
do_net_server_listing(Sock, DataDir); do_net_server_listing(Sock, DataDir, S);
<<"C ", <<"C ",
_EpochIDRaw:(?EpochIDSpace)/binary, _EpochIDRaw:(?EpochIDSpace)/binary,
File:CSumFileLenLF/binary, "\n">> -> File:CSumFileLenLF/binary, "\n">> ->
do_net_server_checksum_listing(Sock, File, DataDir); do_net_server_checksum_listing(Sock, File, DataDir, S);
<<"QUIT\n">> -> <<"QUIT\n">> ->
catch gen_tcp:close(Sock), catch gen_tcp:close(Sock),
exit(normal); exit(normal);
@ -349,7 +348,8 @@ do_wedge_status(FluName, Sock) ->
ok = gen_tcp:send(Sock, Reply). ok = gen_tcp:send(Sock, Reply).
do_net_server_read(Sock, OffsetHex, LenHex, FileBin, DataDir, do_net_server_read(Sock, OffsetHex, LenHex, FileBin, DataDir,
EpochIDRaw, Wedged_p, CurrentEpochId) -> EpochIDRaw, S) ->
{Wedged_p, CurrentEpochId} = ets:lookup_element(S#state.etstab, epoch, 2),
DoItFun = fun(FH, Offset, Len) -> DoItFun = fun(FH, Offset, Len) ->
case file:pread(FH, Offset, Len) of case file:pread(FH, Offset, Len) of
{ok, Bytes} when byte_size(Bytes) == Len -> {ok, Bytes} when byte_size(Bytes) == Len ->
@ -469,7 +469,15 @@ decode_and_reply_net_server_ec_read_version_a(Sock, Rest) ->
<<Body:BodyLen/binary, _/binary>> = Rest2, <<Body:BodyLen/binary, _/binary>> = Rest2,
ok = gen_tcp:send(Sock, ["ERASURE ", BodyLenHex, " ", Hdr, Body]). ok = gen_tcp:send(Sock, ["ERASURE ", BodyLenHex, " ", Hdr, Body]).
do_net_server_listing(Sock, DataDir) -> do_net_server_listing(Sock, DataDir, S) ->
{Wedged_p, _CurrentEpochId} = ets:lookup_element(S#state.etstab, epoch, 2),
if Wedged_p ->
ok = gen_tcp:send(Sock, <<"ERROR WEDGED\n">>);
true ->
do_net_server_listing2(Sock, DataDir)
end.
do_net_server_listing2(Sock, DataDir) ->
{_, WildPath} = machi_util:make_data_filename(DataDir, ""), {_, WildPath} = machi_util:make_data_filename(DataDir, ""),
Files = filelib:wildcard("*", WildPath), Files = filelib:wildcard("*", WildPath),
Out = ["OK\n", Out = ["OK\n",
@ -484,9 +492,12 @@ do_net_server_listing(Sock, DataDir) ->
], ],
ok = gen_tcp:send(Sock, Out). ok = gen_tcp:send(Sock, Out).
do_net_server_checksum_listing(Sock, File, DataDir) -> do_net_server_checksum_listing(Sock, File, DataDir, S) ->
case sanitize_file_string(File) of {Wedged_p, _CurrentEpochId} = ets:lookup_element(S#state.etstab, epoch, 2),
ok -> case {Wedged_p, sanitize_file_string(File)} of
{true, _} ->
ok = gen_tcp:send(Sock, <<"ERROR WEDGED\n">>);
{false, ok} ->
do_net_server_checksum_listing2(Sock, File, DataDir); do_net_server_checksum_listing2(Sock, File, DataDir);
_ -> _ ->
ok = gen_tcp:send(Sock, <<"ERROR BAD-ARG\n">>) ok = gen_tcp:send(Sock, <<"ERROR BAD-ARG\n">>)

View file

@ -488,10 +488,16 @@ list2(Sock, EpochID) ->
EpochIDRaw = <<EpochNum:(4*8)/big, EpochCSum/binary>>, EpochIDRaw = <<EpochNum:(4*8)/big, EpochCSum/binary>>,
ok = gen_tcp:send(Sock, [<<"L ">>, EpochIDRaw, <<"\n">>]), ok = gen_tcp:send(Sock, [<<"L ">>, EpochIDRaw, <<"\n">>]),
ok = inet:setopts(Sock, [{packet, line}]), ok = inet:setopts(Sock, [{packet, line}]),
{ok, <<"OK\n">>} = gen_tcp:recv(Sock, 0), case gen_tcp:recv(Sock, 0) of
Res = list3(gen_tcp:recv(Sock, 0), Sock), {ok, <<"OK\n">>} ->
ok = inet:setopts(Sock, [{packet, raw}]), Res = list3(gen_tcp:recv(Sock, 0), Sock),
{ok, Res} ok = inet:setopts(Sock, [{packet, raw}]),
{ok, Res};
{ok, <<"ERROR WEDGED\n">>} ->
{error, wedged};
{ok, <<"ERROR ", Rest/binary>>} ->
{error, Rest}
end
catch catch
throw:Error -> throw:Error ->
Error; Error;