Compare commits
No commits in common. "uw-handle-empty-nonces" and "master" have entirely different histories.
uw-handle-
...
master
@ -1,6 +1,6 @@
|
|||||||
{application,gmhive_client,
|
{application,gmhive_client,
|
||||||
[{description,"Gajumaru Hive Client"},
|
[{description,"Gajumaru Hive Client"},
|
||||||
{vsn,"0.4.5"},
|
{vsn,"0.4.3"},
|
||||||
{registered,[]},
|
{registered,[]},
|
||||||
{applications,[kernel,stdlib,sasl,gproc,inets,ssl,enoise,
|
{applications,[kernel,stdlib,sasl,gproc,inets,ssl,enoise,
|
||||||
gmconfig,gmhive_protocol,gmhive_worker]},
|
gmconfig,gmhive_protocol,gmhive_worker]},
|
||||||
|
@ -107,16 +107,13 @@ handle_cast({from_pool, #{via := Connector,
|
|||||||
%% We could check whether we have already received the candidate ...
|
%% We could check whether we have already received the candidate ...
|
||||||
%% For now, stop all workers, restart with new candidate
|
%% For now, stop all workers, restart with new candidate
|
||||||
try
|
try
|
||||||
%% Most of the time we don't want to stop the worker. If we do, though, then
|
% Most of the time we don't want to stop the worker. If we do, though, then
|
||||||
%% we need to do it more carefully than this, or memory usage will triple.
|
% we need to do it more carefully than this, or memory usage will triple.
|
||||||
%% Workers1 = stop_workers(Workers),
|
% Workers1 = stop_workers(Workers),
|
||||||
%%
|
{Workers2, Cand1} = assign_nonces(Workers, Cand),
|
||||||
%% Nonces may be [], in which case we need to request new nonces first.
|
#st{candidate = Cand2} = S1 = maybe_request_nonces(S#st{candidate = Cand1}),
|
||||||
#st{candidate = Cand1} = S1 = maybe_request_nonces(S#st{candidate = Cand}),
|
NewWorkers = [spawn_worker(W, Cand2) || W <- Workers2],
|
||||||
{Workers2, Cand2} = assign_nonces(Workers, Cand1),
|
{noreply, S1#st{workers = NewWorkers}}
|
||||||
#st{candidate = Cand3} = S2 = maybe_request_nonces(S1#st{candidate = Cand2}),
|
|
||||||
NewWorkers = [spawn_worker(W, Cand3) || W <- Workers2],
|
|
||||||
{noreply, S2#st{workers = NewWorkers}}
|
|
||||||
catch
|
catch
|
||||||
Cat:Err:St ->
|
Cat:Err:St ->
|
||||||
?LOG_ERROR("CAUGHT ~p:~p / ~p", [Cat, Err, St]),
|
?LOG_ERROR("CAUGHT ~p:~p / ~p", [Cat, Err, St]),
|
||||||
@ -275,14 +272,13 @@ incr_worker_error(#worker{errors = Es, index = I} = W, Ws) ->
|
|||||||
W1 = reset_worker_(W#worker{errors = Es+1}),
|
W1 = reset_worker_(W#worker{errors = Es+1}),
|
||||||
lists:keyreplace(I, #worker.index, Ws, W1).
|
lists:keyreplace(I, #worker.index, Ws, W1).
|
||||||
|
|
||||||
%% maybe_continue(stopped, _, S) ->
|
maybe_continue(stopped, _, S) ->
|
||||||
%% S;
|
S;
|
||||||
maybe_continue(continue, W, S) ->
|
maybe_continue(continue, W, S) ->
|
||||||
maybe_restart_worker(W, S);
|
maybe_restart_worker(W, S);
|
||||||
maybe_continue(error, W, S) ->
|
maybe_continue(error, W, S) ->
|
||||||
?LOG_INFO("Won't restart worker ~p due to error", [W#worker.index]),
|
?LOG_INFO("Won't restart worker ~p due to error", [W#worker.index]),
|
||||||
Ws = reset_worker(W, S#st.workers),
|
S.
|
||||||
S#st{workers = Ws}.
|
|
||||||
|
|
||||||
maybe_restart_worker(#worker{index = I} = W, #st{candidate = C} = S) ->
|
maybe_restart_worker(#worker{index = I} = W, #st{candidate = C} = S) ->
|
||||||
case maps:get(nonces, C) of
|
case maps:get(nonces, C) of
|
||||||
@ -318,7 +314,7 @@ stop_workers_for_seq(Seq, Workers) ->
|
|||||||
stop_worker(#worker{pid = Pid} = W) when is_pid(Pid) ->
|
stop_worker(#worker{pid = Pid} = W) when is_pid(Pid) ->
|
||||||
MRef = erlang:monitor(process, Pid),
|
MRef = erlang:monitor(process, Pid),
|
||||||
?LOG_DEBUG("Will stop worker ~p (MRef = ~p)", [Pid, MRef]),
|
?LOG_DEBUG("Will stop worker ~p (MRef = ~p)", [Pid, MRef]),
|
||||||
exit(Pid, shutdown),
|
exit(Pid, kill),
|
||||||
receive
|
receive
|
||||||
{'EXIT', Pid, _} -> ok;
|
{'EXIT', Pid, _} -> ok;
|
||||||
{'DOWN', MRef, process, Pid, _} -> ok
|
{'DOWN', MRef, process, Pid, _} -> ok
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
{prefix,"gmhc"}.
|
{prefix,"gmhc"}.
|
||||||
{author,"Ulf Wiger, QPQ AG"}.
|
{author,"Ulf Wiger, QPQ AG"}.
|
||||||
{desc,"Gajumaru Hive Client"}.
|
{desc,"Gajumaru Hive Client"}.
|
||||||
{package_id,{"uwiger","gmhive_client",{0,4,5}}}.
|
{package_id,{"uwiger","gmhive_client",{0,4,3}}}.
|
||||||
{deps,[{"uwiger","gmcuckoo",{1,2,3}},
|
{deps,[{"uwiger","gmcuckoo",{1,2,3}},
|
||||||
{"uwiger","gmhive_worker",{0,3,0}},
|
{"uwiger","gmhive_worker",{0,3,0}},
|
||||||
{"otpr","eblake2",{1,0,1}},
|
{"otpr","eblake2",{1,0,1}},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user