From cfaa0c5e4013a0bd4b7e83ab6dd4688bf7954daa Mon Sep 17 00:00:00 2001 From: Feng Date: Thu, 3 Dec 2015 22:28:39 +0800 Subject: [PATCH] 0.14 --- TODO | 1 + src/emqttd.erl | 1 - src/emqttd_access_control.erl | 1 - src/emqttd_access_rule.erl | 1 - src/emqttd_acl_internal.erl | 1 - src/emqttd_acl_mod.erl | 1 - src/emqttd_alarm.erl | 1 - src/emqttd_app.erl | 1 - src/emqttd_auth_anonymous.erl | 3 +- src/emqttd_auth_clientid.erl | 1 - src/emqttd_auth_ldap.erl | 1 - src/emqttd_auth_mod.erl | 3 +- src/emqttd_auth_username.erl | 1 - src/emqttd_bridge.erl | 1 - src/emqttd_bridge_sup.erl | 1 - src/emqttd_broker.erl | 1 - src/emqttd_cli.erl | 1 - src/emqttd_client.erl | 1 - src/emqttd_cm.erl | 1 - src/emqttd_cm_sup.erl | 1 - src/emqttd_ctl.erl | 1 - src/emqttd_dist.erl | 1 - src/emqttd_gen_mod.erl | 1 - src/emqttd_guid.erl | 1 - src/emqttd_http.erl | 1 - src/emqttd_message.erl | 1 - src/emqttd_metrics.erl | 1 - src/emqttd_mnesia.erl | 3 +- src/emqttd_mod_autosub.erl | 1 - src/emqttd_mod_presence.erl | 1 - src/emqttd_mod_rewrite.erl | 1 - src/emqttd_mod_sup.erl | 1 - src/emqttd_mqueue.erl | 1 - src/emqttd_net.erl | 1 - src/emqttd_opts.erl | 1 - src/emqttd_packet.erl | 1 - src/emqttd_parser.erl | 1 - src/emqttd_plugins.erl | 1 - src/emqttd_pool_sup.erl | 1 - src/emqttd_pooler.erl | 1 - src/emqttd_protocol.erl | 1 - src/emqttd_pubsub.erl | 56 ++++++++++++++++++++++------------- src/emqttd_pubsub_helper.erl | 1 - src/emqttd_pubsub_sup.erl | 4 +-- src/emqttd_retainer.erl | 2 -- src/emqttd_router.erl | 39 ++++++++++++------------ src/emqttd_serialiser.erl | 1 - src/emqttd_session.erl | 1 - src/emqttd_session_sup.erl | 1 - src/emqttd_sm.erl | 15 +++++----- src/emqttd_sm_helper.erl | 1 - src/emqttd_sm_sup.erl | 1 - src/emqttd_sup.erl | 1 - src/emqttd_sysmon.erl | 1 - src/emqttd_topic.erl | 1 - 55 files changed, 67 insertions(+), 105 deletions(-) diff --git a/TODO b/TODO index 9b803822a..8a9926973 100644 --- a/TODO +++ b/TODO @@ -11,3 +11,4 @@ TODO 5. dashboard TODO 6. emqttd_ctl +TODO 7. transaction on route, and topic? diff --git a/src/emqttd.erl b/src/emqttd.erl index f41a67c2b..44db5c068 100644 --- a/src/emqttd.erl +++ b/src/emqttd.erl @@ -22,7 +22,6 @@ %%% @doc emqttd main module. %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd). diff --git a/src/emqttd_access_control.erl b/src/emqttd_access_control.erl index 3dc51f76f..eb385968c 100644 --- a/src/emqttd_access_control.erl +++ b/src/emqttd_access_control.erl @@ -22,7 +22,6 @@ %%% @doc Authentication and ACL Control Server %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_access_control). diff --git a/src/emqttd_access_rule.erl b/src/emqttd_access_rule.erl index ff32bff14..685f98fd7 100644 --- a/src/emqttd_access_rule.erl +++ b/src/emqttd_access_rule.erl @@ -22,7 +22,6 @@ %%% @doc emqttd ACL Rule %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_access_rule). diff --git a/src/emqttd_acl_internal.erl b/src/emqttd_acl_internal.erl index dd58033d3..e2a35a8ee 100644 --- a/src/emqttd_acl_internal.erl +++ b/src/emqttd_acl_internal.erl @@ -22,7 +22,6 @@ %%% @doc Internal ACL that load rules from etc/acl.config %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_acl_internal). diff --git a/src/emqttd_acl_mod.erl b/src/emqttd_acl_mod.erl index 37ada1bd2..f44479599 100644 --- a/src/emqttd_acl_mod.erl +++ b/src/emqttd_acl_mod.erl @@ -22,7 +22,6 @@ %%% @doc ACL module behaviour %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_acl_mod). diff --git a/src/emqttd_alarm.erl b/src/emqttd_alarm.erl index b0fa4301e..d0087bb23 100644 --- a/src/emqttd_alarm.erl +++ b/src/emqttd_alarm.erl @@ -22,7 +22,6 @@ %%% @doc Copy alarm_handler %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_alarm). diff --git a/src/emqttd_app.erl b/src/emqttd_app.erl index 09665bd99..561090851 100644 --- a/src/emqttd_app.erl +++ b/src/emqttd_app.erl @@ -22,7 +22,6 @@ %%% @doc emqttd application. %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_app). diff --git a/src/emqttd_auth_anonymous.erl b/src/emqttd_auth_anonymous.erl index 4ae6ecff7..92e9da707 100644 --- a/src/emqttd_auth_anonymous.erl +++ b/src/emqttd_auth_anonymous.erl @@ -19,10 +19,9 @@ %%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE %%% SOFTWARE. %%%----------------------------------------------------------------------------- -%%% @doc Anonymous authentication module +%%% @doc Anonymous Authentication Module %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_auth_anonymous). diff --git a/src/emqttd_auth_clientid.erl b/src/emqttd_auth_clientid.erl index 548c2a58d..2ab37ca08 100644 --- a/src/emqttd_auth_clientid.erl +++ b/src/emqttd_auth_clientid.erl @@ -22,7 +22,6 @@ %%% @doc ClientId Authentication Module %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_auth_clientid). diff --git a/src/emqttd_auth_ldap.erl b/src/emqttd_auth_ldap.erl index 23895172d..64d02f9b1 100644 --- a/src/emqttd_auth_ldap.erl +++ b/src/emqttd_auth_ldap.erl @@ -22,7 +22,6 @@ %%% @doc LDAP Authentication Module %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_auth_ldap). diff --git a/src/emqttd_auth_mod.erl b/src/emqttd_auth_mod.erl index bfc9a276e..1f1370805 100644 --- a/src/emqttd_auth_mod.erl +++ b/src/emqttd_auth_mod.erl @@ -19,10 +19,9 @@ %%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE %%% SOFTWARE. %%%----------------------------------------------------------------------------- -%%% @doc emqttd authentication behaviour +%%% @doc emqttd Authentication Behaviour %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_auth_mod). diff --git a/src/emqttd_auth_username.erl b/src/emqttd_auth_username.erl index c8ee0c31f..69fff4a77 100644 --- a/src/emqttd_auth_username.erl +++ b/src/emqttd_auth_username.erl @@ -22,7 +22,6 @@ %%% @doc Authentication with username and password %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_auth_username). diff --git a/src/emqttd_bridge.erl b/src/emqttd_bridge.erl index dc0df324f..263283e99 100644 --- a/src/emqttd_bridge.erl +++ b/src/emqttd_bridge.erl @@ -22,7 +22,6 @@ %%% @doc emqttd bridge %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_bridge). diff --git a/src/emqttd_bridge_sup.erl b/src/emqttd_bridge_sup.erl index fa7924503..242bfdcf0 100644 --- a/src/emqttd_bridge_sup.erl +++ b/src/emqttd_bridge_sup.erl @@ -22,7 +22,6 @@ %%% @doc Bridge Supervisor %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_bridge_sup). diff --git a/src/emqttd_broker.erl b/src/emqttd_broker.erl index 3075df994..04cbafeeb 100644 --- a/src/emqttd_broker.erl +++ b/src/emqttd_broker.erl @@ -22,7 +22,6 @@ %%% @doc emqttd broker %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_broker). diff --git a/src/emqttd_cli.erl b/src/emqttd_cli.erl index 5d8f3624a..6c8ceecf5 100644 --- a/src/emqttd_cli.erl +++ b/src/emqttd_cli.erl @@ -22,7 +22,6 @@ %%% @doc emqttd cli %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_cli). diff --git a/src/emqttd_client.erl b/src/emqttd_client.erl index e808f5ef8..f7e8aa85e 100644 --- a/src/emqttd_client.erl +++ b/src/emqttd_client.erl @@ -22,7 +22,6 @@ %%% @doc MQTT Client Connection %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_client). diff --git a/src/emqttd_cm.erl b/src/emqttd_cm.erl index 05063429f..aa9566562 100644 --- a/src/emqttd_cm.erl +++ b/src/emqttd_cm.erl @@ -22,7 +22,6 @@ %%% @doc MQTT Client Manager %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_cm). diff --git a/src/emqttd_cm_sup.erl b/src/emqttd_cm_sup.erl index 7b466bd7c..311513cf9 100644 --- a/src/emqttd_cm_sup.erl +++ b/src/emqttd_cm_sup.erl @@ -22,7 +22,6 @@ %%% @doc Client Manager Supervisor. %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_cm_sup). diff --git a/src/emqttd_ctl.erl b/src/emqttd_ctl.erl index 08f053aea..4aa29750e 100644 --- a/src/emqttd_ctl.erl +++ b/src/emqttd_ctl.erl @@ -22,7 +22,6 @@ %%% @doc emqttd control %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_ctl). diff --git a/src/emqttd_dist.erl b/src/emqttd_dist.erl index 50ee55583..f5b1a35fa 100644 --- a/src/emqttd_dist.erl +++ b/src/emqttd_dist.erl @@ -22,7 +22,6 @@ %%% @doc emqttd distribution functions %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_dist). diff --git a/src/emqttd_gen_mod.erl b/src/emqttd_gen_mod.erl index ae67e01b6..59dbcc085 100644 --- a/src/emqttd_gen_mod.erl +++ b/src/emqttd_gen_mod.erl @@ -22,7 +22,6 @@ %%% @doc emqttd gen_mod behaviour %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_gen_mod). diff --git a/src/emqttd_guid.erl b/src/emqttd_guid.erl index 09c76e3e2..f19ea4448 100644 --- a/src/emqttd_guid.erl +++ b/src/emqttd_guid.erl @@ -36,7 +36,6 @@ %%% @end %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_guid). diff --git a/src/emqttd_http.erl b/src/emqttd_http.erl index 0a17df04d..87d5e7b67 100644 --- a/src/emqttd_http.erl +++ b/src/emqttd_http.erl @@ -22,7 +22,6 @@ %%% @doc emqttd http publish API and websocket client. %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_http). diff --git a/src/emqttd_message.erl b/src/emqttd_message.erl index a8d275340..8b0cdfc2d 100644 --- a/src/emqttd_message.erl +++ b/src/emqttd_message.erl @@ -22,7 +22,6 @@ %%% @doc MQTT Message Functions %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_message). diff --git a/src/emqttd_metrics.erl b/src/emqttd_metrics.erl index b9853ea6d..80cdf5269 100644 --- a/src/emqttd_metrics.erl +++ b/src/emqttd_metrics.erl @@ -22,7 +22,6 @@ %%% @doc emqttd metrics. responsible for collecting broker metrics %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_metrics). diff --git a/src/emqttd_mnesia.erl b/src/emqttd_mnesia.erl index c6a9ce8d4..4d3ca92e4 100644 --- a/src/emqttd_mnesia.erl +++ b/src/emqttd_mnesia.erl @@ -22,7 +22,6 @@ %%% @doc emqttd mnesia %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_mnesia). @@ -121,7 +120,7 @@ copy_table(Table) -> %%------------------------------------------------------------------------------ wait_for_tables() -> %%TODO: is not right? - %%lager:info("local_tables: ~p", [mnesia:system_info(local_tables)]), + io:format("mnesia wait_for_tables: ~p~n", [mnesia:system_info(local_tables)]), mnesia:wait_for_tables(mnesia:system_info(local_tables), infinity). %%------------------------------------------------------------------------------ diff --git a/src/emqttd_mod_autosub.erl b/src/emqttd_mod_autosub.erl index e17c1f2da..dff147969 100644 --- a/src/emqttd_mod_autosub.erl +++ b/src/emqttd_mod_autosub.erl @@ -22,7 +22,6 @@ %%% @doc emqttd auto subscribe module. %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_mod_autosub). diff --git a/src/emqttd_mod_presence.erl b/src/emqttd_mod_presence.erl index a496b19a5..1eb7228d7 100644 --- a/src/emqttd_mod_presence.erl +++ b/src/emqttd_mod_presence.erl @@ -22,7 +22,6 @@ %%% @doc emqttd presence management module %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_mod_presence). diff --git a/src/emqttd_mod_rewrite.erl b/src/emqttd_mod_rewrite.erl index b7a72eccb..51c96e765 100644 --- a/src/emqttd_mod_rewrite.erl +++ b/src/emqttd_mod_rewrite.erl @@ -22,7 +22,6 @@ %%% @doc emqttd rewrite module %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_mod_rewrite). diff --git a/src/emqttd_mod_sup.erl b/src/emqttd_mod_sup.erl index 09d09eef1..07062c604 100644 --- a/src/emqttd_mod_sup.erl +++ b/src/emqttd_mod_sup.erl @@ -22,7 +22,6 @@ %%% @doc emqttd module supervisor. %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_mod_sup). diff --git a/src/emqttd_mqueue.erl b/src/emqttd_mqueue.erl index 82908caab..769ecab25 100644 --- a/src/emqttd_mqueue.erl +++ b/src/emqttd_mqueue.erl @@ -48,7 +48,6 @@ %%% @end %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_mqueue). diff --git a/src/emqttd_net.erl b/src/emqttd_net.erl index bfa0b1f6f..ec961c32e 100644 --- a/src/emqttd_net.erl +++ b/src/emqttd_net.erl @@ -22,7 +22,6 @@ %%% @doc emqttd net utility functions. some functions copied from rabbitmq. %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_net). diff --git a/src/emqttd_opts.erl b/src/emqttd_opts.erl index 69b77468b..ec324b713 100644 --- a/src/emqttd_opts.erl +++ b/src/emqttd_opts.erl @@ -22,7 +22,6 @@ %%% @doc emqttd options handler. %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_opts). diff --git a/src/emqttd_packet.erl b/src/emqttd_packet.erl index 94e5b457c..81c2ffd35 100644 --- a/src/emqttd_packet.erl +++ b/src/emqttd_packet.erl @@ -22,7 +22,6 @@ %%% @doc MQTT Packet Functions %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_packet). diff --git a/src/emqttd_parser.erl b/src/emqttd_parser.erl index 05aafd204..d9bf6d806 100644 --- a/src/emqttd_parser.erl +++ b/src/emqttd_parser.erl @@ -22,7 +22,6 @@ %%% @doc MQTT Packet Parser %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_parser). diff --git a/src/emqttd_plugins.erl b/src/emqttd_plugins.erl index 73cd491ff..517be8564 100644 --- a/src/emqttd_plugins.erl +++ b/src/emqttd_plugins.erl @@ -22,7 +22,6 @@ %%% @doc emqttd plugins. %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_plugins). diff --git a/src/emqttd_pool_sup.erl b/src/emqttd_pool_sup.erl index c19f61b8e..a1c1f2565 100644 --- a/src/emqttd_pool_sup.erl +++ b/src/emqttd_pool_sup.erl @@ -22,7 +22,6 @@ %%% @doc Common Pool Supervisor %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_pool_sup). diff --git a/src/emqttd_pooler.erl b/src/emqttd_pooler.erl index b9acc5a39..67121be51 100644 --- a/src/emqttd_pooler.erl +++ b/src/emqttd_pooler.erl @@ -22,7 +22,6 @@ %%% @doc emqttd pooler. %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_pooler). diff --git a/src/emqttd_protocol.erl b/src/emqttd_protocol.erl index 36b9acdaf..535a7494a 100644 --- a/src/emqttd_protocol.erl +++ b/src/emqttd_protocol.erl @@ -22,7 +22,6 @@ %%% @doc emqttd protocol. %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_protocol). diff --git a/src/emqttd_pubsub.erl b/src/emqttd_pubsub.erl index 73058a0b2..f0885c282 100644 --- a/src/emqttd_pubsub.erl +++ b/src/emqttd_pubsub.erl @@ -22,7 +22,6 @@ %%% @doc emqttd pubsub %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_pubsub). @@ -66,31 +65,46 @@ %%%============================================================================= %%% Mnesia callbacks %%%============================================================================= - mnesia(boot) -> - %% Topic Table - ok = emqttd_mnesia:create_table(topic, [ - {type, bag}, - {ram_copies, [node()]}, - {record_name, mqtt_topic}, - {attributes, record_info(fields, mqtt_topic)}]), - RamOrDisc = case env(subscription) of - disc -> disc_copies; - _ -> ram_copies - end, - %% Subscription Table - ok = emqttd_mnesia:create_table(subscription, [ - {type, bag}, - {RamOrDisc, [node()]}, - {record_name, mqtt_subscription}, - {attributes, record_info(fields, mqtt_subscription)}]); + ok = create_table(topic, ram_copies), + case env(subscription) of + disc -> ok = create_table(subscription, disc_copies); + ram -> ok = create_table(subscription, ram_copies); + false -> ok + end; mnesia(copy) -> ok = emqttd_mnesia:copy_table(topic), - ok = emqttd_mnesia:copy_table(subscription). + case env(subscription) of + false -> ok; + _ -> ok = emqttd_mnesia:copy_table(subscription) + end. + +%% Topic Table +create_table(topic, RamOrDisc) -> + emqttd_mnesia:create_table(topic, [ + {type, bag}, + {RamOrDisc, [node()]}, + {record_name, mqtt_topic}, + {attributes, record_info(fields, mqtt_topic)}]); + +%% Subscription Table +create_table(subscription, RamOrDisc) -> + emqttd_mnesia:create_table(subscription, [ + {type, bag}, + {RamOrDisc, [node()]}, + {record_name, mqtt_subscription}, + {attributes, record_info(fields, mqtt_subscription)}]). env(Key) -> - proplists:get_value(Key, emqttd_broker:env(pubsub)). + case get({pubsub, Key}) of + undefined -> + Val = proplists:get_value(Key, emqttd_broker:env(pubsub)), + put({pubsub, Key}, Val), + Val; + Val -> + Val + end. %%%============================================================================= %%% API @@ -309,7 +323,7 @@ remove_subscriptions(SubId, Topics) -> %%%============================================================================= trace(publish, From, _Msg) when is_atom(From) -> - %% Dont' trace broker publish + %% Dont' trace '$SYS' publish ignore; trace(publish, From, #mqtt_message{topic = Topic, payload = Payload}) -> diff --git a/src/emqttd_pubsub_helper.erl b/src/emqttd_pubsub_helper.erl index 297344900..34859c979 100644 --- a/src/emqttd_pubsub_helper.erl +++ b/src/emqttd_pubsub_helper.erl @@ -22,7 +22,6 @@ %%% @doc PubSub Helper %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_pubsub_helper). diff --git a/src/emqttd_pubsub_sup.erl b/src/emqttd_pubsub_sup.erl index c28999055..4e85a6698 100644 --- a/src/emqttd_pubsub_sup.erl +++ b/src/emqttd_pubsub_sup.erl @@ -22,7 +22,6 @@ %%% @doc PubSub Supervisor %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_pubsub_sup). @@ -39,8 +38,7 @@ -export([init/1]). start_link() -> - Opts = emqttd_broker:env(pubsub), - supervisor:start_link({local, ?MODULE}, ?MODULE, [Opts]). + supervisor:start_link({local, ?MODULE}, ?MODULE, [emqttd_broker:env(pubsub)]). init([Opts]) -> %% PubSub Helper diff --git a/src/emqttd_retainer.erl b/src/emqttd_retainer.erl index 1d20d3abe..be6bc1c48 100644 --- a/src/emqttd_retainer.erl +++ b/src/emqttd_retainer.erl @@ -26,7 +26,6 @@ %%% @end %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_retainer). @@ -66,7 +65,6 @@ mnesia(boot) -> {ram_copies, [node()]}, {record_name, mqtt_retained}, {attributes, record_info(fields, mqtt_retained)}]); - mnesia(copy) -> ok = emqttd_mnesia:copy_table(retained). diff --git a/src/emqttd_router.erl b/src/emqttd_router.erl index 2423e26ab..a39cfda31 100644 --- a/src/emqttd_router.erl +++ b/src/emqttd_router.erl @@ -32,7 +32,6 @@ %%% @end %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_router). @@ -40,8 +39,12 @@ -include("emqttd_protocol.hrl"). --export([init/1, lookup/1, route/2, add_routes/2, - delete_routes/1, delete_routes/2]). +-export([init/1, route/2, lookup_routes/1, + add_routes/2, delete_routes/1, delete_routes/2]). + +-ifdef(TEST). +-compile(export_all). +-endif. %%------------------------------------------------------------------------------ %% @doc Create route tables. @@ -71,7 +74,7 @@ ensure_tab(Tab, Opts) -> %%------------------------------------------------------------------------------ -spec add_routes(list({binary(), mqtt_qos()}), pid()) -> ok. add_routes(TopicTable, Pid) when is_pid(Pid) -> - case lookup(Pid) of + case lookup_routes(Pid) of [] -> erlang:monitor(process, Pid), insert_routes(TopicTable, Pid); @@ -85,8 +88,8 @@ add_routes(TopicTable, Pid) when is_pid(Pid) -> %% @doc Lookup Routes %% @end %%------------------------------------------------------------------------------ --spec lookup(pid()) -> list({binary(), mqtt_qos()}). -lookup(Pid) when is_pid(Pid) -> +-spec lookup_routes(pid()) -> list({binary(), mqtt_qos()}). +lookup_routes(Pid) when is_pid(Pid) -> [{Topic, Qos} || {_, Topic, Qos} <- ets:lookup(reverse_route, Pid)]. %%------------------------------------------------------------------------------ @@ -100,7 +103,7 @@ delete_routes(Topics, Pid) -> -spec delete_routes(pid()) -> ok. delete_routes(Pid) when is_pid(Pid) -> - Routes = [{Topic, Pid} || {Topic, _Qos} <- lookup(Pid)], + Routes = [{Topic, Pid} || {Topic, _Qos} <- lookup_routes(Pid)], ets:delete(reverse_route, Pid), lists:foreach(fun delete_route_only/1, Routes). @@ -112,7 +115,7 @@ delete_routes(Pid) when is_pid(Pid) -> route(Queue = <<"$Q/", _Q>>, Msg) -> case ets:lookup(route, Queue) of [] -> - setstats(dropped, true); + emqttd_metrics:inc('messages/dropped'); Routes -> Idx = crypto:rand_uniform(1, length(Routes) + 1), {_, SubPid, SubQos} = lists:nth(Idx, Routes), @@ -120,12 +123,15 @@ route(Queue = <<"$Q/", _Q>>, Msg) -> end; route(Topic, Msg) -> - Routes = ets:lookup(route, Topic), - setstats(dropped, Routes =:= []), - lists:foreach( - fun({_Topic, SubPid, SubQos}) -> - SubPid ! {dispatch, tune_qos(SubQos, Msg)} - end, Routes). + case ets:lookup(route, Topic) of + [] -> + emqttd_metrics:inc('messages/dropped'); + Routes -> + lists:foreach( + fun({_Topic, SubPid, SubQos}) -> + SubPid ! {dispatch, tune_qos(SubQos, Msg)} + end, Routes) + end. tune_qos(SubQos, Msg = #mqtt_message{qos = PubQos}) when PubQos > SubQos -> Msg#mqtt_message{qos = SubQos}; @@ -185,8 +191,3 @@ delete_route({Topic, Pid}) -> delete_route_only({Topic, Pid}) -> ets:match_delete(route, {Topic, Pid, '_'}). -setstats(dropped, false) -> - ignore; -setstats(dropped, true) -> - emqttd_metrics:inc('messages/dropped'). - diff --git a/src/emqttd_serialiser.erl b/src/emqttd_serialiser.erl index 60370ddca..29b3888b4 100644 --- a/src/emqttd_serialiser.erl +++ b/src/emqttd_serialiser.erl @@ -22,7 +22,6 @@ %%% @doc MQTT Packet Serialiser %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_serialiser). diff --git a/src/emqttd_session.erl b/src/emqttd_session.erl index e708e7fe6..29c8b4c5d 100644 --- a/src/emqttd_session.erl +++ b/src/emqttd_session.erl @@ -43,7 +43,6 @@ %%% @end %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_session). diff --git a/src/emqttd_session_sup.erl b/src/emqttd_session_sup.erl index b9e6afc50..96d1da656 100644 --- a/src/emqttd_session_sup.erl +++ b/src/emqttd_session_sup.erl @@ -22,7 +22,6 @@ %%% @doc emqttd session supervisor. %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_session_sup). diff --git a/src/emqttd_sm.erl b/src/emqttd_sm.erl index 36645a4d9..9783cd3e5 100644 --- a/src/emqttd_sm.erl +++ b/src/emqttd_sm.erl @@ -22,7 +22,6 @@ %%% @doc Session Manager %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_sm). @@ -66,14 +65,14 @@ %%%============================================================================= mnesia(boot) -> - %% Global session... + %% Global Session Table ok = emqttd_mnesia:create_table(session, [ - {type, ordered_set}, - {ram_copies, [node()]}, - {record_name, mqtt_session}, - {attributes, record_info(fields, mqtt_session)}, - {index, [sess_pid]}]); - + {type, ordered_set}, + {ram_copies, [node()]}, + {record_name, mqtt_session}, + {attributes, record_info(fields, mqtt_session)}, + %% TODO: index_read is slow... + {index, [sess_pid]}]); mnesia(copy) -> ok = emqttd_mnesia:copy_table(session). diff --git a/src/emqttd_sm_helper.erl b/src/emqttd_sm_helper.erl index 78b84c8d8..ba9d690a5 100644 --- a/src/emqttd_sm_helper.erl +++ b/src/emqttd_sm_helper.erl @@ -22,7 +22,6 @@ %%% @doc Session Helper. %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_sm_helper). diff --git a/src/emqttd_sm_sup.erl b/src/emqttd_sm_sup.erl index c2b4b3304..d0b319331 100644 --- a/src/emqttd_sm_sup.erl +++ b/src/emqttd_sm_sup.erl @@ -22,7 +22,6 @@ %%% @doc Session Manager Supervisor. %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_sm_sup). diff --git a/src/emqttd_sup.erl b/src/emqttd_sup.erl index 018ff40dd..2785ba04d 100644 --- a/src/emqttd_sup.erl +++ b/src/emqttd_sup.erl @@ -22,7 +22,6 @@ %%% @doc emqttd top supervisor. %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_sup). diff --git a/src/emqttd_sysmon.erl b/src/emqttd_sysmon.erl index 73203d3f0..7c2a1d772 100644 --- a/src/emqttd_sysmon.erl +++ b/src/emqttd_sysmon.erl @@ -22,7 +22,6 @@ %%% @doc emqttd system monitor %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_sysmon). diff --git a/src/emqttd_topic.erl b/src/emqttd_topic.erl index 558f2dfa4..05189aba8 100644 --- a/src/emqttd_topic.erl +++ b/src/emqttd_topic.erl @@ -22,7 +22,6 @@ %%% @doc MQTT Topic Functions %%% %%% @author Feng Lee -%%% %%%----------------------------------------------------------------------------- -module(emqttd_topic).