Merge pull request #504 from emqtt/0.17

1.0 - Changes, Issue #500, #503
This commit is contained in:
Feng Lee 2016-04-12 20:41:28 +08:00
commit d902a1843d
8 changed files with 384 additions and 189 deletions

1
CHANGES Normal file
View File

@ -0,0 +1 @@
Move to docs/source/changes.rst

View File

@ -1,23 +1,34 @@
emqttd ChangeLog .. _changes:
================
0.17.1-beta(2016-03-22) =======
------------------------ Changes
=======
### Enhancements -------------------
Version 0.17.1-beta
-------------------
*Release Date: 2016-03-22*
Enhancements
------------
Time unit of session 'expired_after' changed to minute. (#479) Time unit of session 'expired_after' changed to minute. (#479)
### Dashboard Dashboard
---------
Code Review and improve the design of Dashboard. Code Review and improve the design of Dashboard.
-------------------
Version 0.17.0-beta
-------------------
0.17.0-beta(2016-03-15) *Release Date: 2016-03-15*
------------------------
#### Highlights Highlights
----------
Installation and Configuration Guide released on http://docs.emqtt.com Installation and Configuration Guide released on http://docs.emqtt.com
@ -27,16 +38,15 @@ Upgrade the [Web Dashboard](https://github.com/emqtt/emqttd_dashboard) to suppor
Bridge emqttd broker to another emqttd broker & emqttd to mosquitto bridge (#438) Bridge emqttd broker to another emqttd broker & emqttd to mosquitto bridge (#438)
#### Enhancements Enhancements
------------
emqttd_ctl: better error message (#450) emqttd_ctl: better error message (#450)
./bin/emqttd_ctl: add 'routes' command ./bin/emqttd_ctl: add 'routes' command::
``` routes list # List all routes
routes list # List all routes routes show <Topic> # Show a route
routes show <Topic> # Show a route
```
Add 'backend_subscription' table and support static subscriptions (emqttd_backend) Add 'backend_subscription' table and support static subscriptions (emqttd_backend)
@ -48,57 +58,64 @@ Add PubSub, Hooks APIs to emqttd module (emqttd)
Move start_listeners/0, stop_listeners/0 APIs to emqttd_app module (emqttd_app) Move start_listeners/0, stop_listeners/0 APIs to emqttd_app module (emqttd_app)
#### BugFix Tests
-----
#### Tests
Add 100+ common test cases. Add 100+ common test cases.
#### Plugins Plugins
-------
Upgrade Dashboard, Redis, Stomp and Template Plugins Upgrade Dashboard, Redis, Stomp and Template Plugins
-------------------
Version 0.16.0-beta
-------------------
0.16.0-beta(2016-02-16) *Release Date: 2016-02-16*
------------------------
#### Highlights Highlights
----------
Licensed under the Apache License, Version 2.0 Now. Licensed under the Apache License, Version 2.0 Now.
Improve the design of cluster, support to join or leave the cluster (#449): Improve the design of cluster, support to join or leave the cluster (#449)::
``` $ ./bin/emqttd_ctl cluster
$ ./bin/emqttd_ctl cluster cluster join <Node> #Join the cluster
cluster join <Node> #Join the cluster cluster leave #Leave the cluster
cluster leave #Leave the cluster cluster remove <Node> #Remove the node from cluster
cluster remove <Node> #Remove the node from cluster cluster status #Cluster status
cluster status #Cluster status
```
Improve the design of Trie and Route, only the wildcard topics stored in Trie. Improve the design of Trie and Route, only the wildcard topics stored in Trie.
Common Test to replace EUnit. Common Test to replace EUnit.
#### Enhancements Enhancements
------------
mqtt_message record: add 'sender' field (#440) mqtt_message record: add 'sender' field (#440)
refactor the emqttd, emqttd_time, emqttd_opts, emqttd_node modules. refactor the emqttd, emqttd_time, emqttd_opts, emqttd_node modules.
#### BugFix Bugfix
------
noproc error when call to gen_server2:call(false, {add_route,Topic,<0.685.0>}, infinity) (#446) noproc error when call to gen_server2:call(false, {add_route,Topic,<0.685.0>}, infinity) (#446)
#### Plugins Plugins
-------
Changed the license of all plugins. Changed the license of all plugins.
-------------------
Version 0.15.0-beta
-------------------
0.15.0-beta (2016-01-31) *Release Date: 2016-01-31*
------------------------
#### Highlights Highlights
----------
Optimize for Push Application, 500K+ Subscribers to a Topic. Optimize for Push Application, 500K+ Subscribers to a Topic.
@ -108,7 +125,8 @@ Priority Message Queue for Persistent Session (#432)
Add Redis, MongoDB Plugins (#417) Add Redis, MongoDB Plugins (#417)
#### Enhancements Enhancements
------------
Username/Password Authentication: Support to configure default users (#428) Username/Password Authentication: Support to configure default users (#428)
@ -120,13 +138,15 @@ emqttd_auth_mod: add passwd_hash/2 function
priority_queue: add plen/2, out/2 functions priority_queue: add plen/2, out/2 functions
#### BugFix Bugfix
------
Fix dequeue/1 of emqttd_bridge... Fix dequeue/1 of emqttd_bridge...
Add emqttd:seed_now/0 function Add emqttd:seed_now/0 function
#### Plugins Plugins
-------
emqttd_plubin_mysql: Changed mysql driver to mysql-otp emqttd_plubin_mysql: Changed mysql driver to mysql-otp
@ -136,25 +156,31 @@ emqttd_plugin_redis: First release
emqttd_plugin_mongo: First release emqttd_plugin_mongo: First release
-------------------
Version 0.14.1-beta
-------------------
0.14.1-beta(2015-12-28) *Release Date: 2015-12-28*
-------------------------
Bugfix: emqttd_ws_client.erl: Unexpected Info: {'EXIT',<0.27792.18>,{shutdown,destroy}} (#413) Bugfix: emqttd_ws_client.erl: Unexpected Info: {'EXIT',<0.27792.18>,{shutdown,destroy}} (#413)
Improve: fix spec errors found by dialyzer Improve: fix spec errors found by dialyzer
-------------------
Version 0.14.0-beta
-------------------
0.14.0-beta(2015-12-18) *Release Date: 2015-12-18*
-------------------------
#### Highlights Highlights
----------
Scaling to 1.3 Million Concurrent MQTT Connections on a 12 Core, 32G CentOS server. Scaling to 1.3 Million Concurrent MQTT Connections on a 12 Core, 32G CentOS server.
New PubSub, Router Design (#402). Prepare for scaling to 10 millions on one cluster. New PubSub, Router Design (#402). Prepare for scaling to 10 millions on one cluster.
#### Enhancements Enhancements
------------
Improve the gproc_pool usage with a general emqttd_pool_sup Improve the gproc_pool usage with a general emqttd_pool_sup
@ -178,19 +204,23 @@ Subscriptions persistence (#344)
emqttd_ctl: 'subscriptions' command to force clients to subscribe some topics (#361) emqttd_ctl: 'subscriptions' command to force clients to subscribe some topics (#361)
#### Bugfix Bugfix
------
emqttd_sm: spec of lookup_session/1 is not right BUG (#411) emqttd_sm: spec of lookup_session/1 is not right BUG (#411)
Observer application should be removed from reltool.config for 'wx' app is not available (#410) Observer application should be removed from reltool.config for 'wx' app is not available (#410)
#### Benchmark Benchmark
---------
1.3 million concurrent MQTT connections on a 12 Core, 32G CentOS Server, consume about 15G Memory and 200% CPU. 1.3 million concurrent MQTT connections on a 12 Core, 32G CentOS Server, consume about 15G Memory and 200% CPU.
-------------------
Version 0.13.1-beta
-------------------
0.13.1-beta(2015-11-28) *Release Date: 2015-11-28*
-------------------------
Bugfix: Plugin pathes error under windows (#387) Bugfix: Plugin pathes error under windows (#387)
@ -202,11 +232,14 @@ Improve: High CPU load when 400K unstable mobile connections (#377)
BugFix: emqttd_plugin_pgsql - error using same query with latest update plugin (pgsql#5) BugFix: emqttd_plugin_pgsql - error using same query with latest update plugin (pgsql#5)
-------------------
Version 0.13.0-beta
-------------------
0.13.0-beta(2015-11-08) *Release Date: 2015-11-08*
-------------------------
#### Highlights Highlights
----------
Rate Limiting based on [Token Bucket](https://en.wikipedia.org/wiki/Token_bucket) and [Leaky Bucket](https://en.wikipedia.org/wiki/Leaky_bucket#The_Leaky_Bucket_Algorithm_as_a_Meter) Algorithm Rate Limiting based on [Token Bucket](https://en.wikipedia.org/wiki/Token_bucket) and [Leaky Bucket](https://en.wikipedia.org/wiki/Leaky_bucket#The_Leaky_Bucket_Algorithm_as_a_Meter) Algorithm
@ -214,7 +247,8 @@ Upgrade eSockd and MochiWeb libraries to support Parameterized Connection Module
Improve emqttd_client to support fully asynchronous socket networking Improve emqttd_client to support fully asynchronous socket networking
#### Enhancements Enhancements
------------
Protocol Compliant - Session Present Flag (#163) Protocol Compliant - Session Present Flag (#163)
@ -228,7 +262,8 @@ emqttd_client.erl to handle 'inet_async', 'inet_reply' properly (#360)
Refator the [client/session management design](https://github.com/emqtt/emqttd/blob/master/doc/design/ClientSession.md) Refator the [client/session management design](https://github.com/emqtt/emqttd/blob/master/doc/design/ClientSession.md)
#### Bugfix Bugfix
------
Cannot kick transient client out when clientId collision (#357) Cannot kick transient client out when clientId collision (#357)
@ -236,39 +271,46 @@ Fix the order of emqttd_app:start_server/1 (#367)
emqttd_session:subscribe/2 will crash (#374) emqttd_session:subscribe/2 will crash (#374)
#### Benchmark Benchmark
---------
[benchmark for 0.13.0 release](https://github.com/emqtt/emqttd/wiki/benchmark-for-0.13.0-release) [benchmark for 0.13.0 release](https://github.com/emqtt/emqttd/wiki/benchmark-for-0.13.0-release)
3.1G memory and 50+ CPU/core: 3.1G memory and 50+ CPU/core:
``` .. code:: console
Connections: 250K
Subscribers: 250K
Topics: 50K
Qos1 Messages/Sec In: 4K
Qos1 Messages/Sec Out: 20K
Traffic In(bps): 12M+
Traffic Out(bps): 56M+
```
Connections: 250K
Subscribers: 250K
Topics: 50K
Qos1 Messages/Sec In: 4K
Qos1 Messages/Sec Out: 20K
Traffic In(bps): 12M+
Traffic Out(bps): 56M+
0.12.3-beta (2015-10-22) -------------------
------------------------- Version 0.12.3-beta
-------------------
*Release Date: 2015-10-22*
Bugfix: emqttd_sysmon crasher for 'undefined' process_info (#350) Bugfix: emqttd_sysmon crasher for 'undefined' process_info (#350)
Bugfix: emqttd_client: catch parser exception (#353) Bugfix: emqttd_client: catch parser exception (#353)
-------------------
Version 0.12.2-beta
-------------------
0.12.2-beta (2015-10-16) *Release Date: 2015-10-16*
-------------------------
Bugfix: Retained messages should not be expired if 'broker.retained.expired_after = 0' (#346) Bugfix: Retained messages should not be expired if 'broker.retained.expired_after = 0' (#346)
-------------------
Version 0.12.1-beta
-------------------
0.12.1-beta (2015-10-15) *Release Date: 2015-10-15*
-------------------------
Highlight: Release for Bugfix and Code Refactor. Highlight: Release for Bugfix and Code Refactor.
@ -286,11 +328,14 @@ Task: benchmark for 0.12.0 release (#225)
Benchmark: About 900K concurrent connections established on a 20Core, 32G CentOS server. Benchmark: About 900K concurrent connections established on a 20Core, 32G CentOS server.
-------------------
Version 0.12.0-beta
-------------------
0.12.0-beta (2015-10-08) *Release Date: 2015-10-08*
-------------------------
#### Highlights Highlights
----------
Enhance the **emqttd_ctl** module to allow plugins to register new commands (#256) Enhance the **emqttd_ctl** module to allow plugins to register new commands (#256)
@ -304,7 +349,8 @@ Add **'./bin/emqttd_top'** command(like etop) to show the top 'msg_q', 'reductio
'rel/files/emqttd.config.development' for development deployment 'rel/files/emqttd.config.development' for development deployment
#### Enhancements Enhancements
------------
Qos1/2 messages will not be dropped under unstable mobile network (#264) Qos1/2 messages will not be dropped under unstable mobile network (#264)
@ -316,11 +362,13 @@ Qos1/2 messages will not be dropped under unstable mobile network (#264)
How to monitor large 'message_queue_len' (#283) How to monitor large 'message_queue_len' (#283)
#### Bugfix Bugfix
------
Behaviour emqttd_auth_mod is missing init callback (#318) Behaviour emqttd_auth_mod is missing init callback (#318)
#### Benchmark Benchmark
---------
Write a new [benchmark tool](https://github.com/emqtt/emqtt_benchmark) to benchmark this release Write a new [benchmark tool](https://github.com/emqtt/emqtt_benchmark) to benchmark this release
@ -328,9 +376,11 @@ Hw requirements - 5K users, 25-50 msgs/sec, QoS=1 (#209)
Supported Number of Connections Greatly Reduced When Clients are Subscribing (#324) Supported Number of Connections Greatly Reduced When Clients are Subscribing (#324)
-------------------
Version 0.11.0-beta
-------------------
0.11.0-beta (2015-09-25) *Release Date: 2015-09-25*
-------------------------
Highlight: Rebar to manage plugin dependencies. Highlight: Rebar to manage plugin dependencies.
@ -354,9 +404,11 @@ Bugfix: issue#311 - './bin/emqttd_ctl sessions list' error
Bugfix: issue#312 - unsubcribe will lead to crash if emqttd_plugin_template plugin loaded Bugfix: issue#312 - unsubcribe will lead to crash if emqttd_plugin_template plugin loaded
-------------------
Version 0.10.4-beta
-------------------
0.10.4-beta (2015-09-18) *Release Date: 2015-09-18*
-------------------------
Optimize session management and upgrade eSockd library to 2.7.1 Optimize session management and upgrade eSockd library to 2.7.1
@ -370,9 +422,11 @@ Bugfix: issue#291 - "./bin/emqttd attach ..." cannot work
Bugfix: issue#284 - Should not use erlang:list_to_atom/1 in emqttd_vm.erl Bugfix: issue#284 - Should not use erlang:list_to_atom/1 in emqttd_vm.erl
-------------------
Version 0.10.3-beta
-------------------
0.10.3-beta (2015-08-30) *Release Date: 2015-08-30*
-------------------------
Bugfix: issue#271 - add emqttd_ws_client:subscribe/2 function Bugfix: issue#271 - add emqttd_ws_client:subscribe/2 function
@ -380,23 +434,29 @@ Bugfix: issue#269 - bin/emqttd Syntax error on ubuntu
Improve: issue#265 - client under unstable mobile network generate a lot of logs Improve: issue#265 - client under unstable mobile network generate a lot of logs
-------------------
Version 0.10.2-beta
-------------------
0.10.2-beta (2015-08-26) *Release Date: 2015-08-26*
-------------------------
Improve: issue#257 - After the node name changed, the broker cannot restart for mnesia schema error. Improve: issue#257 - After the node name changed, the broker cannot restart for mnesia schema error.
-------------------
Version 0.10.1-beta
-------------------
0.10.1-beta (2015-08-25) *Release Date: 2015-08-25*
-------------------------
Bugfix: issue#259 - when clustered the emqttd_dashboard port is close, and the 'emqttd' application cannot stop normally. Bugfix: issue#259 - when clustered the emqttd_dashboard port is close, and the 'emqttd' application cannot stop normally.
Feature: issue#262 - Add 'http://host:8083/mqtt/status' Page for health check Feature: issue#262 - Add 'http://host:8083/mqtt/status' Page for health check
-------------------
Version 0.10.0-beta
-------------------
0.10.0-beta (2015-08-20) *Release Date: 2015-08-20*
-------------------------
[Web Dashboard](https://github.com/emqtt/emqttd_dashboard) and [MySQL](https://github.com/emqtt/emqttd_plugin_mysql), [PostgreSQL](https://github.com/emqtt/emqttd_plugin_pgsql) Authentication/ACL Plugins! [Web Dashboard](https://github.com/emqtt/emqttd_dashboard) and [MySQL](https://github.com/emqtt/emqttd_plugin_mysql), [PostgreSQL](https://github.com/emqtt/emqttd_plugin_pgsql) Authentication/ACL Plugins!
@ -440,9 +500,11 @@ Bugfix: Too many 'Session ~s cannot find PUBACK' logs (#212)
Bugfix: emqttd_pooler cannot work Bugfix: emqttd_pooler cannot work
-------------------
Version 0.9.3-alpha
-------------------
0.9.3-alpha (2015-07-25) *Release Date: 2015-07-25*
-------------------------
Wiki: [Bridge](https://github.com/emqtt/emqttd/wiki/Bridge) Wiki: [Bridge](https://github.com/emqtt/emqttd/wiki/Bridge)
@ -454,23 +516,29 @@ Improve: ./bin/emqttd_ctl to support new bridges command
Bugfix: issue #206 - Cannot bridge two nodes Bugfix: issue #206 - Cannot bridge two nodes
-------------------
Version 0.9.2-alpha
-------------------
0.9.2-alpha (2015-07-18) *Release Date: 2015-07-18*
-------------------------
Improve: issue #196 - Add New Hook 'client.subscribe.after' Improve: issue #196 - Add New Hook 'client.subscribe.after'
-------------------
Version 0.9.1-alpha
-------------------
0.9.1-alpha (2015-07-10) *Release Date: 2015-07-10*
-------------------------
Bugfix: issue #189 - MQTT over WebSocket(SSL) cannot work? Bugfix: issue #189 - MQTT over WebSocket(SSL) cannot work?
Bugfix: issue #193 - 'client.ack' hook should be renamed to 'message.acked', and called by emqttd_broker:foreach_hooks Bugfix: issue #193 - 'client.ack' hook should be renamed to 'message.acked', and called by emqttd_broker:foreach_hooks
-------------------
Version 0.9.0-alpha
-------------------
0.9.0-alpha (2015-07-09) *Release Date: 2015-07-09*
-------------------------
[Session, Queue, Inflight Window, Hooks, Global MessageId and More Protocol Compliant](https://github.com/emqtt/emqttd/releases/tag/0.9.0-alpha) Now! [Session, Queue, Inflight Window, Hooks, Global MessageId and More Protocol Compliant](https://github.com/emqtt/emqttd/releases/tag/0.9.0-alpha) Now!
@ -526,27 +594,35 @@ Bugfix: Closed issues #181, #119.
Tests: fix the parser, acl test cases. Tests: fix the parser, acl test cases.
------------------
Version 0.8.6-beta
------------------
0.8.6-beta (2015-06-17) *Release Date: 2015-06-17*
-------------------------
Bugfix: issue #175 - publish Will message when websocket is closed without 'DISCONNECT' packet Bugfix: issue #175 - publish Will message when websocket is closed without 'DISCONNECT' packet
------------------
Version 0.8.5-beta
------------------
0.8.5-beta (2015-06-10) *Release Date: 2015-06-10*
-------------------------
Bugfix: issue #53 - client will receive duplicate messages when overlapping subscription Bugfix: issue #53 - client will receive duplicate messages when overlapping subscription
------------------
Version 0.8.4-beta
------------------
0.8.4-beta (2015-06-08) *Release Date: 2015-06-08*
-------------------------
Bugfix: issue #165 - duplicated message when publish 'retained' message to persistent client Bugfix: issue #165 - duplicated message when publish 'retained' message to persistent client
------------------
Version 0.8.3-beta
------------------
0.8.3-beta (2015-06-05) *Release Date: 2015-06-05*
-------------------------
Bugfix: issue #158 - should queue:in new message after old one dropped Bugfix: issue #158 - should queue:in new message after old one dropped
@ -554,17 +630,21 @@ Bugfix: issue #155 - emqtt_parser.erl: parse_topics/3 should reverse topics
Bugfix: issue #149 - Forget to merge plugins/emqttd_auth_mysql from 'dev' branch to 'master' in 0.8.x release Bugfix: issue #149 - Forget to merge plugins/emqttd_auth_mysql from 'dev' branch to 'master' in 0.8.x release
-------------------
Version 0.8.2-alpha
-------------------
0.8.2-alpha (2015-06-01) *Release Date: 2015-06-01*
-------------------------
Bugfix: issue #147 - WebSocket client cannot subscribe queue '$Q/queue/${clientId}' Bugfix: issue #147 - WebSocket client cannot subscribe queue '$Q/queue/${clientId}'
Bugfix: issue #146 - emqttd_auth_ldap: fill(Username, UserDn) is not right Bugfix: issue #146 - emqttd_auth_ldap: fill(Username, UserDn) is not right
-------------------
Version 0.8.1-alpha
-------------------
0.8.1-alpha (2015-05-28) *Release Date: 2015-05-28*
-------------------------
Client [Presence](https://github.com/emqtt/emqttd/wiki/Presence) Support and [$SYS Topics](https://github.com/emqtt/emqttd/wiki/$SYS-Topics) Redesigned! Client [Presence](https://github.com/emqtt/emqttd/wiki/Presence) Support and [$SYS Topics](https://github.com/emqtt/emqttd/wiki/$SYS-Topics) Redesigned!
@ -576,9 +656,11 @@ Improve: etc/emqttd.config to allow websocket connections from any hosts
Improve: rel/reltool.config to exclude unnecessary apps. Improve: rel/reltool.config to exclude unnecessary apps.
-------------------
Version 0.8.0-alpha
-------------------
0.8.0-alpha (2015-05-25) *Release Date: 2015-05-25*
-------------------------
[Hooks](https://github.com/emqtt/emqttd/wiki/Hooks%20Design), Modules and [Plugins](https://github.com/emqtt/emqttd/wiki/Plugin%20Design) to extend the broker Now! [Hooks](https://github.com/emqtt/emqttd/wiki/Hooks%20Design), Modules and [Plugins](https://github.com/emqtt/emqttd/wiki/Plugin%20Design) to extend the broker Now!
@ -606,9 +688,11 @@ Improve: add emqttd_sm_sup module, and use 'hash' gproc_pool to manage sessions
Tests: add more test cases for 'emqttd' app Tests: add more test cases for 'emqttd' app
-------------------
Version 0.7.1-alpha
-------------------
0.7.1-alpha (2015-05-04) *Release Date: 2015-05-04*
-------------------------
Add doc/design/* and merge doc/* to github Wiki Add doc/design/* and merge doc/* to github Wiki
@ -618,9 +702,11 @@ Bugfix: issue #123 - emqttd:unload_all_plugins/0 cannot unload any plugin
Bugfix: fix errors found by dialyzer Bugfix: fix errors found by dialyzer
-------------------
Version 0.7.0-alpha
-------------------
0.7.0-alpha (2015-05-02) *Release Date: 2015-05-02*
-------------------------
[MQTT over WebSocket(SSL)](https://github.com/emqtt/emqttd/wiki/MQTT-Over-WebSocket) Now! [MQTT over WebSocket(SSL)](https://github.com/emqtt/emqttd/wiki/MQTT-Over-WebSocket) Now!
@ -652,9 +738,11 @@ Bugfix: issue #112 - Makefile to support build plugins
Bugfix: issue #96 - "make clean" cannot work Bugfix: issue #96 - "make clean" cannot work
-------------------
Version 0.6.2-alpha
-------------------
0.6.2-alpha (2015-04-24) *Release Date: 2015-04-24*
-------------------------
Bugfix: critical issue #54, #104, #106 - error when resume session Bugfix: critical issue #54, #104, #106 - error when resume session
@ -664,9 +752,11 @@ Improve: kick old client out when session is duplicated.
Improve: move mnesia dir config from etc/app.config to etc/vm.args Improve: move mnesia dir config from etc/app.config to etc/vm.args
-------------------
Version 0.6.1-alpha
-------------------
0.6.1-alpha (2015-04-20) *Release Date: 2015-04-20*
-------------------------
Integrate with [gproc library](https://github.com/uwiger/gproc) to support pool Integrate with [gproc library](https://github.com/uwiger/gproc) to support pool
@ -678,9 +768,11 @@ Improve: issues#84 - emqttd_pubsub is redesigned again to protect mnesia transac
Improve: issues#74 - ACL Support and update [ACL Design Wiki](https://github.com/emqtt/emqttd/wiki/ACL-Design) Improve: issues#74 - ACL Support and update [ACL Design Wiki](https://github.com/emqtt/emqttd/wiki/ACL-Design)
-------------------
Version 0.6.0-alpha
-------------------
0.6.0-alpha (2015-04-17) *Release Date: 2015-04-17*
-------------------------
ACL Support Now: [ACL-Design Wiki](https://github.com/emqtt/emqttd/wiki/ACL-Design) ACL Support Now: [ACL-Design Wiki](https://github.com/emqtt/emqttd/wiki/ACL-Design)
@ -720,29 +812,31 @@ Bugfix: issues#83 - emqttd_broker stats cannot work
Bugfix: issues#75 - careless about function name when emqttd_pubsub handle getstats message Bugfix: issues#75 - careless about function name when emqttd_pubsub handle getstats message
------------------
Version 0.5.5-beta
------------------
0.5.5-beta (2015-04-09) *Release Date: 2015-04-09*
-------------------------
Bugfix: issue #75 - careless about function name when emqttd_pubsub handle getstats message. Bugfix: issue #75 - careless about function name when emqttd_pubsub handle getstats message.
Bugfix: issue #79 - cannot find topic_subscriber table after cluster with other nodes. Bugfix: issue #79 - cannot find topic_subscriber table after cluster with other nodes.
-------------------
Version 0.5.4-alpha
-------------------
0.5.4-alpha (2015-03-22) *Release Date: 2015-03-22*
-------------------------
Benchmark this release on a ubuntu/14.04 server with 8 cores, 32G memory from QingCloud.com: Benchmark this release on a ubuntu/14.04 server with 8 cores, 32G memory from QingCloud.com::
``` 200K Connections,
200K Connections, 30K Messages/Sec,
30K Messages/Sec, 20Mbps In/Out Traffic,
20Mbps In/Out Traffic, 200K Topics,
200K Topics, 200K Subscribers,
200K Subscribers,
Consumed 7G memory, 40% CPU/core Consumed 7G memory, 40% CPU/core
```
Benchmark code: https://github.com/emqtt/emqttd_benchmark Benchmark code: https://github.com/emqtt/emqttd_benchmark
@ -752,27 +846,35 @@ Change: ./bin/emqttd_ctl add 'stats', 'metrics' commands.
Bugfix: issue #71, #72 Bugfix: issue #71, #72
-------------------
Version 0.5.3-alpha
-------------------
0.5.3-alpha (2015-03-19) *Release Date: 2015-03-19*
-------------------------
Bugfix: issues#72 - emqttd_cm, emqtt_sm ets:match_delete/2 with wrong pattern Bugfix: issues#72 - emqttd_cm, emqtt_sm ets:match_delete/2 with wrong pattern
-------------------
Version 0.5.2-alpha
-------------------
0.5.2-alpha (2015-03-18) *Release Date: 2015-03-18*
-------------------------
Change: upgrade esockd to 2.1.0-alpha, do not tune socket buffer for mqtt connection. Change: upgrade esockd to 2.1.0-alpha, do not tune socket buffer for mqtt connection.
-------------------
Version 0.5.1-alpha
-------------------
v0.5.1-alpha (2015-03-13) *Release Date: 2015-03-13*
-------------------------
Change: upgrade esockd to v1.2.0-beta, rename 'acceptor_pool' to 'acceptors' Change: upgrade esockd to v1.2.0-beta, rename 'acceptor_pool' to 'acceptors'
-------------------
Version 0.5.0-alpha
-------------------
v0.5.0-alpha (2015-03-12) *Release Date: 2015-03-12*
-------------------------
RENAME 'emqtt' to 'emqttd'! RENAME 'emqtt' to 'emqttd'!
@ -798,9 +900,11 @@ Bugfix: issue#64 - emqtt_app start/2: should wait_for_databases
Test: emqttd_topic_tests add more '_match_test' Test: emqttd_topic_tests add more '_match_test'
-------------------
Version 0.4.0-alpha
-------------------
v0.4.0-alpha (2015-03-10) *Release Date: 2015-03-10*
-------------------------
Support [$SYS Topics of Broker](https://github.com/emqtt/emqttd/wiki/$SYS-Topics-of-Broker) Now! Support [$SYS Topics of Broker](https://github.com/emqtt/emqttd/wiki/$SYS-Topics-of-Broker) Now!
@ -828,29 +932,37 @@ Change: emqtt_opts to add merge/2 function
Test: add emqtt_serialiser_tests.erl Test: add emqtt_serialiser_tests.erl
------------------
Version 0.3.4-beta
------------------
v0.3.4-beta (2015-03-08) *Release Date: 2015-03-08*
------------------------
Bugfix: emqtt_serialiser.erl cannot serialise UNSUBACK packets Bugfix: emqtt_serialiser.erl cannot serialise UNSUBACK packets
------------------
Version 0.3.3-beta
------------------
v0.3.3-beta (2015-03-07) *Release Date: 2015-03-07*
------------------------
Bugfix: emqtt_serialiser.erl cannot serialise PINGRESP issue#60 Bugfix: emqtt_serialiser.erl cannot serialise PINGRESP issue#60
------------------
Version 0.3.2-beta
------------------
v0.3.2-beta (2015-03-05) *Release Date: 2015-03-05*
------------------------
Improve: merge emqttc serialiser, parser, packet Improve: merge emqttc serialiser, parser, packet
Add: emqtt_opts to merge socket options Add: emqtt_opts to merge socket options
------------------
Version 0.3.1-beta
------------------
v0.3.1-beta (2015-03-02) *Release Date: 2015-03-02*
------------------------
Feature: SSL Socket Support Feature: SSL Socket Support
@ -864,9 +976,11 @@ Upgrade: esockd to v0.2.0
Upgrade: mochiweb to v3.0.0 Upgrade: mochiweb to v3.0.0
------------------
Version 0.3.0-beta
------------------
v0.3.0-beta (2015-01-19) *Release Date: 2015-01-19*
------------------------
Feature: HTTP POST API to support 'qos', 'retain' parameters Feature: HTTP POST API to support 'qos', 'retain' parameters
@ -878,9 +992,11 @@ Change: fix emqtt_pubsub.erl to match '#', '+'
Tests: emqtt_topic_tests.erl add more test cases Tests: emqtt_topic_tests.erl add more test cases
-------------------
Version 0.3.0-alpha
-------------------
v0.3.0-alpha (2015-01-18) *Release Date: 2015-01-08*
------------------------
NOTICE: Full MQTT 3.1.1 support now! NOTICE: Full MQTT 3.1.1 support now!
@ -908,9 +1024,11 @@ Test: simple cluster test
Closed Issues: #22, #24, #27, #28, #29, #30, #31, #32, #33, #34, #36, #37, #38, #39, #41, #42, #43 Closed Issues: #22, #24, #27, #28, #29, #30, #31, #32, #33, #34, #36, #37, #38, #39, #41, #42, #43
------------------
Version 0.2.1-beta
------------------
v0.2.1-beta (2015-01-08) *Release Date: 2015-01-08*
------------------------
pull request 26: Use binaries for topic paths and fix wildcard topics pull request 26: Use binaries for topic paths and fix wildcard topics
@ -924,8 +1042,11 @@ tag emqtt release accoding to [Semantic Versioning](http://semver.org/)
max clientId length is 1024 now. max clientId length is 1024 now.
0.2.0 (2014-12-07) -------------
------------------- Version 0.2.0
-------------
*Release Date: 2014-12-07*
rewrite the project, integrate with esockd, mochiweb rewrite the project, integrate with esockd, mochiweb
@ -933,38 +1054,51 @@ support MQTT 3.1.1
support HTTP to publish message support HTTP to publish message
0.1.5 (2013-01-05) -------------
------------------- Version 0.1.5
-------------
*Release Date: 2013-01-05*
Bugfix: remove QOS_1 match when handle PUBREL request Bugfix: remove QOS_1 match when handle PUBREL request
Bugfix: reverse word in emqtt_topic:words/1 function Bugfix: reverse word in emqtt_topic:words/1 function
0.1.4 (2013-01-04) -------------
------------------- Version 0.1.4
-------------
*Release Date: 2013-01-04*
Bugfix: fix "mosquitto_sub -q 2 ......" bug Bugfix: fix "mosquitto_sub -q 2 ......" bug
Bugfix: fix keep alive bug Bugfix: fix keep alive bug
0.1.3 (2013-01-04) -------------
------------------- Version 0.1.3
-------------
Feature: support QOS2 PUBREC, PUBREL,PUBCOMP messages *Release Date: 2013-01-04*
Feature: Support QOS2 PUBREC, PUBREL, PUBCOMP messages
Bugfix: fix emqtt_frame to encode/decoe PUBREC/PUBREL messages Bugfix: fix emqtt_frame to encode/decoe PUBREC/PUBREL messages
-------------
Version 0.1.2
-------------
0.1.2 (2012-12-27) *Release Date: 2012-12-27*
-------------------
Feature: release support like riak Feature: release support like riak
Bugfix: use ?INFO/?ERROR to print log in tcp_listener.erl Bugfix: use ?INFO/?ERROR to print log in tcp_listener.erl
-------------
Version 0.1.1
-------------
0.1.1 (2012-09-24) *Release Date: 2012-09-24*
-------------------
Feature: use rebar to generate release Feature: use rebar to generate release
@ -972,8 +1106,11 @@ Feature: support retained messages
Bugfix: send will msg when network error Bugfix: send will msg when network error
0.1.0 (2012-09-21) -------------
------------------- Version 0.1.0
-------------
*Release Date: 2012-09-21*
The first public release. The first public release.

View File

@ -1,9 +1,9 @@
.. _design: .. _design:
============ ======
Design Guide Design
============ ======
.. _design_architecture: .. _design_architecture:

View File

@ -52,6 +52,7 @@ Contents:
commands commands
plugins plugins
tune tune
changes
------- -------
License License

View File

@ -96,7 +96,9 @@ expire_messages(Time) when is_integer(Time) ->
when Time > (MegaSecs * 1000000 + Secs) -> Topic when Time > (MegaSecs * 1000000 + Secs) -> Topic
end), end),
Topics = mnesia:select(retained_message, Match, write), Topics = mnesia:select(retained_message, Match, write),
lists:foreach(fun(Topic) -> mnesia:delete({retained_message, Topic}) end, Topics) lists:foreach(fun(<<"$SYS/", _/binary>>) -> ok; %% ignore $SYS/# messages
(Topic) -> mnesia:delete({retained_message, Topic})
end, Topics)
end). end).
-spec(retained_count() -> non_neg_integer()). -spec(retained_count() -> non_neg_integer()).

View File

@ -61,8 +61,10 @@ parse_remaining_len(_Bin, _Header, _Multiplier, Length, #mqtt_packet_limit{max_p
{error, invalid_mqtt_frame_len}; {error, invalid_mqtt_frame_len};
parse_remaining_len(<<>>, Header, Multiplier, Length, Limit) -> parse_remaining_len(<<>>, Header, Multiplier, Length, Limit) ->
{more, fun(Bin) -> parse_remaining_len(Bin, Header, Multiplier, Length, Limit) end}; {more, fun(Bin) -> parse_remaining_len(Bin, Header, Multiplier, Length, Limit) end};
%% optimize: match PUBACK, PUBREC, PUBREL, PUBCOMP, UNSUBACK...
parse_remaining_len(<<0:1, 2:7, Rest/binary>>, Header, 1, 0, _Limit) -> parse_remaining_len(<<0:1, 2:7, Rest/binary>>, Header, 1, 0, _Limit) ->
parse_frame(Rest, Header, 2); parse_frame(Rest, Header, 2);
%% optimize: match PINGREQ...
parse_remaining_len(<<0:8, Rest/binary>>, Header, 1, 0, _Limit) -> parse_remaining_len(<<0:8, Rest/binary>>, Header, 1, 0, _Limit) ->
parse_frame(Rest, Header, 0); parse_frame(Rest, Header, 0);
parse_remaining_len(<<1:1, Len:7, Rest/binary>>, Header, Multiplier, Value, Limit) -> parse_remaining_len(<<1:1, Len:7, Rest/binary>>, Header, Multiplier, Value, Limit) ->

View File

@ -95,12 +95,16 @@ init([]) ->
StatsFun = emqttd_stats:statsfun('retained/count', 'retained/max'), StatsFun = emqttd_stats:statsfun('retained/count', 'retained/max'),
%% One second %% One second
{ok, StatsTimer} = timer:send_interval(timer:seconds(1), stats), {ok, StatsTimer} = timer:send_interval(timer:seconds(1), stats),
%% Five minutes State = #state{stats_fun = StatsFun, stats_timer = StatsTimer},
{ok, ExpireTimer} = timer:send_interval(timer:minutes(5), expire), {ok, init_expire_timer(env(expired_after), State)}.
{ok, #state{stats_fun = StatsFun,
expired_after = env(expired_after), init_expire_timer(0, State) ->
stats_timer = StatsTimer, State;
expire_timer = ExpireTimer}}. init_expire_timer(undefined, State) ->
State;
init_expire_timer(Secs, State) ->
{ok, Timer} = timer:send_interval(timer:seconds(Secs), expire),
State#state{expired_after = Secs, expire_timer = Timer}.
handle_call(Req, _From, State) -> handle_call(Req, _From, State) ->
?UNEXPECTED_REQ(Req, State). ?UNEXPECTED_REQ(Req, State).

View File

@ -36,7 +36,11 @@ groups() ->
parse_bridge, parse_bridge,
parse_publish, parse_publish,
parse_puback, parse_puback,
parse_pubrec,
parse_pubrel,
parse_pubcomp,
parse_subscribe, parse_subscribe,
parse_unsubscribe,
parse_pingreq, parse_pingreq,
parse_disconnect]}, parse_disconnect]},
{serializer, [], {serializer, [],
@ -173,17 +177,61 @@ parse_publish(_) ->
parse_puback(_) -> parse_puback(_) ->
Parser = emqttd_parser:new([]), Parser = emqttd_parser:new([]),
%%PUBACK(Qos=0, Retain=false, Dup=false, PacketId=1) %%PUBACK(Qos=0, Retain=false, Dup=false, PacketId=1)
PubAckBin = <<64,2,0,1>>,
{ok, #mqtt_packet{header = #mqtt_packet_header{type = ?PUBACK, {ok, #mqtt_packet{header = #mqtt_packet_header{type = ?PUBACK,
dup = false, dup = false,
qos = 0, qos = 0,
retain = false}}, <<>>} = Parser(PubAckBin). retain = false}}, <<>>} = Parser(<<64,2,0,1>>).
parse_pubrec(_) ->
Parser = emqttd_parser:new([]),
%%PUBREC(Qos=0, Retain=false, Dup=false, PacketId=1)
{ok, #mqtt_packet{header = #mqtt_packet_header{type = ?PUBREC,
dup = false,
qos = 0,
retain = false}}, <<>>} = Parser(<<5:4,0:4,2,0,1>>).
parse_pubrel(_) ->
Parser = emqttd_parser:new([]),
{ok, #mqtt_packet{header = #mqtt_packet_header{type = ?PUBREL,
dup = false,
qos = 1,
retain = false}}, <<>>} = Parser(<<6:4,2:4,2,0,1>>).
parse_pubcomp(_) ->
Parser = emqttd_parser:new([]),
{ok, #mqtt_packet{header = #mqtt_packet_header{type = ?PUBCOMP,
dup = false,
qos = 0,
retain = false}}, <<>>} = Parser(<<7:4,0:4,2,0,1>>).
parse_subscribe(_) -> parse_subscribe(_) ->
ok. Parser = emqttd_parser:new([]),
%% SUBSCRIBE(Q1, R0, D0, PacketId=2, TopicTable=[{<<"TopicA">>,2}])
{ok, #mqtt_packet{header = #mqtt_packet_header{type = ?SUBSCRIBE,
dup = false,
qos = 1,
retain = false},
variable = #mqtt_packet_subscribe{packet_id = 2,
topic_table = [{<<"TopicA">>,2}]} }, <<>>}
= Parser(<<130,11,0,2,0,6,84,111,112,105,99,65,2>>).
parse_unsubscribe(_) ->
Parser = emqttd_parser:new([]),
%% UNSUBSCRIBE(Q1, R0, D0, PacketId=2, TopicTable=[<<"TopicA">>])
{ok, #mqtt_packet{header = #mqtt_packet_header{type = ?UNSUBSCRIBE,
dup = false,
qos = 1,
retain = false},
variable = #mqtt_packet_unsubscribe{packet_id = 2,
topics = [<<"TopicA">>]}}, <<>>}
= Parser(<<162,10,0,2,0,6,84,111,112,105,99,65>>).
parse_pingreq(_) -> parse_pingreq(_) ->
ok. Parser = emqttd_parser:new([]),
{ok, #mqtt_packet{header = #mqtt_packet_header{type = ?PINGREQ,
dup = false,
qos = 0,
retain = false}}, <<>>}
= Parser(<<?PINGREQ:4, 0:4, 0:8>>).
parse_disconnect(_) -> parse_disconnect(_) ->
Parser = emqttd_parser:new([]), Parser = emqttd_parser:new([]),