diff options
Diffstat (limited to 'src/mem3/src/mem3_sync_nodes.erl')
-rw-r--r-- | src/mem3/src/mem3_sync_nodes.erl | 37 |
1 files changed, 10 insertions, 27 deletions
diff --git a/src/mem3/src/mem3_sync_nodes.erl b/src/mem3/src/mem3_sync_nodes.erl index 0a4bffcd2..43ca8b756 100644 --- a/src/mem3/src/mem3_sync_nodes.erl +++ b/src/mem3/src/mem3_sync_nodes.erl @@ -14,7 +14,6 @@ -behaviour(gen_server). -vsn(1). - -export([start_link/0]). -export([add/1]). @@ -23,86 +22,71 @@ -export([monitor_sync/1]). - -record(st, { tid }). - -record(job, { nodes, pid, retry }). - start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). - add(Nodes) -> gen_server:cast(?MODULE, {add, Nodes}). - init([]) -> {ok, #st{ tid = ets:new(?MODULE, [set, protected, {keypos, #job.nodes}]) }}. - terminate(_Reason, St) -> - [exit(Pid, kill) || #job{pid=Pid} <- ets:tab2list(St#st.tid)], + [exit(Pid, kill) || #job{pid = Pid} <- ets:tab2list(St#st.tid)], ok. - handle_call(Msg, _From, St) -> {stop, {invalid_call, Msg}, invalid_call, St}. - -handle_cast({add, Nodes}, #st{tid=Tid}=St) -> +handle_cast({add, Nodes}, #st{tid = Tid} = St) -> case ets:lookup(Tid, Nodes) of [] -> Pid = start_sync(Nodes), - ets:insert(Tid, #job{nodes=Nodes, pid=Pid, retry=false}); - [#job{retry=false}=Job] -> - ets:insert(Tid, Job#job{retry=true}); + ets:insert(Tid, #job{nodes = Nodes, pid = Pid, retry = false}); + [#job{retry = false} = Job] -> + ets:insert(Tid, Job#job{retry = true}); _ -> ok end, {noreply, St}; - handle_cast(Msg, St) -> {stop, {invalid_cast, Msg}, St}. - -handle_info({'DOWN', _, _, _, {sync_done, Nodes}}, #st{tid=Tid}=St) -> +handle_info({'DOWN', _, _, _, {sync_done, Nodes}}, #st{tid = Tid} = St) -> case ets:lookup(Tid, Nodes) of - [#job{retry=true}=Job] -> + [#job{retry = true} = Job] -> Pid = start_sync(Nodes), - ets:insert(Tid, Job#job{pid=Pid, retry=false}); + ets:insert(Tid, Job#job{pid = Pid, retry = false}); _ -> ets:delete(Tid, Nodes) end, {noreply, St}; - -handle_info({'DOWN', _, _, _, {sync_error, Nodes}}, #st{tid=Tid}=St) -> +handle_info({'DOWN', _, _, _, {sync_error, Nodes}}, #st{tid = Tid} = St) -> Pid = start_sync(Nodes), - ets:insert(Tid, #job{nodes=Nodes, pid=Pid, retry=false}), + ets:insert(Tid, #job{nodes = Nodes, pid = Pid, retry = false}), {noreply, St}; - handle_info(Msg, St) -> {stop, {invalid_info, Msg}, St}. - code_change(_OldVsn, St, _Extra) -> {ok, St}. - start_sync(Nodes) -> {Pid, _} = spawn_monitor(?MODULE, monitor_sync, [Nodes]), Pid. - monitor_sync(Nodes) -> process_flag(trap_exit, true), Pid = spawn_link(mem3_sync, initial_sync, [Nodes]), @@ -112,4 +96,3 @@ monitor_sync(Nodes) -> _ -> exit({sync_error, Nodes}) end. - |