diff options
Diffstat (limited to 'merge/src/merge_util.erl')
-rw-r--r-- | merge/src/merge_util.erl | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/merge/src/merge_util.erl b/merge/src/merge_util.erl index 24eba60..c76d05f 100644 --- a/merge/src/merge_util.erl +++ b/merge/src/merge_util.erl @@ -2,82 +2,82 @@ %%% See LICENSE for licensing information. -module(merge_util). --export([sendlog/4, sendentries/3, missingentries/1]). --export([request/2, request/4]). +-export([sendlog/5, sendentries/4, missingentries/2]). +-export([request/3, request/5]). -export([readfile/1, nfetched/0]). -request(DebugTag, URL) -> - request(DebugTag, URL, [], <<>>). +request(DebugTag, URL, NodeName) -> + request(DebugTag, URL, NodeName, [], <<>>). -request(DebugTag, URL, Headers, RequestBody) -> +request(DebugTag, URL, NodeName, Headers, RequestBody) -> case plop_httputil:request(DebugTag, URL, Headers, RequestBody) of {error, Err} -> - statusreport:report_multi("merge_errors", URL, "http_error", list_to_binary(io_lib:format("~w", [Err]))), + statusreport:report_multi("merge_errors", NodeName, "http_error", list_to_binary(io_lib:format("~w", [Err]))), throw({request_error, request, DebugTag, Err}); {failure, {none, StatusCode, none}, _RespHeaders, _Body} -> - statusreport:report_multi("merge_errors", URL, "http_error", StatusCode), + statusreport:report_multi("merge_errors", NodeName, "http_error", StatusCode), throw({request_error, failure, DebugTag, StatusCode}); {success, {_, StatusCode, _}, _, Body} when StatusCode == 200 -> case (catch mochijson2:decode(Body)) of {error, Err} -> - statusreport:report_multi("merge_errors", URL, "http_error", list_to_binary(Err)), + statusreport:report_multi("merge_errors", NodeName, "http_error", list_to_binary(Err)), throw({request_error, decode, DebugTag, Err}); {struct, PropList} -> - statusreport:report_multi("merge_errors", URL, "http_error", 200), + statusreport:report_multi("merge_errors", NodeName, "http_error", 200), {proplists:get_value(<<"result">>, PropList), PropList} end end. -sendlog(NodeAddress, Start, Hashes, Chunksize) -> +sendlog(NodeAddress, NodeName, Start, Hashes, Chunksize) -> lager:debug("sending log: start=~B, N=~B, chunksize=~B", [Start, length(Hashes), Chunksize]), - sendlog_chunk(NodeAddress, Start, lists:split(min(Chunksize, length(Hashes)), Hashes), Chunksize). + sendlog_chunk(NodeAddress, NodeName, Start, lists:split(min(Chunksize, length(Hashes)), Hashes), Chunksize). -sendlog_chunk(_, _, {[], _}, _) -> +sendlog_chunk(_, _, _, {[], _}, _) -> ok; -sendlog_chunk(NodeAddress, Start, {Chunk, Rest}, Chunksize) -> +sendlog_chunk(NodeAddress, NodeName, Start, {Chunk, Rest}, Chunksize) -> lager:debug("sending log chunk: start=~B, N=~B", [Start, length(Chunk)]), - ok = sendlog_request(NodeAddress, Start, Chunk), - sendlog_chunk(NodeAddress, Start + length(Chunk), + ok = sendlog_request(NodeAddress, NodeName, Start, Chunk), + sendlog_chunk(NodeAddress, NodeName, Start + length(Chunk), lists:split(min(Chunksize, length(Rest)), Rest), Chunksize). -sendlog_request(NodeAddress, Start, Hashes) -> +sendlog_request(NodeAddress, NodeName, Start, Hashes) -> DebugTag = io_lib:format("sendlog ~B:~B", [Start, length(Hashes)]), URL = NodeAddress ++ "sendlog", Headers = [{"Content-Type", "text/json"}], EncodedHashes = [base64:encode(H) || H <- Hashes], RequestBody = list_to_binary(mochijson2:encode({[{"start", Start}, {"hashes", EncodedHashes}]})), - case request(DebugTag, URL, Headers, RequestBody) of + case request(DebugTag, URL, NodeName, Headers, RequestBody) of {<<"ok">>, _} -> ok; Err -> throw({request_error, result, DebugTag, Err}) end. -missingentries(NodeAddress) -> +missingentries(NodeAddress, NodeName) -> DebugTag = "missingentries", URL = NodeAddress ++ "missingentries", - case request(DebugTag, URL) of + case request(DebugTag, URL, NodeName) of {<<"ok">>, PropList} -> {ok, proplists:get_value(<<"entries">>, PropList)}; Err -> throw({request_error, result, DebugTag, Err}) end. -sendentries(NodeAddress, Hashes, Chunksize) -> +sendentries(NodeAddress, NodeName, Hashes, Chunksize) -> lager:debug("sending entries: N=~B, chunksize=~B", [length(Hashes), Chunksize]), {ChunkOfHashes, RestOfHashes} = lists:split(min(Chunksize, length(Hashes)), Hashes), - sendentries_chunk(NodeAddress, {ChunkOfHashes, RestOfHashes}, Chunksize). + sendentries_chunk(NodeAddress, NodeName, {ChunkOfHashes, RestOfHashes}, Chunksize). -sendentries_chunk(_, {[], _}, _) -> +sendentries_chunk(_, _, {[], _}, _) -> ok; -sendentries_chunk(NodeAddress, {Chunk, Rest}, Chunksize) -> +sendentries_chunk(NodeAddress, NodeName, {Chunk, Rest}, Chunksize) -> lager:debug("sending entries chunk: N=~B", [length(Chunk)]), HashesAndEntries = lists:zip(Chunk, lists:map(fun db:entry_for_leafhash/1, Chunk)), case lists:keysearch(noentry, 2, HashesAndEntries) of false -> - ok = sendentries_request(NodeAddress, HashesAndEntries), - sendentries_chunk(NodeAddress, + ok = sendentries_request(NodeAddress, NodeName, HashesAndEntries), + sendentries_chunk(NodeAddress, NodeName, lists:split(min(Chunksize, length(Rest)), Rest), Chunksize); Missing -> @@ -85,13 +85,13 @@ sendentries_chunk(NodeAddress, {Chunk, Rest}, Chunksize) -> {error, entrynotindb} end. -sendentries_request(NodeAddress, HashesAndEntries) -> +sendentries_request(NodeAddress, NodeName, HashesAndEntries) -> DebugTag = io_lib:format("sendentry ~B", [length(HashesAndEntries)]), URL = NodeAddress ++ "sendentry", Headers = [{"Content-Type", "text/json"}], L = mochijson2:encode([[{"entry", base64:encode(E)}, {"treeleafhash", base64:encode(H)}] || {H, E} <- HashesAndEntries]), RequestBody = list_to_binary(L), - case request(DebugTag, URL, Headers, RequestBody) of + case request(DebugTag, URL, NodeName, Headers, RequestBody) of {<<"ok">>, _} -> ok; Err -> |