Compare commits
3 Commits
uw-limit-c
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| e85df7c27c | |||
|
|
2078ae7115 | ||
|
|
8e795da00d |
@ -1,6 +1,6 @@
|
||||
{application,gmhive_client,
|
||||
[{description,"Gajumaru Hive Client"},
|
||||
{vsn,"0.9.2"},
|
||||
{vsn,"0.10.0"},
|
||||
{registered,[]},
|
||||
{applications,[kernel,stdlib,sasl,gproc,inets,ssl,enoise,
|
||||
gmconfig,gmhive_protocol,gmhive_worker]},
|
||||
|
||||
@ -17,11 +17,11 @@
|
||||
-spec start([{atom(), any()}]) -> {ok, [atom()]} | {error, any()}.
|
||||
start(Opts) ->
|
||||
application:load(gmhive_client),
|
||||
{error,_} = application:stop(gmhive_client),
|
||||
_ = application:stop(gmhive_client),
|
||||
_ = lists:foreach(fun({K, V}) ->
|
||||
application:set_env(gmhive_client, K, V)
|
||||
end, Opts),
|
||||
application:ensure_all_started(gmhive_client).
|
||||
application:ensure_all_started(gmhive_client, permanent).
|
||||
|
||||
start(_StartType, _StartArgs) ->
|
||||
set_things_up(),
|
||||
|
||||
@ -57,6 +57,7 @@
|
||||
, auto_connect = true :: boolean()
|
||||
, econn
|
||||
, connected = false :: boolean()
|
||||
, status = disconnected :: disconnected | connecting | connected
|
||||
, reconnect = true :: boolean()
|
||||
, reconnect_timer :: timer_ref() | 'undefined'
|
||||
, recache_timer :: reference() | 'undefined'
|
||||
@ -295,8 +296,9 @@ try_connect_(Opts0, S) ->
|
||||
case try_noise_connect(maps:merge(Opts0, PoolOpts)) of
|
||||
{ok, EConn, Opts1} ->
|
||||
S1 = protocol_connect(Opts1, S#st{ econn = EConn
|
||||
, status = connecting
|
||||
, reconnect_timer = undefined }),
|
||||
{ok, S1};
|
||||
{ok, S1#st{status = connected}};
|
||||
{error, _} = Error ->
|
||||
Error
|
||||
end
|
||||
@ -442,14 +444,14 @@ protocol_connect(Opts, #st{econn = EConn} = S) ->
|
||||
Type = to_atom(opt(type, Opts, [<<"type">>])),
|
||||
RId = erlang:unique_integer(),
|
||||
Vsns = gmhp_msgs:versions(),
|
||||
%% Client = client_name(),
|
||||
Client = client_name(),
|
||||
Protocols = gmhp_msgs:protocols(hd(Vsns)),
|
||||
ConnectReq = #{ protocols => Protocols
|
||||
, versions => Vsns
|
||||
, pool_id => PoolId
|
||||
, pubkey => Pubkey
|
||||
, extra_pubkeys => Extra
|
||||
%% , client => Client
|
||||
, client => Client
|
||||
, type => Type
|
||||
, nonces => gmhc_server:total_nonces()
|
||||
, signature => ""},
|
||||
@ -484,7 +486,10 @@ send_connect(EConn, RId, Msg, #{pubkey := Pubkey,
|
||||
notify_connected(S1#st{protocol = P, version = V, opts = Opts1});
|
||||
#{error := #{code := _, message := ErrMsg}} = ErrReply ->
|
||||
?LOG_ERROR("Connect error: ~s", [ErrMsg]),
|
||||
disconnected(S#st.id, ErrReply, S),
|
||||
%% TODO: fix the flow so that we send one disconnected event,
|
||||
%% and set the reconnect in the right place. For now, stuff
|
||||
%% the `reconnect = false`.
|
||||
disconnected(S#st.id, ErrReply, S#st{reconnect = false}),
|
||||
gmhc_eureka:invalidate_cache(),
|
||||
error(rejected)
|
||||
end
|
||||
@ -493,37 +498,20 @@ send_connect(EConn, RId, Msg, #{pubkey := Pubkey,
|
||||
error(protocol_connect_timeout)
|
||||
end.
|
||||
|
||||
%% client_name() ->
|
||||
%% MyStr = app_string(gmhive_client),
|
||||
%% case app_string(gajumine) of
|
||||
%% <<>> -> MyStr;
|
||||
%% GMStr -> <<MyStr/binary,",",GMStr/binary>>
|
||||
%% end.
|
||||
%% %% {ok, Vsn} = application:get_key(gmhive_client, vsn),
|
||||
%% %% maybe_add_gajumine(unicode:characters_to_binary(["gmhive_client-", Vsn])).
|
||||
client_name() ->
|
||||
MyStr = app_string(gmhive_client),
|
||||
case app_string(gajumine) of
|
||||
<<>> -> MyStr;
|
||||
GMStr -> <<MyStr/binary,",",GMStr/binary>>
|
||||
end.
|
||||
|
||||
%% maybe_add_gajumine(Str) ->
|
||||
%% case setup_zomp:is_zomp_context() of
|
||||
%% true ->
|
||||
%% case zx_daemon:meta() of
|
||||
%% #{package_id := {"qpq","gajumine",_} = PId} ->
|
||||
%% {ok, PStr} = zx_lib:package_string(PId),
|
||||
%% GMStr = unicode:characters_to_binary([",", PStr]),
|
||||
%% <<Str/binary, GMStr/binary>>;
|
||||
%% _ ->
|
||||
%% Str
|
||||
%% end;
|
||||
%% false ->
|
||||
%% Str
|
||||
%% end.
|
||||
|
||||
%% app_string(App) ->
|
||||
%% case application:get_key(App, vsn) of
|
||||
%% undefined ->
|
||||
%% <<>>;
|
||||
%% {ok, Vsn} ->
|
||||
%% unicode:characters_to_binary([atom_to_binary(App),"-",Vsn])
|
||||
%% end.
|
||||
app_string(App) ->
|
||||
case application:get_key(App, vsn) of
|
||||
undefined ->
|
||||
<<>>;
|
||||
{ok, Vsn} ->
|
||||
unicode:characters_to_binary([atom_to_binary(App),"-",Vsn])
|
||||
end.
|
||||
|
||||
to_bin(A) when is_atom(A) ->
|
||||
atom_to_binary(A, utf8);
|
||||
@ -541,10 +529,11 @@ connected(Id, Type, S) when Type==worker; Type==monitor ->
|
||||
disconnected(Id, S) ->
|
||||
disconnected(Id, #{}, S).
|
||||
|
||||
disconnected(Id, Msg, S) ->
|
||||
gmhc_events:publish(disconnected, Msg#{id => Id}),
|
||||
disconnected(_, _, #st{status = disconnected} = S) -> S;
|
||||
disconnected(Id, Msg, #st{reconnect = Bool} = S) ->
|
||||
gmhc_events:publish(disconnected, Msg#{id => Id, reconnecting => Bool}),
|
||||
gmhc_server:disconnected(Id),
|
||||
S#st{connected = false}.
|
||||
S#st{connected = false, status = disconnected}.
|
||||
|
||||
opt_autoconnect(#{auto_connect := Bool}) when is_boolean(Bool) ->
|
||||
Bool;
|
||||
|
||||
@ -49,8 +49,8 @@ add_restart_info(Id, Opts) ->
|
||||
init([]) ->
|
||||
Mod = gmhc_connector,
|
||||
SupFlags = #{ strategy => simple_one_for_one
|
||||
, intensity => 3
|
||||
, period => 10 },
|
||||
, intensity => 5
|
||||
, period => 60 },
|
||||
ChildSpecs = [ #{ id => Mod
|
||||
, start => {Mod, start_link, []}
|
||||
, type => worker
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
|
||||
-record(st, {pools = [], opts = #{}}).
|
||||
|
||||
-define(CALL_TIMEOUT, 5000).
|
||||
-define(CALL_TIMEOUT, 10_000).
|
||||
|
||||
-include_lib("kernel/include/logger.hrl").
|
||||
|
||||
|
||||
@ -20,8 +20,8 @@ init([]) ->
|
||||
, worker(gmhc_handler)
|
||||
, supervisor(gmhc_connectors_sup) ],
|
||||
SupFlags = #{ strategy => rest_for_one
|
||||
, intensity => 1
|
||||
, period => 5
|
||||
, intensity => 5 %% We really want the hive client to sort itself out
|
||||
, period => 5*60 %% Timemout issues can happen infrequently
|
||||
, auto_shutdown => never },
|
||||
{ok, {SupFlags, ChildSpecs}}.
|
||||
|
||||
|
||||
@ -2,10 +2,10 @@
|
||||
{type,app}.
|
||||
{modules,[]}.
|
||||
{prefix,"gmhc"}.
|
||||
{desc,"Gajumaru Hive Client"}.
|
||||
{author,"Ulf Wiger, QPQ AG"}.
|
||||
{package_id,{"uwiger","gmhive_client",{0,9,2}}}.
|
||||
{deps,[{"uwiger","gmhive_protocol",{0,2,0}},
|
||||
{desc,"Gajumaru Hive Client"}.
|
||||
{package_id,{"uwiger","gmhive_client",{0,10,0}}}.
|
||||
{deps,[{"uwiger","gmhive_protocol",{0,3,1}},
|
||||
{"uwiger","gmhive_worker",{0,5,1}},
|
||||
{"uwiger","gmcuckoo",{1,2,4}},
|
||||
{"otpr","eblake2",{1,0,1}},
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user