From 2f01400f38f7b7a7bf75a0e7fc57b348b0924a93 Mon Sep 17 00:00:00 2001 From: J Phani Mahesh Date: Fri, 24 Mar 2017 15:58:51 +0530 Subject: [PATCH 1/7] correct licence in app.src --- src/emqttd.app.src | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/emqttd.app.src b/src/emqttd.app.src index d03a4d952..ca2a561c2 100644 --- a/src/emqttd.app.src +++ b/src/emqttd.app.src @@ -7,6 +7,6 @@ {env, []}, {mod, {emqttd_app, []}}, {maintainers, ["Feng Lee "]}, - {licenses, ["MIT"]}, + {licenses, ["Apache-2.0"]}, {links, [{"Github", "https://github.com/emqtt/emqttd"}]} ]}. From 9240a0355a113c01e8ced71977cbd168c411873b Mon Sep 17 00:00:00 2001 From: Feng Lee Date: Wed, 29 Mar 2017 16:36:17 +0800 Subject: [PATCH 2/7] Fix issue #963 - shutdown if session process exited --- src/emqttd_ws_client.erl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/emqttd_ws_client.erl b/src/emqttd_ws_client.erl index 4beb7bc40..8797088e0 100644 --- a/src/emqttd_ws_client.erl +++ b/src/emqttd_ws_client.erl @@ -225,6 +225,14 @@ handle_info({'EXIT', WsPid, Reason}, State = #wsclient_state{ws_pid = WsPid}) -> ?WSLOG(error, "shutdown: ~p",[Reason], State), shutdown(Reason, State); +%% The session process exited unexpectedly. +handle_info({'EXIT', Pid, Reason}, State = #wsclient_state{proto_state = ProtoState}) -> + case emqttd_protocol:session(ProtoState) of + Pid -> shutdown(Reason, State); + _ -> ?WSLOG(error, "Unexpected EXIT: ~p, Reason: ~p", [Pid, Reason], State), + {noreply, State, hibernate} + end; + handle_info(Info, State) -> ?WSLOG(error, "Unexpected Info: ~p", [Info], State), {noreply, State, hibernate}. From 43207f86ea66fc9ac4cb1621357cc00d4a6593b2 Mon Sep 17 00:00:00 2001 From: Feng Lee Date: Wed, 29 Mar 2017 17:38:43 +0800 Subject: [PATCH 3/7] Use stop/2 to count the shutdown reasons --- src/emqttd_ws_client.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/emqttd_ws_client.erl b/src/emqttd_ws_client.erl index 8797088e0..0c97a5c49 100644 --- a/src/emqttd_ws_client.erl +++ b/src/emqttd_ws_client.erl @@ -228,7 +228,7 @@ handle_info({'EXIT', WsPid, Reason}, State = #wsclient_state{ws_pid = WsPid}) -> %% The session process exited unexpectedly. handle_info({'EXIT', Pid, Reason}, State = #wsclient_state{proto_state = ProtoState}) -> case emqttd_protocol:session(ProtoState) of - Pid -> shutdown(Reason, State); + Pid -> stop(Reason, State); _ -> ?WSLOG(error, "Unexpected EXIT: ~p, Reason: ~p", [Pid, Reason], State), {noreply, State, hibernate} end; From 9bfa46c88062b2c35ebdbd08fc685c07e8ca23a2 Mon Sep 17 00:00:00 2001 From: HuangDan Date: Wed, 29 Mar 2017 21:17:35 +0800 Subject: [PATCH 4/7] Add issues#963 case --- test/emqttd_SUITE.erl | 47 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/test/emqttd_SUITE.erl b/test/emqttd_SUITE.erl index be60926fb..b5402830d 100644 --- a/test/emqttd_SUITE.erl +++ b/test/emqttd_SUITE.erl @@ -103,12 +103,15 @@ groups() -> cli_subscriptions, cli_bridges, cli_plugins, - cli_listeners, + {listeners, [sequence], + [cli_listeners, + conflict_listeners + ]}, cli_vm]}, {cleanSession, [sequence], [cleanSession_validate, - cleanSession_validate1, - cleanSession_validate2]}]. + cleanSession_validate1 + ]}]. init_per_suite(Config) -> application:start(lager), @@ -619,6 +622,35 @@ cli_bridges(_) -> cli_listeners(_) -> emqttd_cli:listeners([]). +conflict_listeners(_) -> + F = + fun() -> + process_flag(trap_exit, true), + emqttc:start_link([{host, "localhost"}, + {port, 1883}, + {client_id, <<"c1">>}, + {clean_sess, false}]) + end, + spawn_link(F), + + {ok, C2} = emqttc:start_link([{host, "localhost"}, + {port, 1883}, + {client_id, <<"c1">>}, + {clean_sess, false}]), + timer:sleep(100), + + Listeners = + lists:map(fun({{Protocol, ListenOn}, Pid}) -> + Key = atom_to_list(Protocol) ++ ":" ++ esockd:to_string(ListenOn), + {Key, [{acceptors, esockd:get_acceptors(Pid)}, + {max_clients, esockd:get_max_clients(Pid)}, + {current_clients, esockd:get_current_clients(Pid)}, + {shutdown_count, esockd:get_shutdown_count(Pid)}]} + end, esockd:listeners()), + ?assertEqual(1, proplists:get_value(current_clients, proplists:get_value("mqtt:tcp:1883", Listeners))), + ?assertEqual([{conflict,1}], proplists:get_value(shutdown_count, proplists:get_value("mqtt:tcp:1883", Listeners))), + emqttc:disconnect(C2). + cli_vm(_) -> emqttd_cli:vm([]), emqttd_cli:vm(["ports"]). @@ -630,7 +662,6 @@ cleanSession_validate(_) -> {clean_sess, false}]), timer:sleep(10), emqttc:subscribe(C1, <<"topic">>, qos0), - ok = emqttd_cli:sessions(["list", "persistent"]), emqttc:disconnect(C1), {ok, Pub} = emqttc:start_link([{host, "localhost"}, {port, 1883}, @@ -639,12 +670,11 @@ cleanSession_validate(_) -> emqttc:publish(Pub, <<"topic">>, <<"m1">>, [{qos, 0}]), timer:sleep(10), {ok, C11} = emqttc:start_link([{host, "localhost"}, - {port, 1883}, - {client_id, <<"c1">>}, - {clean_sess, false}]), + {port, 1883}, + {client_id, <<"c1">>}, + {clean_sess, false}]), timer:sleep(100), Metrics = emqttd_metrics:all(), - ct:log("Metrics:~p~n", [Metrics]), ?assertEqual(1, proplists:get_value('messages/qos0/sent', Metrics)), ?assertEqual(1, proplists:get_value('messages/qos0/received', Metrics)), emqttc:disconnect(Pub), @@ -657,7 +687,6 @@ cleanSession_validate1(_) -> {clean_sess, true}]), timer:sleep(10), emqttc:subscribe(C1, <<"topic">>, qos1), - ok = emqttd_cli:sessions(["list", "transient"]), emqttc:disconnect(C1), {ok, Pub} = emqttc:start_link([{host, "localhost"}, {port, 1883}, From acedcbbfd4d9e2c710d20a7179bee42b6f3e90b9 Mon Sep 17 00:00:00 2001 From: turtled Date: Thu, 30 Mar 2017 11:49:19 +0800 Subject: [PATCH 5/7] syslog handlers emqttd --- priv/emq.schema | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/priv/emq.schema b/priv/emq.schema index 697c6c7ae..7141a2d4a 100644 --- a/priv/emq.schema +++ b/priv/emq.schema @@ -179,7 +179,7 @@ end}. ]}. {mapping, "log.syslog.identity", "lager.handlers", [ - {default, "emq"}, + {default, "emqttd"}, {datatype, string} ]}. From 3573156e8fb9d4f824be7a2bdc9d558a995059d6 Mon Sep 17 00:00:00 2001 From: turtled Date: Fri, 31 Mar 2017 15:31:50 +0800 Subject: [PATCH 6/7] syslog default level error --- priv/emq.schema | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/priv/emq.schema b/priv/emq.schema index 7141a2d4a..a03a618ba 100644 --- a/priv/emq.schema +++ b/priv/emq.schema @@ -189,7 +189,7 @@ end}. ]}. {mapping, "log.syslog.level", "lager.handlers", [ - {default, err}, + {default, error}, {datatype, {enum, [debug, info, notice, warning, error, critical, alert, emergency]}} ]}. From f375eeaa1876fd78edece19168aecae3a2e620ec Mon Sep 17 00:00:00 2001 From: zhangwh Date: Thu, 6 Apr 2017 13:45:21 +0800 Subject: [PATCH 7/7] README.md add slack invite url --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c2bbf5ebd..9bbd5f8eb 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ -# *EMQ* - Erlang MQTT Broker [![Build Status](https://travis-ci.org/emqtt/emqttd.svg?branch=master)](https://travis-ci.org/emqtt/emqttd) +# *EMQ* - Erlang MQTT Broker + +[![Build Status](https://travis-ci.org/emqtt/emqttd.svg?branch=master)](https://travis-ci.org/emqtt/emqttd) +[](http://slack.emqtt.io) *EMQ* (Erlang MQTT Broker) is a distributed, massively scalable, highly extensible MQTT message broker written in Erlang/OTP.