From 36a11575d2a7681acf866c8410e2d20a9d9b1e23 Mon Sep 17 00:00:00 2001 From: Ulf Wiger Date: Wed, 20 Aug 2025 20:43:17 +0200 Subject: [PATCH 1/4] Add missing demonitor() calls --- src/gmhc_handler.erl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gmhc_handler.erl b/src/gmhc_handler.erl index 9a58c75..f46761d 100644 --- a/src/gmhc_handler.erl +++ b/src/gmhc_handler.erl @@ -129,12 +129,15 @@ call_connector(Req0) -> gmhc_connector:send(ViaId, #{call => Req#{ id => Id }}), receive {from_pool, #{reply := #{ id := Id, result := Result }}} -> + erlang:demonitor(MRef), Result; {from_pool, #{error := #{ id := Id } = Error}} -> + erlang:demonitor(MRef), {error, maps:remove(id, Error)}; {'DOWN', MRef, _, _, _} -> {error, no_connection} after 5000 -> + erlang:demonitor(MRef), {error, {timeout, process_info(self(), messages)}} end end. From 0a76bada43994bf53e871f46f4a38ba4a61e82a0 Mon Sep 17 00:00:00 2001 From: Ulf Wiger Date: Wed, 20 Aug 2025 20:44:55 +0200 Subject: [PATCH 2/4] bump zx patch vsn --- ebin/gmhive_client.app | 2 +- zomp.meta | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ebin/gmhive_client.app b/ebin/gmhive_client.app index 2ffc191..e98f603 100644 --- a/ebin/gmhive_client.app +++ b/ebin/gmhive_client.app @@ -1,6 +1,6 @@ {application,gmhive_client, [{description,"Gajumaru Hive Client"}, - {vsn,"0.4.5"}, + {vsn,"0.4.6"}, {registered,[]}, {applications,[kernel,stdlib,sasl,gproc,inets,ssl,enoise, gmconfig,gmhive_protocol,gmhive_worker]}, diff --git a/zomp.meta b/zomp.meta index b85d6d4..413c394 100644 --- a/zomp.meta +++ b/zomp.meta @@ -4,7 +4,7 @@ {prefix,"gmhc"}. {author,"Ulf Wiger, QPQ AG"}. {desc,"Gajumaru Hive Client"}. -{package_id,{"uwiger","gmhive_client",{0,4,5}}}. +{package_id,{"uwiger","gmhive_client",{0,4,6}}}. {deps,[{"uwiger","gmcuckoo",{1,2,3}}, {"uwiger","gmhive_worker",{0,3,0}}, {"otpr","eblake2",{1,0,1}}, From d61f10394543cad3678bcf2396c8c063f7f148bf Mon Sep 17 00:00:00 2001 From: Ulf Wiger Date: Thu, 21 Aug 2025 16:46:11 +0200 Subject: [PATCH 3/4] update gmhive_worker dep, bump patch vsn --- ebin/gmhive_client.app | 2 +- rebar.config | 2 +- rebar.lock | 2 +- zomp.meta | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ebin/gmhive_client.app b/ebin/gmhive_client.app index e98f603..5dd5d34 100644 --- a/ebin/gmhive_client.app +++ b/ebin/gmhive_client.app @@ -1,6 +1,6 @@ {application,gmhive_client, [{description,"Gajumaru Hive Client"}, - {vsn,"0.4.6"}, + {vsn,"0.4.7"}, {registered,[]}, {applications,[kernel,stdlib,sasl,gproc,inets,ssl,enoise, gmconfig,gmhive_protocol,gmhive_worker]}, diff --git a/rebar.config b/rebar.config index aa14abd..2eecc54 100644 --- a/rebar.config +++ b/rebar.config @@ -10,7 +10,7 @@ {gmhive_protocol, {git, "https://git.qpq.swiss/QPQ-AG/gmhive_protocol.git", {ref, "818ce33"}}}, - {gmhive_worker, {git, "https://git.qpq.swiss/QPQ-AG/gmhive_worker", {ref, "255ef59"}}}, + {gmhive_worker, {git, "https://git.qpq.swiss/QPQ-AG/gmhive_worker", {ref, "fac460714f"}}}, {gmconfig, {git, "https://git.qpq.swiss/QPQ-AG/gmconfig.git", {ref, "38620ff9e2"}}}, {gproc, "1.0.0"}, diff --git a/rebar.lock b/rebar.lock index 83d4afa..5358d60 100644 --- a/rebar.lock +++ b/rebar.lock @@ -29,7 +29,7 @@ 0}, {<<"gmhive_worker">>, {git,"https://git.qpq.swiss/QPQ-AG/gmhive_worker", - {ref,"255ef59ccd7f795d2d25f2d0ebcf24e3251b6f36"}}, + {ref,"fac460714fc228eb0b723a3f292a44aec77f094a"}}, 0}, {<<"gmserialization">>, {git,"https://git.qpq.swiss/QPQ-AG/gmserialization.git", diff --git a/zomp.meta b/zomp.meta index 413c394..1a83cb4 100644 --- a/zomp.meta +++ b/zomp.meta @@ -4,9 +4,9 @@ {prefix,"gmhc"}. {author,"Ulf Wiger, QPQ AG"}. {desc,"Gajumaru Hive Client"}. -{package_id,{"uwiger","gmhive_client",{0,4,6}}}. -{deps,[{"uwiger","gmcuckoo",{1,2,3}}, - {"uwiger","gmhive_worker",{0,3,0}}, +{package_id,{"uwiger","gmhive_client",{0,4,7}}}. +{deps,[{"uwiger","gmhive_worker",{0,4,0}}, + {"uwiger","gmcuckoo",{1,2,3}}, {"otpr","eblake2",{1,0,1}}, {"otpr","base58",{0,1,1}}, {"otpr","gmserialization",{0,1,3}}, From 196a2d9949d8f33f4a54415afeeb4c9cca4ef5ac Mon Sep 17 00:00:00 2001 From: Ulf Wiger Date: Thu, 21 Aug 2025 22:46:54 +0200 Subject: [PATCH 4/4] Reset worker errors, retry failed workers --- ebin/gmhive_client.app | 2 +- src/gmhc_app.erl | 1 + src/gmhc_config.erl | 1 + src/gmhc_config_schema.erl | 1 + src/gmhc_connector.erl | 1 + src/gmhc_connectors_sup.erl | 1 + src/gmhc_counters.erl | 1 + src/gmhc_eureka.erl | 1 + src/gmhc_events.erl | 1 + src/gmhc_handler.erl | 1 + src/gmhc_server.erl | 26 +++++++++++++++++++++----- src/gmhc_sup.erl | 1 + src/gmhc_workers.erl | 1 + src/gmhive_client.erl | 1 + zomp.meta | 2 +- 15 files changed, 35 insertions(+), 7 deletions(-) diff --git a/ebin/gmhive_client.app b/ebin/gmhive_client.app index 5dd5d34..b6e0b9f 100644 --- a/ebin/gmhive_client.app +++ b/ebin/gmhive_client.app @@ -1,6 +1,6 @@ {application,gmhive_client, [{description,"Gajumaru Hive Client"}, - {vsn,"0.4.7"}, + {vsn,"0.4.8"}, {registered,[]}, {applications,[kernel,stdlib,sasl,gproc,inets,ssl,enoise, gmconfig,gmhive_protocol,gmhive_worker]}, diff --git a/src/gmhc_app.erl b/src/gmhc_app.erl index 2c2a8c0..9f3724e 100644 --- a/src/gmhc_app.erl +++ b/src/gmhc_app.erl @@ -1,5 +1,6 @@ %% -*- mode: erlang; erlang-indent-level: 4; indent-tabs-mode: nil -*- -module(gmhc_app). +-vsn("0.4.8"). -behaviour(application). diff --git a/src/gmhc_config.erl b/src/gmhc_config.erl index db5c5c7..b4ccd36 100644 --- a/src/gmhc_config.erl +++ b/src/gmhc_config.erl @@ -1,4 +1,5 @@ -module(gmhc_config). +-vsn("0.4.8"). -export([ load_config/0 , get_config/1 diff --git a/src/gmhc_config_schema.erl b/src/gmhc_config_schema.erl index 2468d6e..76bdc59 100644 --- a/src/gmhc_config_schema.erl +++ b/src/gmhc_config_schema.erl @@ -1,4 +1,5 @@ -module(gmhc_config_schema). +-vsn("0.4.8"). -export([ schema/0 , to_json/0 ]). diff --git a/src/gmhc_connector.erl b/src/gmhc_connector.erl index 1f7f5d5..27b6238 100644 --- a/src/gmhc_connector.erl +++ b/src/gmhc_connector.erl @@ -1,4 +1,5 @@ -module(gmhc_connector). +-vsn("0.4.8"). -behaviour(gen_server). diff --git a/src/gmhc_connectors_sup.erl b/src/gmhc_connectors_sup.erl index 45c15f0..9dea7c5 100644 --- a/src/gmhc_connectors_sup.erl +++ b/src/gmhc_connectors_sup.erl @@ -1,4 +1,5 @@ -module(gmhc_connectors_sup). +-vsn("0.4.8"). -behavior(supervisor). -export([ start_link/0 diff --git a/src/gmhc_counters.erl b/src/gmhc_counters.erl index 9855f20..3b42158 100644 --- a/src/gmhc_counters.erl +++ b/src/gmhc_counters.erl @@ -1,4 +1,5 @@ -module(gmhc_counters). +-vsn("0.4.8"). -export([ initialize/0 ]). diff --git a/src/gmhc_eureka.erl b/src/gmhc_eureka.erl index c271f6c..2eb678e 100644 --- a/src/gmhc_eureka.erl +++ b/src/gmhc_eureka.erl @@ -1,4 +1,5 @@ -module(gmhc_eureka). +-vsn("0.4.8"). -export([get_pool_address/0]). diff --git a/src/gmhc_events.erl b/src/gmhc_events.erl index a2c2dea..f5a3e49 100644 --- a/src/gmhc_events.erl +++ b/src/gmhc_events.erl @@ -1,4 +1,5 @@ -module(gmhc_events). +-vsn("0.4.8"). -export([subscribe/1, ensure_subscribed/1, diff --git a/src/gmhc_handler.erl b/src/gmhc_handler.erl index f46761d..6c5f84c 100644 --- a/src/gmhc_handler.erl +++ b/src/gmhc_handler.erl @@ -1,4 +1,5 @@ -module(gmhc_handler). +-vsn("0.4.8"). -behavior(gen_server). -export([ start_link/0 diff --git a/src/gmhc_server.erl b/src/gmhc_server.erl index ce7400d..adae85d 100644 --- a/src/gmhc_server.erl +++ b/src/gmhc_server.erl @@ -1,4 +1,5 @@ -module(gmhc_server). +-vsn("0.4.8"). -behaviour(gen_server). @@ -44,7 +45,7 @@ -define(CONNECTED(S), map_size(S#st.connected) > 0). --define(MAX_ERRORS, 5). +-define(MAX_ERRORS, 50). connected(Id, Type) -> gen_server:call(?MODULE, {connected, Id, Type}). @@ -120,7 +121,7 @@ handle_cast({from_pool, #{via := Connector, catch Cat:Err:St -> ?LOG_ERROR("CAUGHT ~p:~p / ~p", [Cat, Err, St]), - {noreply, S} + {noreply, S} end; handle_cast({disconnected, Id}, #st{connected = Conn} = S) -> ?LOG_DEBUG("disconnected: ~p", [Id]), @@ -154,11 +155,23 @@ handle_info({'EXIT', Pid, Reason}, #st{ workers = Workers gmhc_events:publish(error, ?ERR_EVT(#{error => worker_error, data => Reason})), Ws1 = incr_worker_error(W, Workers), + erlang:start_timer(100, self(), check_workers), {noreply, S#st{workers = Ws1}}; false -> %% ?LOG_DEBUG("EXIT apparently not from worker?? (~p)", [Pid]), {noreply, S} end; +handle_info({timeout, _, check_workers}, #st{workers = Workers} = S) -> + case [W || #worker{cand = undefined} = W <- Workers] of + [] -> + {noreply, S}; + Idle -> + S1 = maybe_request_nonces(S), + S2 = lists:foldl(fun(W, Sx) -> + maybe_restart_worker(W, Sx) + end, S1, Idle), + {noreply, S2} + end; handle_info(Msg, St) -> ?LOG_DEBUG("Unknown msg: ~p", [Msg]), {noreply, St}. @@ -226,14 +239,14 @@ handle_worker_result({worker_result, Result}, W, S) -> case Result of {solutions, Solutions} -> {Cont, S1} = report_solutions_(Solutions, W, S), - maybe_continue(Cont, W, S1); + maybe_continue(Cont, reset_errors(W), S1); {solution, Nonce, Solution} -> %% report_solution(Nonce, Solution, W, S), {Cont, S1} = report_solutions_([{Nonce, Solution}], W, S), - maybe_continue(Cont, W, S1); + maybe_continue(Cont, reset_errors(W), S1); {no_solution, Nonce} -> report_no_solution(Nonce, W, S), - maybe_restart_worker(W, S); + maybe_restart_worker(reset_errors(W), S); {error, S} -> ?LOG_DEBUG("Worker ~p reported error as normal", [W#worker.index]), gmhc_events:publish(error, ?ERR_EVT(#{error => worker_error, @@ -261,6 +274,9 @@ report_solutions_(Solutions, W, S) -> {error, S} end. +reset_errors(#worker{} = W) -> + W#worker{errors = 0}. + reset_worker(#worker{index = I} = W, Ws) -> W1 = reset_worker_(W), lists:keyreplace(I, #worker.index, Ws, W1). diff --git a/src/gmhc_sup.erl b/src/gmhc_sup.erl index 3a20791..cd3970b 100644 --- a/src/gmhc_sup.erl +++ b/src/gmhc_sup.erl @@ -1,5 +1,6 @@ %% -*- mode: erlang; erlang-indent-level: 4; indent-tabs-mode: nil -*- -module(gmhc_sup). +-vsn("0.4.8"). -behaviour(supervisor). diff --git a/src/gmhc_workers.erl b/src/gmhc_workers.erl index d6971df..a467f2c 100644 --- a/src/gmhc_workers.erl +++ b/src/gmhc_workers.erl @@ -8,6 +8,7 @@ %%%------------------------------------------------------------------- -module(gmhc_workers). +-vsn("0.4.8"). -export([ get_worker_configs/0 diff --git a/src/gmhive_client.erl b/src/gmhive_client.erl index 765ebd5..28ef5c7 100644 --- a/src/gmhive_client.erl +++ b/src/gmhive_client.erl @@ -1,4 +1,5 @@ -module(gmhive_client). +-vsn("0.4.8"). -export([ connect/1 , disconnect/1 diff --git a/zomp.meta b/zomp.meta index 1a83cb4..2961dc0 100644 --- a/zomp.meta +++ b/zomp.meta @@ -4,7 +4,7 @@ {prefix,"gmhc"}. {author,"Ulf Wiger, QPQ AG"}. {desc,"Gajumaru Hive Client"}. -{package_id,{"uwiger","gmhive_client",{0,4,7}}}. +{package_id,{"uwiger","gmhive_client",{0,4,8}}}. {deps,[{"uwiger","gmhive_worker",{0,4,0}}, {"uwiger","gmcuckoo",{1,2,3}}, {"otpr","eblake2",{1,0,1}},