summaryrefslogtreecommitdiff
path: root/merge/src/merge_backup.erl
diff options
context:
space:
mode:
Diffstat (limited to 'merge/src/merge_backup.erl')
-rw-r--r--merge/src/merge_backup.erl31
1 files changed, 16 insertions, 15 deletions
diff --git a/merge/src/merge_backup.erl b/merge/src/merge_backup.erl
index bf20f23..068725c 100644
--- a/merge/src/merge_backup.erl
+++ b/merge/src/merge_backup.erl
@@ -44,12 +44,12 @@ backup(Size, #state{node_name = NodeName, node_address = NodeAddress} = State) -
lager:debug("~p: logorder size ~B", [NodeName, Size]),
ht:load_tree(Size - 1), % TODO: Make sure this is OK to do from multiple processes and that it's not "moving backwards".
try
- {ok, VerifiedSize} = verified_size(NodeAddress),
+ {ok, VerifiedSize} = verified_size(NodeName, NodeAddress),
lager:debug("~p: verifiedsize ~B", [NodeName, VerifiedSize]),
case VerifiedSize == Size of
true ->
TreeHead = ht:root(Size - 1),
- ok = check_root(NodeAddress, Size, TreeHead),
+ ok = check_root(NodeName, NodeAddress, Size, TreeHead),
ok = write_backupfile(NodeName, Size, TreeHead);
false ->
true = VerifiedSize < Size, % Secondary ahead of primary?
@@ -68,27 +68,28 @@ do_backup(_, _, _, 0) ->
do_backup(NodeName, NodeAddress, Start, NTotal) ->
N = min(NTotal, plopconfig:get_env(merge_backup_winsize, 1000)),
Hashes = index:getrange(logorder, Start, Start + N - 1),
- ok = merge_util:sendlog(NodeAddress, Start, Hashes, plopconfig:get_env(merge_backup_sendlog_chunksize, 1000)),
- {ok, HashesMissingEncoded} = merge_util:missingentries(NodeAddress),
+ ok = merge_util:sendlog(NodeAddress, NodeName, Start, Hashes, plopconfig:get_env(merge_backup_sendlog_chunksize, 1000)),
+ {ok, HashesMissingEncoded} = merge_util:missingentries(NodeAddress, NodeName),
HashesMissing = lists:map(fun base64:decode/1, HashesMissingEncoded),
- ok = merge_util:sendentries(NodeAddress, HashesMissing, plopconfig:get_env(merge_backup_sendentries_chunksize, 100)),
+ ok = merge_util:sendentries(NodeAddress, NodeName, HashesMissing, plopconfig:get_env(merge_backup_sendentries_chunksize, 100)),
Size = Start + N,
TreeHead = ht:root(Size - 1),
- ok = check_root(NodeAddress, Size, TreeHead),
- ok = setverifiedsize(NodeAddress, Size),
+ ok = check_root(NodeName, NodeAddress, Size, TreeHead),
+ ok = setverifiedsize(NodeName, NodeAddress, Size),
ok = write_backupfile(NodeName, Size, TreeHead),
true = NTotal >= N,
do_backup(NodeName, NodeAddress, Size, NTotal - N).
write_backupfile(NodeName, TreeSize, TreeHead) ->
+ statusreport:report("merge_backup", NodeName, "verified", TreeSize),
{ok, BasePath} = application:get_env(plop, verified_path),
Path = BasePath ++ "." ++ NodeName,
Content = mochijson2:encode({[{"tree_size", TreeSize},
{"sha256_root_hash", list_to_binary(hex:bin_to_hexstr(TreeHead))}]}),
atomic:replacefile(Path, Content).
-check_root(NodeAddress, Size, TreeHead) ->
- {ok, TreeHeadToVerify} = verifyroot(NodeAddress, Size),
+check_root(NodeName, NodeAddress, Size, TreeHead) ->
+ {ok, TreeHeadToVerify} = verifyroot(NodeName, NodeAddress, Size),
case TreeHeadToVerify == TreeHead of
true ->
ok;
@@ -98,34 +99,34 @@ check_root(NodeAddress, Size, TreeHead) ->
root_mismatch
end.
-verifyroot(NodeAddress, TreeSize) ->
+verifyroot(NodeName, NodeAddress, TreeSize) ->
DebugTag = io_lib:format("verifyroot ~B", [TreeSize]),
URL = NodeAddress ++ "verifyroot",
Headers = [{"Content-Type", "text/json"}],
RequestBody = list_to_binary(mochijson2:encode({[{"tree_size", TreeSize}]})),
- case merge_util:request(DebugTag, URL, Headers, RequestBody) of
+ case merge_util:request(DebugTag, URL, NodeName, Headers, RequestBody) of
{<<"ok">>, PropList} ->
{ok, base64:decode(proplists:get_value(<<"root_hash">>, PropList))};
Err ->
throw({request_error, result, DebugTag, Err})
end.
-verified_size(NodeAddress) ->
+verified_size(NodeName, NodeAddress) ->
DebugTag = "verifiedsize",
URL = NodeAddress ++ "verifiedsize",
- case merge_util:request(DebugTag, URL) of
+ case merge_util:request(DebugTag, URL, NodeName) of
{<<"ok">>, PropList} ->
{ok, proplists:get_value(<<"size">>, PropList)};
Err ->
throw({request_error, result, DebugTag, Err})
end.
-setverifiedsize(NodeAddress, Size) ->
+setverifiedsize(NodeName, NodeAddress, Size) ->
DebugTag = io_lib:format("setverifiedsize ~B", [Size]),
URL = NodeAddress ++ "setverifiedsize",
Headers = [{"Content-Type", "text/json"}],
RequestBody = list_to_binary(mochijson2:encode({[{"size", Size}]})),
- case merge_util:request(DebugTag, URL, Headers, RequestBody) of
+ case merge_util:request(DebugTag, URL, NodeName, Headers, RequestBody) of
{<<"ok">>, _} ->
ok;
Err ->