From a71a06130591c77d0bc1d695281f7168d8559d16 Mon Sep 17 00:00:00 2001 From: J Phani Mahesh Date: Mon, 27 Feb 2017 14:01:20 +0530 Subject: [PATCH 1/4] add app.src,rebar.lock, ignores for rebar3 Having src/emqttd.app.src allows rebar family of build tools (rebar2, and rebar3) to be used to compile emqttd. This is important to allow plugins to be written using rebar3, to lock dependencies. rebar.lock contains references to commits or hashes of dependencies and is used by rebar3 to allow repeatable builds. This is important since without it, updates to dependencies are silently pulled and it is impractical to replicate a build properly. However, this adds an additional maintenance effort. Periodically, the lock file must be updated using rebar3 upgrade, and app.src must be updated when adding new dependencies. Note that erlang.mk does not respect dependency locking currently, and does not benefit from rebar.lock. _build is used by rebar3 and mix for storing built artifacts. --- .gitignore | 3 +++ rebar.lock | 32 ++++++++++++++++++++++++++++++++ src/emqttd.app.src | 8 ++++++++ 3 files changed, 43 insertions(+) create mode 100644 rebar.lock create mode 100644 src/emqttd.app.src diff --git a/.gitignore b/.gitignore index 8bbf0a28b..b78d533e5 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,6 @@ ct.coverdata emqttd.iml _rel/ data/ +_build +.rebar3 +rebar3.crashdump diff --git a/rebar.lock b/rebar.lock new file mode 100644 index 000000000..e5d182bad --- /dev/null +++ b/rebar.lock @@ -0,0 +1,32 @@ +[{<<"esockd">>, + {git,"https://github.com/emqtt/esockd", + {ref,"6ef597f16ce242fe37ae019d6ff5214f7a784c80"}}, + 0}, + {<<"gen_logger">>, + {git,"https://github.com/emqtt/gen_logger.git", + {ref,"f6e9f2f373d99f41ffe0579ab5a5f3b19472c9c5"}}, + 1}, + {<<"goldrush">>, + {git,"https://github.com/basho/goldrush.git", + {ref,"8f1b715d36b650ec1e1f5612c00e28af6ab0de82"}}, + 1}, + {<<"gproc">>, + {git,"https://github.com/uwiger/gproc", + {ref,"01c8fbfdd5e4701e8e4b57b0c8279872f9574b0b"}}, + 0}, + {<<"lager">>, + {git,"https://github.com/basho/lager", + {ref,"81eaef0ce98fdbf64ab95665e3bc2ec4b24c7dac"}}, + 0}, + {<<"lager_syslog">>, + {git,"https://github.com/basho/lager_syslog", + {ref,"126dd0284fcac9b01613189a82facf8d803411a2"}}, + 0}, + {<<"mochiweb">>, + {git,"https://github.com/emqtt/mochiweb", + {ref,"af27c0c90bf4c1bfeae0290e4c541264b69f7168"}}, + 0}, + {<<"syslog">>, + {git,"git://github.com/Vagabond/erlang-syslog", + {ref,"0e4f0e95c361af298c5d1d17ceccfa831efc036d"}}, + 1}]. diff --git a/src/emqttd.app.src b/src/emqttd.app.src new file mode 100644 index 000000000..c86af2a0a --- /dev/null +++ b/src/emqttd.app.src @@ -0,0 +1,8 @@ +{application, emqttd, [ + {description, "Erlang MQTT Broker"}, + {vsn, "2.1.0"}, + {modules, []}, + {registered, [emqttd_sup]}, + {applications, [kernel,stdlib,gproc,lager,esockd,mochiweb,lager_syslog]}, + {mod, {emqttd_app, []}} +]}. From 93719a13f3d5d6946b4f6894d78ad487be01ad59 Mon Sep 17 00:00:00 2001 From: buxizhizhoum Date: Fri, 3 Mar 2017 22:05:26 +0800 Subject: [PATCH 2/4] Edit the note of tick timer --- src/emqttd_broker.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/emqttd_broker.erl b/src/emqttd_broker.erl index ce2e4210c..eba1a6ac8 100644 --- a/src/emqttd_broker.erl +++ b/src/emqttd_broker.erl @@ -106,7 +106,7 @@ start_tick(0, _Msg) -> start_tick(Interval, Msg) when Interval > 0 -> {ok, TRef} = timer:send_interval(Interval, Msg), TRef. -%% @doc Start tick timer +%% @doc Stop tick timer stop_tick(undefined) -> ok; stop_tick(TRef) -> From 64724573427faaf4a2c7e406513f2100d0975d43 Mon Sep 17 00:00:00 2001 From: Frank Feng Date: Sun, 12 Mar 2017 23:06:57 +0800 Subject: [PATCH 3/4] Match {error,einval} --- src/emqttd_client.erl | 9 +++++++-- src/emqttd_keepalive.erl | 25 ++++++++++++++----------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/emqttd_client.erl b/src/emqttd_client.erl index e3e68b8e4..a6ddd9eb2 100644 --- a/src/emqttd_client.erl +++ b/src/emqttd_client.erl @@ -252,8 +252,13 @@ handle_info({keepalive, start, Interval}, State = #client_state{connection = Con {error, Error} -> {error, Error} end end, - KeepAlive = emqttd_keepalive:start(StatFun, Interval, {keepalive, check}), - {noreply, State#client_state{keepalive = KeepAlive}, hibernate}; + case emqttd_keepalive:start(StatFun, Interval, {keepalive, check}) of + {ok, KeepAlive} -> + {noreply, State#client_state{keepalive = KeepAlive}, hibernate}; + {error, Error} -> + ?LOG(warning, "Keepalive error - ~p", [Error], State), + shutdown(Error, State) + end; handle_info({keepalive, check}, State = #client_state{keepalive = KeepAlive}) -> case emqttd_keepalive:check(KeepAlive) of diff --git a/src/emqttd_keepalive.erl b/src/emqttd_keepalive.erl index 51d45c89c..ae8f6ffbe 100644 --- a/src/emqttd_keepalive.erl +++ b/src/emqttd_keepalive.erl @@ -29,14 +29,18 @@ -export_type([keepalive/0]). %% @doc Start a keepalive --spec(start(fun(), integer(), any()) -> undefined | keepalive()). +-spec(start(fun(), integer(), any()) -> {ok, keepalive()} | {error, any()}). start(_, 0, _) -> - undefined; + {ok, #keepalive{}}; start(StatFun, TimeoutSec, TimeoutMsg) -> - {ok, StatVal} = StatFun(), - #keepalive{statfun = StatFun, statval = StatVal, - tsec = TimeoutSec, tmsg = TimeoutMsg, - tref = timer(TimeoutSec, TimeoutMsg)}. + case StatFun() of + {ok, StatVal} -> + {ok, #keepalive{statfun = StatFun, statval = StatVal, + tsec = TimeoutSec, tmsg = TimeoutMsg, + tref = timer(TimeoutSec, TimeoutMsg)}}; + {error, Error} -> + {error, Error} + end. %% @doc Check keepalive, called when timeout. -spec(check(keepalive()) -> {ok, keepalive()} | {error, any()}). @@ -59,12 +63,11 @@ resume(KeepAlive = #keepalive{tsec = TimeoutSec, tmsg = TimeoutMsg}) -> %% @doc Cancel Keepalive -spec(cancel(keepalive()) -> ok). -cancel(#keepalive{tref = TRef}) -> - cancel(TRef); -cancel(undefined) -> +cancel(#keepalive{tref = TRef}) when is_reference(TRef) -> + erlang:cancel_timer(TRef), ok; -cancel(TRef) -> - catch erlang:cancel_timer(TRef). +cancel(_) -> + ok. timer(Sec, Msg) -> erlang:send_after(timer:seconds(Sec), self(), Msg). From 7cb3b7ca8a5121bf28b575268e5b4e36f5e8c714 Mon Sep 17 00:00:00 2001 From: Frank Feng Date: Sun, 12 Mar 2017 23:07:45 +0800 Subject: [PATCH 4/4] Id -> I --- include/emqttd_internal.hrl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/emqttd_internal.hrl b/include/emqttd_internal.hrl index fc482313f..72d745646 100644 --- a/include/emqttd_internal.hrl +++ b/include/emqttd_internal.hrl @@ -19,7 +19,7 @@ -define(GPROC_POOL(JoinOrLeave, Pool, I), (begin case JoinOrLeave of - join -> gproc_pool:connect_worker(Pool, {Pool, Id}); + join -> gproc_pool:connect_worker(Pool, {Pool, I}); leave -> gproc_pool:disconnect_worker(Pool, {Pool, I}) end end)).