diff options
author | Magnus Ahltorp <map@kth.se> | 2017-03-08 23:20:36 +0100 |
---|---|---|
committer | Magnus Ahltorp <map@kth.se> | 2017-03-08 23:23:13 +0100 |
commit | 27b809c9525a876ecde0a5346e0264643197d934 (patch) | |
tree | 31c916cd4905d9bfc0a7f31098c6cb44e3bb70fd /merge/src/merge_backup.erl | |
parent | 64daaf148cd59bf19942014bc754992b6bc6d86d (diff) |
Added heartbeat service. Add source. Send better messages.
Diffstat (limited to 'merge/src/merge_backup.erl')
-rw-r--r-- | merge/src/merge_backup.erl | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/merge/src/merge_backup.erl b/merge/src/merge_backup.erl index f1e9253..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,14 +68,14 @@ 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). @@ -88,8 +88,8 @@ write_backupfile(NodeName, TreeSize, TreeHead) -> {"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; @@ -99,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 -> |