diff options
-rw-r--r-- | merge/src/merge_backup.erl | 16 | ||||
-rw-r--r-- | merge/src/merge_sth.erl | 21 | ||||
-rw-r--r-- | merge/src/merge_util.erl | 32 |
3 files changed, 29 insertions, 40 deletions
diff --git a/merge/src/merge_backup.erl b/merge/src/merge_backup.erl index 5f4f3d5..768bd32 100644 --- a/merge/src/merge_backup.erl +++ b/merge/src/merge_backup.erl @@ -28,7 +28,7 @@ handle_cast(_Request, State) -> {noreply, State}. handle_info({timeout, _Timer, backup}, State) -> - backup(merge_util:readfile(fetched_path), State). + backup(merge_util:nfetched(), State). code_change(_OldVsn, State, _Extra) -> {ok, State}. @@ -40,19 +40,9 @@ terminate(Reason, #state{timer = Timer}) -> %%%%%%%%%%%%%%%%%%%% -backup(noentry, State) -> +backup(Size, State) when Size < 0 -> {noreply, State#state{timer = erlang:start_timer(1000, self(), backup)}}; -backup({struct, Fetched}, State) -> - Index = proplists:get_value(<<"index">>, Fetched), - Hash = proplists:get_value(<<"hash">>, Fetched), - backup(Index, Hash, State). - -backup(-1, _, State) -> - {noreply, State#state{timer = erlang:start_timer(1000, self(), backup)}}; -backup(Index, Hash, - #state{node_name = NodeName, node_address = NodeAddress} = State) -> - ok = merge_util:verify_logorder_and_fetched_consistency(Index, Hash), - Size = index:indexsize(logorder), +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 diff --git a/merge/src/merge_sth.erl b/merge/src/merge_sth.erl index a34179d..3dffaca 100644 --- a/merge/src/merge_sth.erl +++ b/merge/src/merge_sth.erl @@ -58,7 +58,7 @@ make_sth(CurSize, State) -> %% entry with the size found in the 'fetched' file, sort the list %% (highest tree size first) and index it with backup quorum to %% get our new tree size. - Sizes = [fetched() | verified_sizes(MergeSecondaryNames)], + Sizes = [merge_util:nfetched() | verified_sizes(MergeSecondaryNames)], BackupQuorumSize = plopconfig:get_env(backup_quorum, 0), true = BackupQuorumSize =< length(MergeSecondaryNames), NewSize = lists:nth(BackupQuorumSize + 1, Sizes), @@ -143,25 +143,6 @@ validate_tree_head(Treesize, Roothash) -> root_mismatch end. -fetched() -> - case read_fetched() of - {-1, _} -> - 0; - {Index, Hash} -> - ok = merge_util:verify_logorder_and_fetched_consistency(Index, Hash), - Index + 1 - end. - -read_fetched() -> % FIXME: merge with backup implementation - case merge_util:readfile(fetched_path) of - noentry -> - {-1, <<>>}; - {struct, PropList} -> - {proplists:get_value(<<"index">>, PropList), - proplists:get_value(<<"hash">>, PropList)} - end. - - read_sth_treesize() -> case plop:sth() of noentry -> diff --git a/merge/src/merge_util.erl b/merge/src/merge_util.erl index 4a4340d..1df1409 100644 --- a/merge/src/merge_util.erl +++ b/merge/src/merge_util.erl @@ -4,7 +4,7 @@ -module(merge_util). -export([sendlog/4, sendentries/3]). -export([request/2, request/4]). --export([readfile/1, verify_logorder_and_fetched_consistency/2]). +-export([readfile/1, nfetched/0]). request(DebugTag, URL) -> request(DebugTag, URL, [], <<>>). @@ -87,13 +87,31 @@ readfile(FileInConfig) -> noentry end. -verify_logorder_and_fetched_consistency(Index, Hash) -> - HashString = binary_to_list(Hash), +nfetched() -> + {Index, Hash} = read_fetched(), + case Index >= 0 of + true -> + ok = verify_logorder_entry(Index, binary_to_list(Hash)); + false -> + ok + end, + Index + 1. + +read_fetched() -> + case merge_util:readfile(fetched_path) of + noentry -> + {-1, <<>>}; + {struct, PropList} -> + {proplists:get_value(<<"index">>, PropList), + proplists:get_value(<<"hash">>, PropList)} + end. + +verify_logorder_entry(Index, HashAsString) -> case hex:bin_to_hexstr(index:get(logorder, Index)) of - HashString -> + HashAsString -> ok; Mismatch -> - lager:error("fetched file hash=~p doesn't match logorder[~B]=~p", - [HashString, Index, Mismatch]), - fetched_mismatch + lager:error("hash in fetched file ~p doesn't match logorder[~B]=~p", + [HashAsString, Index, Mismatch]), + mismatch end. |