From dbb1123d2ae73b58dd9020240a965343c3a26278 Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Thu, 23 Feb 2017 14:50:54 +0100 Subject: Add debug printouts and error handling. --- merge/src/merge_dist.erl | 1 + merge/src/merge_util.erl | 23 +++++++++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/merge/src/merge_dist.erl b/merge/src/merge_dist.erl index 2e7013f..ddc7159 100644 --- a/merge/src/merge_dist.erl +++ b/merge/src/merge_dist.erl @@ -98,6 +98,7 @@ do_dist(NodeAddress, Start, NTotal) -> SendentriesChunksize = application:get_env(plop, merge_dist_sendentries_chunksize, 100), ok = merge_util:sendlog(NodeAddress, Start, Hashes, SendlogChunksize), {ok, HashesMissingEncoded} = merge_util:missingentries(NodeAddress), + lager:debug("number of missing entries: ~B", [length(HashesMissingEncoded)]), HashesMissing = lists:map(fun base64:decode/1, HashesMissingEncoded), ok = merge_util:sendentries(NodeAddress, HashesMissing, SendentriesChunksize), {ok, NewSize} = frontend_verify_entries(NodeAddress, Start + N), diff --git a/merge/src/merge_util.erl b/merge/src/merge_util.erl index a6c435b..2670aa0 100644 --- a/merge/src/merge_util.erl +++ b/merge/src/merge_util.erl @@ -25,11 +25,13 @@ request(DebugTag, URL, Headers, RequestBody) -> end. sendlog(NodeAddress, 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(_, _, {[], _}, _) -> ok; sendlog_chunk(NodeAddress, 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), lists:split(min(Chunksize, length(Rest)), Rest), Chunksize). @@ -59,17 +61,26 @@ missingentries(NodeAddress) -> end. sendentries(NodeAddress, Hashes, Chunksize) -> - {ChunkOfHashes, RestOfHashes} = lists:split(min(Chunksize, length(Hashes)), Hashes), + 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(_, {[], _}, _) -> ok; sendentries_chunk(NodeAddress, {Chunk, Rest}, Chunksize) -> - HashesAndEntries = lists:zip(Chunk, [db:entry_for_leafhash(H) || H <- Chunk]), - ok = sendentries_request(NodeAddress, HashesAndEntries), - sendentries_chunk(NodeAddress, - lists:split(min(Chunksize, length(Rest)), Rest), - Chunksize). + lager:debug("sending entries chunk: N=~B", [length(Chunk)]), + Entries = [db:entry_for_leafhash(H) || H <- Chunk], + HashesAndEntries = lists:zip(Chunk, Entries), + case lists:member(noentry, Entries) of + true -> + Missing = lists:keysearch(noentry, 2, HashesAndEntries), + lager:error("Entries not in db: ~p", Missing), + {error, entrynotindb}; + false -> + ok = sendentries_request(NodeAddress, HashesAndEntries), + sendentries_chunk(NodeAddress, + lists:split(min(Chunksize, length(Rest)), Rest), + Chunksize) + end. sendentries_request(NodeAddress, HashesAndEntries) -> DebugTag = io_lib:format("sendentry ~B", [length(HashesAndEntries)]), -- cgit v1.1