summaryrefslogtreecommitdiff
path: root/merge/src/merge_util.erl
diff options
context:
space:
mode:
Diffstat (limited to 'merge/src/merge_util.erl')
-rw-r--r--merge/src/merge_util.erl54
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 ->