diff options
author | Linus Nordberg <linus@nordu.net> | 2017-02-08 12:44:37 +0100 |
---|---|---|
committer | Linus Nordberg <linus@nordu.net> | 2017-02-08 12:44:37 +0100 |
commit | 149943566af4c53b61e633fad16dd7dc8d48401d (patch) | |
tree | a2dd4cd41f3dd321f587b95308c04e24790f431c | |
parent | f341c639d603c1541a84f7fa6b7e7c521cd24168 (diff) |
Do do missingentries in merge dist.
-rw-r--r-- | merge/src/merge_dist.erl | 4 | ||||
-rw-r--r-- | merge/src/merge_util.erl | 12 |
2 files changed, 14 insertions, 2 deletions
diff --git a/merge/src/merge_dist.erl b/merge/src/merge_dist.erl index 8615f6c..2e7013f 100644 --- a/merge/src/merge_dist.erl +++ b/merge/src/merge_dist.erl @@ -97,7 +97,9 @@ do_dist(NodeAddress, Start, NTotal) -> 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), - ok = merge_util:sendentries(NodeAddress, Hashes, SendentriesChunksize), + {ok, HashesMissingEncoded} = merge_util:missingentries(NodeAddress), + HashesMissing = lists:map(fun base64:decode/1, HashesMissingEncoded), + ok = merge_util:sendentries(NodeAddress, HashesMissing, SendentriesChunksize), {ok, NewSize} = frontend_verify_entries(NodeAddress, Start + N), lager:info("~p: Done distributing ~B entries.", [NodeAddress, NewSize-Start]), true = NTotal >= NewSize - Start, diff --git a/merge/src/merge_util.erl b/merge/src/merge_util.erl index 1df1409..a6c435b 100644 --- a/merge/src/merge_util.erl +++ b/merge/src/merge_util.erl @@ -2,7 +2,7 @@ %%% See LICENSE for licensing information. -module(merge_util). --export([sendlog/4, sendentries/3]). +-export([sendlog/4, sendentries/3, missingentries/1]). -export([request/2, request/4]). -export([readfile/1, nfetched/0]). @@ -48,6 +48,16 @@ sendlog_request(NodeAddress, Start, Hashes) -> throw({request_error, result, DebugTag, Err}) end. +missingentries(NodeAddress) -> + DebugTag = "missingentries", + URL = NodeAddress ++ "missingentries", + case request(DebugTag, URL) of + {<<"ok">>, PropList} -> + {ok, proplists:get_value(<<"entries">>, PropList)}; + Err -> + throw({request_error, result, DebugTag, Err}) + end. + sendentries(NodeAddress, Hashes, Chunksize) -> {ChunkOfHashes, RestOfHashes} = lists:split(min(Chunksize, length(Hashes)), Hashes), sendentries_chunk(NodeAddress, {ChunkOfHashes, RestOfHashes}, Chunksize). |