summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nordberg <linus@nordu.net>2017-02-08 12:44:37 +0100
committerLinus Nordberg <linus@nordu.net>2017-02-08 12:44:37 +0100
commit149943566af4c53b61e633fad16dd7dc8d48401d (patch)
treea2dd4cd41f3dd321f587b95308c04e24790f431c
parentf341c639d603c1541a84f7fa6b7e7c521cd24168 (diff)
Do do missingentries in merge dist.
-rw-r--r--merge/src/merge_dist.erl4
-rw-r--r--merge/src/merge_util.erl12
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).