summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nordberg <linus@nordu.net>2017-02-23 14:50:54 +0100
committerLinus Nordberg <linus@nordu.net>2017-02-23 14:50:54 +0100
commitdbb1123d2ae73b58dd9020240a965343c3a26278 (patch)
tree58ebee18e01b20c441cb2805966206aa359efb6d
parent4be6d0b6539e37b23adea73f9e583b86b6474e12 (diff)
Add debug printouts and error handling.
-rw-r--r--merge/src/merge_dist.erl1
-rw-r--r--merge/src/merge_util.erl23
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)]),