summaryrefslogtreecommitdiff
path: root/merge
diff options
context:
space:
mode:
Diffstat (limited to 'merge')
-rw-r--r--merge/src/merge_backup.erl1
-rw-r--r--merge/src/merge_dist.erl20
-rw-r--r--merge/src/merge_sth.erl2
-rw-r--r--merge/src/merge_util.erl4
4 files changed, 20 insertions, 7 deletions
diff --git a/merge/src/merge_backup.erl b/merge/src/merge_backup.erl
index bf20f23..f1e9253 100644
--- a/merge/src/merge_backup.erl
+++ b/merge/src/merge_backup.erl
@@ -81,6 +81,7 @@ do_backup(NodeName, NodeAddress, Start, NTotal) ->
do_backup(NodeName, NodeAddress, Size, NTotal - N).
write_backupfile(NodeName, TreeSize, TreeHead) ->
+ statusreport:report("merge_backup", NodeName, "verified", TreeSize),
{ok, BasePath} = application:get_env(plop, verified_path),
Path = BasePath ++ "." ++ NodeName,
Content = mochijson2:encode({[{"tree_size", TreeSize},
diff --git a/merge/src/merge_dist.erl b/merge/src/merge_dist.erl
index f8f0c7c..da6b667 100644
--- a/merge/src/merge_dist.erl
+++ b/merge/src/merge_dist.erl
@@ -48,7 +48,9 @@ dist(noentry, State) ->
Timer = erlang:start_timer(1000, self(), dist),
{noreply, State#state{timer = Timer}};
dist({struct, PropList} = STH,
- #state{node_address = NodeAddress, sth_timestamp = LastTimestamp} = State) ->
+ #state{node_address = NodeAddress,
+ node_name = NodeName,
+ sth_timestamp = LastTimestamp} = State) ->
Treesize = proplists:get_value(<<"tree_size">>, PropList),
Timestamp = proplists:get_value(<<"timestamp">>, PropList),
RootHash = base64:decode(proplists:get_value(<<"sha256_root_hash">>, PropList)),
@@ -60,8 +62,10 @@ dist({struct, PropList} = STH,
try
lager:info("~p: starting dist, sth at ~B, logorder at ~B",
[NodeAddress, Treesize, Logordersize]),
- ok = do_dist(NodeAddress, min(Treesize, Logordersize)),
+ statusreport:report("merge_dist", NodeName, "targetsth", Treesize),
+ ok = do_dist(NodeAddress, NodeName, min(Treesize, Logordersize)),
ok = publish_sth(NodeAddress, STH),
+ statusreport:report("merge_dist", NodeName, "sth", Treesize),
lager:info("~p: Published STH with size ~B and timestamp " ++
"~p.", [NodeAddress, Treesize, Timestamp]),
Timestamp
@@ -82,21 +86,22 @@ dist({struct, PropList} = STH,
%% @doc Has nonlocal return because of throw further down in
%% merge_util:request/4.
-do_dist(NodeAddress, Size) ->
+do_dist(NodeAddress, NodeName, Size) ->
{ok, VerifiedSize} = frontend_get_verifiedsize(NodeAddress),
lager:debug("~p: verifiedsize ~B", [NodeAddress, VerifiedSize]),
true = VerifiedSize =< Size,
- do_dist(NodeAddress, VerifiedSize, Size - VerifiedSize).
+ do_dist(NodeAddress, NodeName, VerifiedSize, Size - VerifiedSize).
-do_dist(_, _, 0) ->
+do_dist(_, _, _, 0) ->
ok;
-do_dist(NodeAddress, Start, NTotal) ->
+do_dist(NodeAddress, NodeName, Start, NTotal) ->
DistMaxWindow = application:get_env(plop, merge_dist_winsize, 1000),
N = min(DistMaxWindow, NTotal),
Hashes = index:getrange(logorder, Start, Start + N - 1),
SendlogChunksize = application:get_env(plop, merge_dist_sendlog_chunksize, 1000),
SendentriesChunksize = application:get_env(plop, merge_dist_sendentries_chunksize, 100),
ok = merge_util:sendlog(NodeAddress, Start, Hashes, SendlogChunksize),
+ statusreport:report("merge_dist", NodeName, "sendlog", Start + N),
{ok, HashesMissingEncoded} = merge_util:missingentries(NodeAddress),
lager:debug("number of missing entries: ~B", [length(HashesMissingEncoded)]),
HashesMissing = lists:map(fun base64:decode/1, HashesMissingEncoded),
@@ -104,8 +109,9 @@ do_dist(NodeAddress, Start, NTotal) ->
{ok, NewSize} = frontend_verify_entries(NodeAddress, Start + N),
lager:info("~p: Done distributing ~B out of ~B entries.",
[NodeAddress, NewSize-Start, NTotal]),
+ statusreport:report("merge_dist", NodeName, "verified", Start + N),
true = NTotal >= NewSize - Start,
- do_dist(NodeAddress, NewSize, NTotal - (NewSize - Start)).
+ do_dist(NodeAddress, NodeName, NewSize, NTotal - (NewSize - Start)).
frontend_get_verifiedsize(NodeAddress) ->
frontend_verify_entries(NodeAddress, 0).
diff --git a/merge/src/merge_sth.erl b/merge/src/merge_sth.erl
index ab1cd8f..b8ae1f9 100644
--- a/merge/src/merge_sth.erl
+++ b/merge/src/merge_sth.erl
@@ -66,6 +66,7 @@ make_sth(CurSize, State) ->
Wait =
case NewSize < CurSize of
true ->
+ statusreport:report("merge_sth", "sth", "sth", null),
lager:debug("waiting for enough backups to reach ~B, now at ~B",
[CurSize, NewSize]),
1;
@@ -90,6 +91,7 @@ do_make_sth(Size) ->
{"sha256_root_hash", base64:encode(NewRoot)},
{"tree_head_signature", base64:encode(PackedSignature)}],
ok = plop:save_sth({struct, NewSTH}),
+ statusreport:report("merge_sth", "sth", "sth", Size),
ok;
false ->
lager:error("The signature we got for new tree of size ~B doesn't " ++
diff --git a/merge/src/merge_util.erl b/merge/src/merge_util.erl
index 7598e40..24eba60 100644
--- a/merge/src/merge_util.erl
+++ b/merge/src/merge_util.erl
@@ -12,14 +12,18 @@ request(DebugTag, URL) ->
request(DebugTag, URL, 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]))),
throw({request_error, request, DebugTag, Err});
{failure, {none, StatusCode, none}, _RespHeaders, _Body} ->
+ statusreport:report_multi("merge_errors", URL, "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)),
throw({request_error, decode, DebugTag, Err});
{struct, PropList} ->
+ statusreport:report_multi("merge_errors", URL, "http_error", 200),
{proplists:get_value(<<"result">>, PropList), PropList}
end
end.