diff options
Diffstat (limited to 'merge')
-rw-r--r-- | merge/src/merge_backup.erl | 1 | ||||
-rw-r--r-- | merge/src/merge_dist.erl | 20 | ||||
-rw-r--r-- | merge/src/merge_sth.erl | 2 | ||||
-rw-r--r-- | merge/src/merge_util.erl | 4 |
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. |