diff options
Diffstat (limited to 'merge/src/merge_fetch_newentries.erl')
-rw-r--r-- | merge/src/merge_fetch_newentries.erl | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/merge/src/merge_fetch_newentries.erl b/merge/src/merge_fetch_newentries.erl index b45aaec..befb3f7 100644 --- a/merge/src/merge_fetch_newentries.erl +++ b/merge/src/merge_fetch_newentries.erl @@ -21,10 +21,34 @@ handle_call(stop, _From, ChildPid) -> exit(ChildPid, stop), {stop, normal, stopped, nil}. +get_newentries(NodeName, NodeAddress) -> + DebugTag = "fetchnewentries", + URL = NodeAddress ++ "fetchnewentries", + case merge_util:request(DebugTag, URL, NodeName) of + {<<"ok">>, PropList} -> + Entries = lists:map(fun (S) -> base64:decode(S) end, proplists:get_value(<<"entries">>, PropList)), + {ok, Entries}; + Err -> + throw({request_error, result, DebugTag, Err}) + end. + loop(Name, Address, Period) -> + receive after Period -> ok end, lager:info("~p:~p: asking storage node at ~p for missing entries", [?MODULE, Name, Address]), - receive after Period -> ok end, + EntriesResult = try + get_newentries(Name, Address) + catch + throw:{request_error,request,Tag,Error2} -> + {error, Tag, Error2} + end, + case EntriesResult of + {ok, Entries} -> + lager:debug("got entries: ~p", [Entries]), + merge_fetch_ctrl:newentries(Entries, Name); + {error, _Tag, Error} -> + lager:info("failed to get entries from ~p: ~p", [Name, Error]) + end, loop(Name, Address, Period). handle_cast(_Request, State) -> |