diff options
Diffstat (limited to 'merge/src/merge_util.erl')
-rw-r--r-- | merge/src/merge_util.erl | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/merge/src/merge_util.erl b/merge/src/merge_util.erl index a6c435b..7598e40 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,25 @@ missingentries(NodeAddress) -> end. sendentries(NodeAddress, 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(_, {[], _}, _) -> 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)]), + 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, + lists:split(min(Chunksize, length(Rest)), Rest), + Chunksize); + Missing -> + lager:error("Entries not in db: ~p", [Missing]), + {error, entrynotindb} + end. sendentries_request(NodeAddress, HashesAndEntries) -> DebugTag = io_lib:format("sendentry ~B", [length(HashesAndEntries)]), |