Merge branch 'emq20' into develop
This commit is contained in:
commit
50a5c304e2
|
@ -1,10 +1,9 @@
|
||||||
language: erlang
|
language: erlang
|
||||||
|
|
||||||
otp_release:
|
otp_release:
|
||||||
- 18.0
|
- 19.0
|
||||||
- 18.1
|
- 19.1
|
||||||
- 18.2.1
|
- 19.2
|
||||||
- 18.3
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- make
|
- make
|
||||||
|
|
1
Makefile
1
Makefile
|
@ -4,6 +4,7 @@ PROJECT_VERSION = 2.1.0
|
||||||
|
|
||||||
DEPS = goldrush gproc lager esockd mochiweb pbkdf2 lager_syslog
|
DEPS = goldrush gproc lager esockd mochiweb pbkdf2 lager_syslog
|
||||||
|
|
||||||
|
|
||||||
dep_goldrush = git https://github.com/basho/goldrush 0.1.9
|
dep_goldrush = git https://github.com/basho/goldrush 0.1.9
|
||||||
dep_gproc = git https://github.com/uwiger/gproc
|
dep_gproc = git https://github.com/uwiger/gproc
|
||||||
dep_getopt = git https://github.com/jcomellas/getopt v0.8.2
|
dep_getopt = git https://github.com/jcomellas/getopt v0.8.2
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
{application, emqttd, [
|
{application, emqttd, [
|
||||||
{description, "Erlang MQTT Broker"},
|
{description, "Erlang MQTT Broker"},
|
||||||
{vsn, "2.1.0"},
|
{vsn, "2.1.0"},
|
||||||
{modules, []},
|
{modules, []},
|
||||||
{registered, [emqttd_sup]},
|
{registered, [emqttd_sup]},
|
||||||
{applications, [kernel,stdlib,gproc,lager,esockd,mochiweb,lager_syslog]},
|
{applications, [kernel,stdlib,gproc,lager,esockd,mochiweb,lager_syslog,pbkdf2]},
|
||||||
{mod, {emqttd_app, []}}
|
{env, []},
|
||||||
|
{mod, {emqttd_app, []}},
|
||||||
|
{maintainers, ["Feng Lee <feng@emqtt.io>"]},
|
||||||
|
{licenses, ["MIT"]},
|
||||||
|
{links, [{"Github", "https://github.com/emqtt/emqttd"}]}
|
||||||
]}.
|
]}.
|
||||||
|
|
|
@ -127,7 +127,7 @@ do_init(Conn, Env, Peername) ->
|
||||||
force_gc_count = ForceGcCount}),
|
force_gc_count = ForceGcCount}),
|
||||||
IdleTimout = get_value(client_idle_timeout, Env, 30000),
|
IdleTimout = get_value(client_idle_timeout, Env, 30000),
|
||||||
gen_server2:enter_loop(?MODULE, [], State, self(), IdleTimout,
|
gen_server2:enter_loop(?MODULE, [], State, self(), IdleTimout,
|
||||||
{backoff, 1000, 1000, 10000}).
|
{backoff, 2000, 2000, 20000}).
|
||||||
|
|
||||||
send_fun(Conn, Peername) ->
|
send_fun(Conn, Peername) ->
|
||||||
Self = self(),
|
Self = self(),
|
||||||
|
@ -377,6 +377,7 @@ shutdown(Reason, State) ->
|
||||||
stop(Reason, State) ->
|
stop(Reason, State) ->
|
||||||
{stop, Reason, State}.
|
{stop, Reason, State}.
|
||||||
|
|
||||||
gc(State) ->
|
gc(State = #client_state{connection = Conn}) ->
|
||||||
emqttd_gc:maybe_force_gc(#client_state.force_gc_count, State).
|
Cb = fun() -> Conn:gc() end,
|
||||||
|
emqttd_gc:maybe_force_gc(#client_state.force_gc_count, State, Cb).
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,8 @@
|
||||||
|
|
||||||
-author("Feng Lee <feng@emqtt.io>").
|
-author("Feng Lee <feng@emqtt.io>").
|
||||||
|
|
||||||
-export([conn_max_gc_count/0, reset_conn_gc_count/2, maybe_force_gc/2]).
|
-export([conn_max_gc_count/0, reset_conn_gc_count/2, maybe_force_gc/2,
|
||||||
|
maybe_force_gc/3]).
|
||||||
|
|
||||||
-spec(conn_max_gc_count() -> integer()).
|
-spec(conn_max_gc_count() -> integer()).
|
||||||
conn_max_gc_count() ->
|
conn_max_gc_count() ->
|
||||||
|
@ -38,9 +39,11 @@ reset_conn_gc_count(Pos, State) ->
|
||||||
end.
|
end.
|
||||||
|
|
||||||
maybe_force_gc(Pos, State) ->
|
maybe_force_gc(Pos, State) ->
|
||||||
|
maybe_force_gc(Pos, State, fun() -> ok end).
|
||||||
|
maybe_force_gc(Pos, State, Cb) ->
|
||||||
case element(Pos, State) of
|
case element(Pos, State) of
|
||||||
undefined -> State;
|
undefined -> State;
|
||||||
I when I =< 0 -> garbage_collect(),
|
I when I =< 0 -> Cb(), garbage_collect(),
|
||||||
reset_conn_gc_count(Pos, State);
|
reset_conn_gc_count(Pos, State);
|
||||||
I -> setelement(Pos, State, I - 1)
|
I -> setelement(Pos, State, I - 1)
|
||||||
end.
|
end.
|
||||||
|
|
|
@ -104,7 +104,7 @@ init([Env, WsPid, Req, ReplyChannel]) ->
|
||||||
proto_state = ProtoState,
|
proto_state = ProtoState,
|
||||||
enable_stats = EnableStats,
|
enable_stats = EnableStats,
|
||||||
force_gc_count = ForceGcCount},
|
force_gc_count = ForceGcCount},
|
||||||
IdleTimeout, {backoff, 1000, 1000, 10000}, ?MODULE}.
|
IdleTimeout, {backoff, 2000, 2000, 20000}, ?MODULE}.
|
||||||
|
|
||||||
prioritise_call(Msg, _From, _Len, _State) ->
|
prioritise_call(Msg, _From, _Len, _State) ->
|
||||||
case Msg of info -> 10; stats -> 10; state -> 10; _ -> 5 end.
|
case Msg of info -> 10; stats -> 10; state -> 10; _ -> 5 end.
|
||||||
|
|
|
@ -710,7 +710,7 @@ end}.
|
||||||
ConnOpts = Filter([{rate_limit, cuttlefish:conf_get(Key ++ ".rate_limit", Conf, undefined)}]),
|
ConnOpts = Filter([{rate_limit, cuttlefish:conf_get(Key ++ ".rate_limit", Conf, undefined)}]),
|
||||||
Opts = [{connopts, ConnOpts}, {sockopts, TcpOpts(Key)} | LisOpts(Key)],
|
Opts = [{connopts, ConnOpts}, {sockopts, TcpOpts(Key)} | LisOpts(Key)],
|
||||||
[{Name, Port, case Name =:= ssl orelse Name =:= https of
|
[{Name, Port, case Name =:= ssl orelse Name =:= https of
|
||||||
true -> [{ssl, SslOpts(Key)} | Opts];
|
true -> [{sslopts, SslOpts(Key)} | Opts];
|
||||||
false -> Opts
|
false -> Opts
|
||||||
end}]
|
end}]
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue