Merge pull request 'Report no_solution for all relevant nonces with repeats' (#14) from uw-repeats-reporting into master
Reviewed-on: #14
This commit is contained in:
commit
408bd9fc18
@ -1,6 +1,6 @@
|
|||||||
{application,gmhive_client,
|
{application,gmhive_client,
|
||||||
[{description,"Gajumaru Hive Client"},
|
[{description,"Gajumaru Hive Client"},
|
||||||
{vsn,"0.6.0"},
|
{vsn,"0.6.1"},
|
||||||
{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]},
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
%% -*- mode: erlang; erlang-indent-level: 4; indent-tabs-mode: nil -*-
|
%% -*- mode: erlang; erlang-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
-module(gmhc_app).
|
-module(gmhc_app).
|
||||||
-vsn("0.6.0").
|
-vsn("0.6.1").
|
||||||
|
|
||||||
-behaviour(application).
|
-behaviour(application).
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
-module(gmhc_config).
|
-module(gmhc_config).
|
||||||
-vsn("0.6.0").
|
-vsn("0.6.1").
|
||||||
|
|
||||||
-export([ load_config/0
|
-export([ load_config/0
|
||||||
, get_config/1
|
, get_config/1
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
-module(gmhc_config_schema).
|
-module(gmhc_config_schema).
|
||||||
-vsn("0.6.0").
|
-vsn("0.6.1").
|
||||||
|
|
||||||
-export([ schema/0
|
-export([ schema/0
|
||||||
, to_json/0 ]).
|
, to_json/0 ]).
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
-module(gmhc_connector).
|
-module(gmhc_connector).
|
||||||
-vsn("0.6.0").
|
-vsn("0.6.1").
|
||||||
|
|
||||||
-behaviour(gen_server).
|
-behaviour(gen_server).
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
-module(gmhc_connectors_sup).
|
-module(gmhc_connectors_sup).
|
||||||
-vsn("0.6.0").
|
-vsn("0.6.1").
|
||||||
-behavior(supervisor).
|
-behavior(supervisor).
|
||||||
|
|
||||||
-export([ start_link/0
|
-export([ start_link/0
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
-module(gmhc_counters).
|
-module(gmhc_counters).
|
||||||
-vsn("0.6.0").
|
-vsn("0.6.1").
|
||||||
|
|
||||||
-export([ initialize/0 ]).
|
-export([ initialize/0 ]).
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
-module(gmhc_eureka).
|
-module(gmhc_eureka).
|
||||||
-vsn("0.6.0").
|
-vsn("0.6.1").
|
||||||
|
|
||||||
-export([get_pool_address/0]).
|
-export([get_pool_address/0]).
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
-module(gmhc_events).
|
-module(gmhc_events).
|
||||||
-vsn("0.6.0").
|
-vsn("0.6.1").
|
||||||
|
|
||||||
-export([subscribe/1,
|
-export([subscribe/1,
|
||||||
ensure_subscribed/1,
|
ensure_subscribed/1,
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
-module(gmhc_handler).
|
-module(gmhc_handler).
|
||||||
-vsn("0.6.0").
|
-vsn("0.6.1").
|
||||||
-behavior(gen_server).
|
-behavior(gen_server).
|
||||||
|
|
||||||
-export([ start_link/0
|
-export([ start_link/0
|
||||||
@ -12,6 +12,7 @@
|
|||||||
]).
|
]).
|
||||||
|
|
||||||
-export([ call/1
|
-export([ call/1
|
||||||
|
, async_call/1
|
||||||
, notify/1
|
, notify/1
|
||||||
, pool_connected/2
|
, pool_connected/2
|
||||||
, from_pool/1 ]).
|
, from_pool/1 ]).
|
||||||
@ -38,6 +39,13 @@ call(Req) ->
|
|||||||
{error, Reason}
|
{error, Reason}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
async_call(Req) ->
|
||||||
|
try gen_server:call(?MODULE, {async_call, Req}, ?CALL_TIMEOUT)
|
||||||
|
catch
|
||||||
|
exit:Reason ->
|
||||||
|
{error, Reason}
|
||||||
|
end.
|
||||||
|
|
||||||
notify(Msg) ->
|
notify(Msg) ->
|
||||||
gen_server:cast(?MODULE, {notify, Msg}).
|
gen_server:cast(?MODULE, {notify, Msg}).
|
||||||
|
|
||||||
@ -56,6 +64,8 @@ init([]) ->
|
|||||||
|
|
||||||
handle_call({call, Req}, _From, #st{} = S) ->
|
handle_call({call, Req}, _From, #st{} = S) ->
|
||||||
{reply, call_connector(Req), S};
|
{reply, call_connector(Req), S};
|
||||||
|
handle_call({async_call, Req}, _From, #st{} = S) ->
|
||||||
|
{reply, call_connector(Req, false), S};
|
||||||
handle_call(_Req, _From, S) ->
|
handle_call(_Req, _From, S) ->
|
||||||
{reply, {error, unknown_method}, S}.
|
{reply, {error, unknown_method}, S}.
|
||||||
|
|
||||||
@ -119,27 +129,39 @@ maybe_publish(_) ->
|
|||||||
maybe_via(#{via := Via}, Info) ->
|
maybe_via(#{via := Via}, Info) ->
|
||||||
Info#{via => Via}.
|
Info#{via => Via}.
|
||||||
|
|
||||||
call_connector(Req0) ->
|
call_connector(Req) ->
|
||||||
|
call_connector(Req, true).
|
||||||
|
|
||||||
|
call_connector(Req0, Wait) ->
|
||||||
{ViaId, Req} = maps:take(via, Req0),
|
{ViaId, Req} = maps:take(via, Req0),
|
||||||
case gmhc_connector:whereis_id(ViaId) of
|
case gmhc_connector:whereis_id(ViaId) of
|
||||||
undefined ->
|
undefined ->
|
||||||
{error, no_connection};
|
{error, no_connection};
|
||||||
Pid when is_pid(Pid) ->
|
Pid when is_pid(Pid) ->
|
||||||
Id = erlang:unique_integer(),
|
Id = erlang:unique_integer(),
|
||||||
MRef = erlang:monitor(process, Pid),
|
MRef = case Wait of
|
||||||
|
true -> erlang:monitor(process, Pid);
|
||||||
|
false -> none
|
||||||
|
end,
|
||||||
gmhc_connector:send(ViaId, #{call => Req#{ id => Id }}),
|
gmhc_connector:send(ViaId, #{call => Req#{ id => Id }}),
|
||||||
receive
|
case Wait of
|
||||||
{from_pool, #{reply := #{ id := Id, result := Result }}} ->
|
true ->
|
||||||
erlang:demonitor(MRef),
|
receive
|
||||||
Result;
|
{from_pool, #{reply := #{ id := Id
|
||||||
{from_pool, #{error := #{ id := Id } = Error}} ->
|
, result := Result }}} ->
|
||||||
erlang:demonitor(MRef),
|
erlang:demonitor(MRef),
|
||||||
{error, maps:remove(id, Error)};
|
Result;
|
||||||
{'DOWN', MRef, _, _, _} ->
|
{from_pool, #{error := #{ id := Id } = Error}} ->
|
||||||
{error, no_connection}
|
erlang:demonitor(MRef),
|
||||||
after 5000 ->
|
{error, maps:remove(id, Error)};
|
||||||
erlang:demonitor(MRef),
|
{'DOWN', MRef, _, _, _} ->
|
||||||
{error, {timeout, process_info(self(), messages)}}
|
{error, no_connection}
|
||||||
|
after 5000 ->
|
||||||
|
erlang:demonitor(MRef),
|
||||||
|
{error, {timeout, process_info(self(), messages)}}
|
||||||
|
end;
|
||||||
|
false ->
|
||||||
|
ok
|
||||||
end
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
-module(gmhc_server).
|
-module(gmhc_server).
|
||||||
-vsn("0.6.0").
|
-vsn("0.6.1").
|
||||||
|
|
||||||
-behaviour(gen_server).
|
-behaviour(gen_server).
|
||||||
|
|
||||||
@ -184,6 +184,9 @@ code_change(_FromVsn, S, _Extra) ->
|
|||||||
|
|
||||||
report_solutions(Solutions, W, #st{} = S) when ?CONNECTED(S) ->
|
report_solutions(Solutions, W, #st{} = S) when ?CONNECTED(S) ->
|
||||||
#{via := Via, seq := Seq} = W#worker.cand,
|
#{via := Via, seq := Seq} = W#worker.cand,
|
||||||
|
Nonces = all_nonces(W),
|
||||||
|
[report_no_solution_(Via, Seq, N)
|
||||||
|
|| N <- Nonces, not lists:keymember(N, 1, Solutions)],
|
||||||
gmhc_handler:call(
|
gmhc_handler:call(
|
||||||
#{via => Via,
|
#{via => Via,
|
||||||
solutions => #{ seq => Seq
|
solutions => #{ seq => Seq
|
||||||
@ -191,18 +194,23 @@ report_solutions(Solutions, W, #st{} = S) when ?CONNECTED(S) ->
|
|||||||
, evidence => Evd }
|
, evidence => Evd }
|
||||||
|| {Nonce, Evd} <- Solutions] }}).
|
|| {Nonce, Evd} <- Solutions] }}).
|
||||||
|
|
||||||
%% report_solution(Nonce, Solution, W, #st{connected = true}) ->
|
report_no_solution(_Nonce, W, #st{} = S) when ?CONNECTED(S) ->
|
||||||
%% #{seq := Seq} = W#worker.cand,
|
|
||||||
%% gmhc_handler:call(#{solution => #{ seq => Seq
|
|
||||||
%% , nonce => Nonce
|
|
||||||
%% , evidence => Solution }}).
|
|
||||||
|
|
||||||
report_no_solution(Nonce, W, #st{} = S) when ?CONNECTED(S) ->
|
|
||||||
#{via := Via, seq := Seq} = W#worker.cand,
|
#{via := Via, seq := Seq} = W#worker.cand,
|
||||||
|
Nonces = all_nonces(W),
|
||||||
%% ?LOG_DEBUG("report no_solution Seq = ~p, Nonce = ~p", [Seq, Nonce]),
|
%% ?LOG_DEBUG("report no_solution Seq = ~p, Nonce = ~p", [Seq, Nonce]),
|
||||||
gmhc_handler:call(#{via => Via,
|
[report_no_solution_(Via, Seq, Nonce1) || Nonce1 <- Nonces],
|
||||||
no_solution => #{ seq => Seq
|
ok.
|
||||||
, nonce => Nonce}}).
|
|
||||||
|
report_no_solution_(Via, Seq, Nonce) ->
|
||||||
|
gmhc_handler:async_call(#{via => Via,
|
||||||
|
no_solution => #{ seq => Seq
|
||||||
|
, nonce => Nonce}}).
|
||||||
|
|
||||||
|
all_nonces(#worker{nonce = Nonce, config = Config}) ->
|
||||||
|
case gmhw_pow_cuckoo:repeats(Config) of
|
||||||
|
1 -> [Nonce];
|
||||||
|
Rs -> lists:seq(Nonce, Nonce + Rs - 1)
|
||||||
|
end.
|
||||||
|
|
||||||
maybe_request_nonces(#st{ candidate = #{via := Via, seq := Seq, nonces := Nonces}
|
maybe_request_nonces(#st{ candidate = #{via := Via, seq := Seq, nonces := Nonces}
|
||||||
, nonces = N} = S) when ?CONNECTED(S) ->
|
, nonces = N} = S) when ?CONNECTED(S) ->
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
%% -*- mode: erlang; erlang-indent-level: 4; indent-tabs-mode: nil -*-
|
%% -*- mode: erlang; erlang-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
-module(gmhc_sup).
|
-module(gmhc_sup).
|
||||||
-vsn("0.6.0").
|
-vsn("0.6.1").
|
||||||
|
|
||||||
-behaviour(supervisor).
|
-behaviour(supervisor).
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
%%%-------------------------------------------------------------------
|
%%%-------------------------------------------------------------------
|
||||||
|
|
||||||
-module(gmhc_workers).
|
-module(gmhc_workers).
|
||||||
-vsn("0.6.0").
|
-vsn("0.6.1").
|
||||||
|
|
||||||
-export([
|
-export([
|
||||||
get_worker_configs/0
|
get_worker_configs/0
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
-module(gmhive_client).
|
-module(gmhive_client).
|
||||||
-vsn("0.6.0").
|
-vsn("0.6.1").
|
||||||
|
|
||||||
-export([ connect/1
|
-export([ connect/1
|
||||||
, disconnect/1
|
, disconnect/1
|
||||||
|
|||||||
@ -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,6,0}}}.
|
{package_id,{"uwiger","gmhive_client",{0,6,1}}}.
|
||||||
{deps,[{"uwiger","gmhive_worker",{0,5,1}},
|
{deps,[{"uwiger","gmhive_worker",{0,5,1}},
|
||||||
{"uwiger","gmcuckoo",{1,2,4}},
|
{"uwiger","gmcuckoo",{1,2,4}},
|
||||||
{"otpr","eblake2",{1,0,1}},
|
{"otpr","eblake2",{1,0,1}},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user